Мультиязычность статей InstantCMS 2

Интеграция transposh в InstantCMS 2

#1 30 сентября 2015 в 14:43
Добрый день! Возникла идея сделать мультиязычными статьи, новости и тд, кроме Админки в версии InstantCMS 2
Сам сделать это не смогу, но с удовольствием куплю платную доработку к инстанту в виде дополнения. Я думаю это будет бомба, если это кто то сделает.
Подсказки для разработчиков:
Сайт разработчика дополнения: transposh.org
Далее, такой же плагин существует и в wordpress. Думаю его переделать будет гораздо проще, чем оригинальный. Ссылка на сайт плагина wordpress: ru.wordpress.org/plugins/transposh-translation-filter-for-wordpress
Что скажете, господа разработчики? Получится под InstantCMS 2 подогнать?
Делитесь своими мнениями…
#2 30 сентября 2015 в 15:38
Здравствуйте!
Можно ли реализовать такую задачу в виде компонента (т. е. без вмешательства в код движка) сказать не могу, нужно смотреть все ли нужные события есть. Для себя я хардкодил, взял за основу Wordpress плагин qTranslate, дописал пару методов:
  1.  
  2. public static function langExist($lang = false) {
  3. $languages = self::getLanguages();
  4. return in_array($lang, $languages);
  5. }
  6.  
  7. public static function splitToLanguages($text = false, $quicktags = true) {
  8. if (!$text) { return false; }
  9.  
  10. $languages = self::getLanguages();
  11.  
  12. //init vars
  13. $split_regex = "#(<!--[^-]*-->|\[:[a-z]{2}\])#ism";
  14. $current_language = "";
  15. $matches = "";
  16. $result = array();
  17. foreach ($languages as $language) {
  18. $result[$language] = "";
  19. }
  20.  
  21. // split text at all xml comments
  22. $blocks = preg_split($split_regex, $text, -1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
  23. foreach ($blocks as $block) {
  24. # detect language tags
  25. if (preg_match("#^<!--:([a-z]{2})-->$#ism", $block, $matches)) {
  26. if (self::langExist($matches[1], $languages)) {
  27. $current_language = $matches[1];
  28. } else {
  29. $current_language = "invalid";
  30. }
  31. continue;
  32. // detect quicktags
  33. } elseif ($quicktags && preg_match("#^\[:([a-z]{2})\]$#ism", $block, $matches)) {
  34. if (self::langExist($matches[1], $languages)) {
  35. $current_language = $matches[1];
  36. } else {
  37. $current_language = "invalid";
  38. }
  39. continue;
  40. // detect ending tags
  41. } elseif (preg_match("#^<!--:-->$#ism", $block, $matches)) {
  42. $current_language = "";
  43. continue;
  44. // detect defective more tag
  45. }
  46. // correctly categorize text block
  47. if ($current_language == "") {
  48. // general block, add to all languages
  49. foreach ($languages as $language) {
  50. $result[$language] .= $block;
  51. }
  52. } elseif ($current_language != "invalid") {
  53. // specific block, only add to active language
  54. $result[$current_language] .= $block;
  55. }
  56. }
  57. return $result;
  58. }
  59.  
  60. public static function returnCurrentLangText($text = false, $return_lang = false){
  61. if (!$text) { return false; }
  62.  
  63. $config = cmsConfig::getInstance();
  64. $languages = self::getLanguages();
  65.  
  66. $result = self::splitToLanguages($text);
  67.  
  68. if (!$return_lang) {
  69. return $result[$config->language];
  70. } else {
  71. return self::langExist($return_lang, $languages) ? $result[$return_lang] : false;
  72. }
  73. }
  74.  
А затем в моделях вызывал по такому принципу:
  1.  
  2. if (isset($item['content'])) {
  3. $item['content'] = $core::returnCurrentLangText($item['content']);
  4. }
  5.  
Хотел запостить в блоге, кармы не хватает.
#3 30 сентября 2015 в 15:42
А, забыл еще. Текст при добавлении выглядит так: [:ru]Рыба текст[:en]Fish text
#4 3 октября 2015 в 11:51
Давно болею этой идеей. Сейчас как раз занят написанием этого компонента. Скоро будет готов.
#5 8 октября 2015 в 10:30
Я лично почти доделал возможность полной мультиязычности, не только одного языка...Демо Дороговатая вещь будет.
#6 8 октября 2015 в 10:32

Я лично почти доделал возможность полной мультиязычности, не только одного языка… Демо Дороговатая вещь будет.

Bajex

А мультиязычность для каких компонентов? И для компонентов ли только?
#7 8 октября 2015 в 10:35
Виджеты, сайт, Компоненты нужно отдельно рассматривать.
#8 8 октября 2015 в 10:36

Виджеты, сайт, Компоненты нужно отдельно рассматривать.

Bajex

И сколько все это добро будет стоить?
#9 8 октября 2015 в 10:40
Пока думаю. 1000-2000 примерно.
#10 8 октября 2015 в 10:44

Пока думаю. 1000-2000 примерно.

Bajex

А SEO-оптимизация поддерживается локализациями? Как насчет автоопределения языка для пользователя?
#11 8 октября 2015 в 11:02
Автоопределение, это еще писать надо компонент, сео и т.д. на каждом языке свое заполнять можно
#12 23 октября 2015 в 22:40


Давно болею этой идеей. Сейчас как раз занят написанием этого компонента. Скоро будет готов.

Иван Шкута

Добрый день.
Когда напишете модуль,
поделитесь пожалуйста информацией,
готов рассмотреть покупку модуля мультиязычности.
#13 25 октября 2015 в 00:33
AVPRT, ok. Думаю ничто не помешает мне выложить этот компонент бесплатно.
#14 8 ноября 2015 в 03:05
Готово! Можно пользоваться: instantcms.ru/addons/unilang.html
#15 8 ноября 2015 в 07:59

Компоненты нужно отдельно рассматривать.

Bajex
Рассмотрите, пожалуйста. Очень надо.
Если будет поддержка мультиязычности: контента, виджетов, инстантмапса я буду первый в рядах покупателей.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.