Компонент "Языки" для ICMS 2 - Обновление 1.1

+34
7.5K
Иллюстрация
Компонент "Языки" теперь стал поистине тотальным. Данное обновление коснулось в основном двух немаловажных аспектов — переводу форм и географических объектов. Теперь ваши пользователи могут видеть на родном для себя языке не только контент, категории, теги, но и формы регистрации, редактирования профиля, загрузки фото, создания категорий и добавления записей. Переведено практически все, до чего можно было дотянуться — заголовки fieldset-ов, заголовки полей, подсказки к полям, содержимое списков полей, списков категорий, списков групп и т.д.

Помимо перевода добавлена возможность управлять добавлением контента — доступно 3 варианта добавления контента на сайт:

— Стандартный(весь контент добавляется на сайт в том виде, в котором его ввел пользователь)
— Автоперевод(контент, добавленный пользователем будет автоматически переведен на все языки)
— Полный контроль(пользователь может полностью контролировать процесс добавления контента и его перевода)

Для разных групп пользователей предусмотрена своя настройка контроля форм, что позволит не нагружая пользователя обязательностью перевода сделать это вместо него. Вы сами решаете кто может использовать расширенные формы добавления контента, а кто нет.

По просьбам трудящихся реализован перевод названий стран, регионов, городов. Теперь везде, где требуется выбор/отображение города будет использоваться язык страницы. Перевод базы названий за вами, на это у меня, к сожалению, нет ни времени, ни столь обширных географических познаний. Для работы данной возможности и создания баз объектов на других языках вы можете использовать как таблицы БД из русской версии системы, так и из англоязычной. Главное, чтобы они были идентичны установленным в системе. Обо всем подробнее в небольшом видео-обзоре:


Компонент полностью бесплатен, однако любые пожертвования будут восприняты мной как степень заинтересованности сообщества в улучшении компонента и будут стимулировать меня к его развитию. Поблагодарить можно по реквизитам, указанным в профиле или воспользовавшись кнопками на этой странице.

+1
Алексей Т Алексей Т 5 лет назад #
Отличный компонент, в копилку полезняшек +
0
Alexprofi Alexprofi 5 лет назад #
Прекрасная новость! Спасибо Вам за работу!
0
Владимир Владимир 5 лет назад #
Отличная разработка! Спасибо!
Автор работает с большим опережением, внедряет то, что даже не успеваю предложить (например, варианты выбора авто- и модерируемых- переводов - просто класс!).
0
Игорь Lu Игорь Lu 5 лет назад #
Обалдеть shock
Спойлер
+1
Игорь Lu Игорь Lu 5 лет назад #
К стати, хочу добавить, если этот супер-компонент по переводу контента бесплатный и он, по моему, уже переводит абсолютно весь контент, то не пора ли его включить в официальную сборку Инстанта, чтобы при следующем обновлении системы не пришлось бы снова вносить изменения в файлах предусмотренные компонентом «Языки»!
Кто за? Ставьте плюс компоненту и его разработчику. Завалите его плюсами, чтобы это было убедительным аргументом для создателей замечательного Инстанта v

Спойлер
+2
dwd dwd 5 лет назад #
Если разработчики примут такое решение я буду только обеими руками за, но что-то мне подсказывает что этого не будет. И даже объясню почему - слишком много кода им придется перелопачивать чтобы это сделать. Понятное дело, что компонент получился более громоздким, чем если бы тот же функционал был реализован с вмешательством в файлы ядра, но мне потребовалось для этого более 1500 строк кода, причем пишу я обычно сжимая и объединяя строки там, где это только возможно. Я ни на что не претендую, все, что написано ниже это сугубо мое личное мнение.

В системе изначально нет четкой границы между ядром и шаблоном. Если разработчики читают комментарии, думаю они поймут о чем я. Нет такого места, где все переменные собраны, структурированы и подготовлены к выдаче в шаблон. Что-то приходится выдергивать в одном месте, что-то в другом. Вкладки групп и профилей, наборы, свойства, поля форм и многие другие вещи живут своей жизнью вообще не подозревая, что у системы есть ядро. Свойства при выводе объявлений получаются и выводятся прямо в шаблоне минуя контроллер, а при добавлении объявления при помощи ajax-запроса, в формах эти же свойства рендерятся прямо в html. И т.д. и т.п.

И пусть написанное мной будет воспринято адекватно. Я знаю как нелегко продумать архитектуру столь крупного и функционального продукта. И справились разработчики с этим на отлично. На мой взгляд описанное мной выше это единственный минус 2-й ветки Инстанта, все остальное реализовано разработчиками в лучшем виде и я даже не знаю стоит ли обращать внимание разработчиков на данный вопрос, ведь подобный функционал практически не востребован сообществом, а вы призываете их основательно перелопатить код системы.

Нужно ли это всему сообществу? Или повлечет за собой только кучу ненужной работы - перекраивание шаблонов, переписывание компонентов, виджетов? Рады ли будут этому пользователи системы? Ведь для тех, кому это не нужно это только головная боль, а таких большинство.
+2
vikont vikont 5 лет назад #
Постараюсь быть кратким и случайно ни за кого не решить вопрос...
1. Нужна ли многоязычность Инстанту? На этот вопрос ответили еще год назад! нужна и очень!
2. Заинтересованы ли сами разработчики в наличии многоязычности у родного движка? На этот вопрос тоже уже дан ответ при разработке компонента Мультиязычность. Да нужна.
Все это было до появления нового компонента "Языки", который оказался полной неожиданностью для многих и заставил пересматривать подход к многоязыковости Инстанта. В связи с этим возникают следующие вопросы:
3. Нужен ли компонент "Язык" Инстанту? Если он лучше других, тогда конечно нужен! Но использовать его как дополнительный функционал при столь тесном переплетении с кодом движка очень и очень проблематично...
4. Интересен ли компонент "Языки" разработчикам Инстанта - на этот вопрос отвечать им. Выскажу свое мнение, что скорее всего интересен, тем более, что интеграция в движек просится сама. Достойный компонент уже сейчас, практически как спрут вгрызается в код Инстанта. Но до полной интеграции еще много работы! А поэтому если разработчик сам поможет с интеграцией компонента "Языки" в Инстант, то кто будет против?
В итоге вопрос интеграции "Языков" в Инстант - это вопрос желания тесного взаимодействия обеих сторон. Как то так.
Это мое личное мнение. А мы потребители, конечно обеими руками ЗА.
+2
dwd dwd 5 лет назад #
Код компонента полностью открыт. Никто не мешает разработчикам посмотреть на те моменты, которые не удалось реализовать без правок и сделать соответствующие выводы. Также можно посмотреть как реализованы те или иные моменты перевода и сделать выводы о правильности/неправильности таких решений. Я уже говорил выше и скажу еще раз - я не претендую на доскональное знание системы и наверняка есть моменты, которые можно было реализовать проще и элегантнее. Так что пища для размышлений имеется. Да и я со своей стороны не против помочь если моя помощь потребуется.
0
Евгений Евгений 5 лет назад #
Спасибо, компонент отличный, только не пойму перевод только из админки в ручную, или можно задать автоперевод при добавлении контента. Или например если есть текст на русском нажимаешь на английский а там ошибка отсутствующей страницы, может как нибудь реализовать перевод при обращении к странице на другом языке?
0
dwd dwd 5 лет назад #
Вы текст выше читали? Или сразу решили форсировать события вопросом?

Помимо перевода добавлена возможность управлять добавлением контента - доступно 3 варианта добавления контента на сайт: - Стандартный(весь контент добавляется на сайт в том виде, в котором его ввел пользователь) - Автоперевод(контент, добавленный пользователем будет автоматически переведен на все языки) - Полный контроль(пользователь может полностью контролировать процесс добавления контента и его перевода)
0
Олег Васильевич я Олег Васильевич я 5 лет назад #
Спасибо большое!
С Наступающим вас!
0
Iceman Iceman 5 лет назад #
Возникла проблема с формами при добавлении контента. Вместо полей выводится:
Код PHP:
  1. getOptions(); if($options['enable_forms']){ $model = cmsCore::getModel('languages');
и так далее, до конца кода заменяющего <?php echo $field->getInput($value); ?>.
Проблема появляется после замены templates/default/assets/ui/form.tpl.php.
Модуль обновлял с первой версии по инструкции.
Пробовал и ручное добавление необходимых правок, так и замену файлами из папки res. Куда копать в этом случае?
0
dwd dwd 5 лет назад #
Даже и не знаю что сказать - фантастика. Ни у кого не было таких проблем. Вариант только один: где-то неверно вставили код. Пришлите мне ваш файлик(почта есть в моем профиле), с ним явно что-то не так. Судя по тому, что PHP-код выводится? а не выполняется то вы где-то потеряли начало этого кода. Перед
Код PHP:
  1. getOptions();{
должно быть еще и
Код PHP:
  1. <? # перевод содержимого форм
  2. if(cmsCore::isControllerExists('languages')) {
  3. $controller = cmsCore::getController('languages');
  4. $options = $controller->
0
Iceman Iceman 5 лет назад #
Так собственно в том и дело, что файлик из папки res с модулем. И там полный код, но спотыкается он именно на getOptions();{
0
dwd dwd 5 лет назад #
1. Попробуйте переименовать переменные $options и $controller в данном фрагменте кода дам им любые другие имена.
2. Проверьте разные формы на сайте. При выводе каких возникает ошибка, а при выводе каких нет. 3.

Судя по тому, что пользуются компонентом многие, а проблема только у вас значит проблема скорее всего либо в сторонних компонентах, либо в самописных полях. Трудно делать предположения вслепую.
0
Iceman Iceman 5 лет назад #
Переименование переменных не помогло. Попробовав поудалять сбоящие строки, пришел к тому, что выполнение кода прекращается после появления в нем "->".
Не выводятся абсолютно все поля, включая админку. Сторонние компоненты в админке отключил - эффекто не дало. Отключил даже все остальные компаненты, которые имеют такую возможность, вплоть до собственно компонента "языки", что в общем то тоже не помогло. Версия Instant - 2.6.1
Самописные поля отключать пока не пробовал, как попробую - дополню комментарий.
0
Iceman Iceman 5 лет назад #
Кажется нашел в чем был косяк:
Если код начинался с
Код PHP:
  1. <? # перевод содержимого форм
возникала ошибка, но после его замены на
Код PHP:
  1. <?php # перевод содержимого форм
поля начали выводиться.
+1
dwd dwd 5 лет назад #
Спасибо, учту на будущее. Вообще это мой косяк, все вставки и должны начинаться с <?php, именно такое правило оформления кода изначально было принято разработчиками, видать неспроста. А тут я пропустил этот момент.
0
Старый балбес Старый балбес 5 лет назад #
все вставки и должны начинаться с <?php, именно такое правило оформления кода изначально было принято разработчиками, видать неспроста
Разработчики не используют короткие теги по причине того что в
в php.ini должна быть включена опция short_open_tag,
А стандарт разрешает использовать и <?php, и короткие теги <?
http://www.php-fig.org/psr/psr-1/
0
Игорь Lu Игорь Lu 5 лет назад #
Обнаружил ещё проблему.
Когда в настройках сайта включаю функцию «Сжимать HTML», то перевод не срабатывает.
+1
dwd dwd 5 лет назад #
Из файла templates/default/assets/ui/form.tpl.php удалите последний блок
Код PHP:
  1. <script type="text/javascript">...</script>
заменив его строчкой
Код PHP:
  1. <?php $this->addJS('templates/default/js/translateform.js'); ?>
а в папку templates/default/js поместите файл, содержащийся в этом архиве.
Этот файл содержит код, удаленный из файла templates/default/assets/ui/form.tpl.php
0
Игорь Lu Игорь Lu 5 лет назад #
Спасибо, помогло joke
0
dwd dwd 5 лет назад #
Или же просто выровняйте в данном блоке данный фрагмент кода
Код PHP:
  1. $.post("<?php echo href_to('languages').'/translate_ajax'; ?>", { text: text, lang : lang })
  2. .done(function(data) {
в одну строку:
Код PHP:
  1. $.post("<?php echo href_to('languages').'/translate_ajax'; ?>", { text: text, lang : lang }).done(function(data) {
0
RBJ RBJ 5 лет назад #
Хороший компонент, и комменты интересные
Поиск по переводу не работает look
0
Игорь Lu Игорь Lu 5 лет назад #
Обнаружена ошибка при переводе виджета категорий. При переводе берёт совсем другие названия категорий.
Привожу пример на скриншётах.

1. Статья на Русском:


2. Та же статья из той же категории но как видно на скриншёте названия категорий в виджете в сайдбаре изменились на несоответствующие данной категории статей.
+2
dwd dwd 5 лет назад #
В файле templates/default/controllers/content/widgets/categories/categories.tpl.php меняем вставленный код на :
Код PHP:
  1. <?php # перевод категорий
  2. $system_lang = cmsCore::getLanguageName();
  3. $config = cmsConfig::getInstance();
  4. if(cmsCore::isControllerExists('languages') && $system_lang !== $config->language) {
  5. $url = explode('/', $this->controller->cms_core->uri);
  6. $model = cmsCore::getModel('languages');
  7. foreach($cats as $key=>$cat){
  8. $title = $model->filterEqual('item_id', $cat['id'])->filterEqual('ctype', $url[0])->filterEqual('lang', $system_lang)->getFieldFiltered('languages_cats', 'title');
  9. if($title) $cats[$key]['title'] = $title;
  10. }
  11. }
  12. # перевод категорий ?>
0
Игорь Lu Игорь Lu 5 лет назад #
Спасибо, теперь всё работает как положено :)
0
Владимир Владимир 5 лет назад #
Здравствуйте! Поставил этот код - в результате перевод виджета категорий происходит, но стало невозможным в этом виджете настроить вывод из отдельного типа контента, даже если его указываю в опциях виджета категорий, всё равно он определяется автоматически (показываются категории контента, в котором нахожусь), а мне нужно из отдельного типа контента (статически).
Причем, при переходе на русский (исходный) язык виджет работает опять правильно, но на переводимом языке вот такая ситуация. (инстант 271). Что посоветуете?
0
Владимир Владимир 5 лет назад #
Прошу прощения - не совсем верно сформулировал неисправность: (изначально не те файлы залил - от старой версии) - в общем, если установить сразу несколько виджетов категорий, настроенных на разные типы контента, то перевод происходит у первого, а на другие (второй и третий) вешается перевод первого. Др. словами, как сделать, чтобы все они переводились?
0
Нико Нико 5 лет назад #
При регистрации почему то не переводит Группу полей Анкета так и остается анкета но в профиле изменяется что можно сделать ?
0
Нико Нико 5 лет назад #
Да и в формах так же =( При редактирование профиля
0
Нико Нико 5 лет назад #
Значит у меня какой то баг, где можно посмотреть файл или базу почему не переводит ?
0
Нико Нико 5 лет назад #
В базе все переводит cms_languages_userfields
0
dwd dwd 5 лет назад #
Пройдите по ссылке http://ваш_сайт/admin/controllers/edit/languages/content/userfields/userfields и переведите все значения. Алгоритм перевода абсолютно всех форм на сайте един, поэтому если у вас переводятся все другие формы то думаю проблема заключается в том, что вы просто не перевели значения.
0
Нико Нико 5 лет назад #
Да я там же и перевёл =( В профиле переводится но когда редактирую нет, какой файл отвечает за перевод edi или форм при редактировании ?
0
dwd dwd 5 лет назад #
Полное описание вставок есть в файле readme.txt в архиве с компонентом. Я не знаю, что именно вы хотите там найти, но если интересно, то за перевод всех форм сайта отвечает одна единственная вставка в файле templates/default/assets/ui/form.tpl.php (строка ~ 170-180) и примерно строк 500 кода в файле system/controllers/languages/model.php, обслуживающих эту вставку. Я кстати поинтересовался у людей, использующих компонент, ваша проблема носит единичный характер, ни у кого таких проблем нет.
0
dwd dwd 5 лет назад #
Кстати, я правильно вас понял? Не переведены все поля группы? Или же не переводится только заголовок группы?
0
Нико Нико 5 лет назад #
Только заголовок то что анкета и так далее.
0
dwd dwd 5 лет назад #
Хорошо, заголовок не перевелся, это вы уже и раньше говорили. Что еще не перевелось? "так далее" это что такое? Чего из вас все клещами тянуть приходится? Если хотите чтоб вам помогли опишите подробнее, скриншотик сделайте. Можете мне на почту скинуть, можете прислать ваш файлик form.tpl.php, надо ж как-то ставить диагноз.
0
Нико Нико 5 лет назад #
Я просто сам не понимаю в чем дело все что было в папке закинул, form.tpl то что вы в папке res закинул, хочу отметить что на сайте 3 языка это может как то повлиять?
0
Нико Нико 5 лет назад #
0
Нико Нико 5 лет назад #
То что остальное переводится, просто я не перевел на англиском главное это Анкета группы
0
dwd dwd 5 лет назад #
У вас вообще перевод форм не работает, я не вижу ни одного переведенного поля - http://img-fotki.yandex.ru/get/112776/109657871.6/0_56a507_980436c3_orig.png, вы файлик form.tpl.php в папку какого шаблона закинули?
0
Нико Нико 5 лет назад #
Я их сам не перевел они переводятся вот у меня один шаблон стандартный
0
Нико Нико 5 лет назад #
Кстати дата рождения у вас тоже не переводится в компоненте тоже не выдает (
0
dwd dwd 5 лет назад #
Дата рождения не переводится, так и должно быть. Это не название поля( http://img-fotki.yandex.ru/get/171750/109657871.6/0_56a508_f6855365_orig.png) и хранится она черт знает где и ради нее писать столько же кода сколько ради всех остальных заголовков мне было лень. Лично я удаляю это поле сразу, при регистрации просить вводить дату это признак дурного тона.)) Все остальное должно перевестись.

1. В остальных формах(добавить контент, добавить категорию) у вас все переводится? Заголовки fieldset-ов все переведены?
2. Попробуйте заменить в файле forms.tpl.php(строка ~ 63)
Код PHP:
  1. if(isset($data['ctype_id'])) {
и (строка ~ 75)
Код PHP:
  1. if($current_controller = 'users' && isset($fieldset['title'])){
на
Код PHP:
  1. if(1 == 1) {
посмотреть на результат.
0
Нико Нико 5 лет назад #
Результат поля не перевелись и ну и группы тоже

forms.tpl.php * form.tpl.php
0
dwd dwd 5 лет назад #
строка ~ 75
Код PHP:
  1. if($current_controller = 'users' && isset($fieldset['title'])){
замените на
Код PHP:
  1. if(isset($fieldset['title'])){
и все должно заработать.
0
Нико Нико 5 лет назад #
А вот как в профиле
0
Нико Нико 5 лет назад #
Нет так же (((
Спойлер

Еще от автора

Компонент «Продажа полей» для ICMS 2
Компонент для тотального управления продажей полей. Возможна оплата показа пользователями и самим автором. Масса типов продажи полей.
Компонент «Мотивация пользователей» для ICMS 2
Компонент предназначен для поощрения пользователей за систематическое посещение сайта.
Поле «Поддерживаю!» для ICMS 2
Поле «Поддерживаю!» предназначено для сбора голосов в решении какой-то задачи.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.