Как добавить поддержку многоязычности в модуль?

  • 22 Ответов
  • 1264 Просмотров

0 Пользователей и 1 Гость просматривают эту тему.

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Доброго времени суток.

Пытаюсь добавить поддержку многоязычности в модуль S5 MailChimp Signup - никак не получается.

Вот например часть кода:
if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $_GET['email'])) {
return "Email address is invalid";
}

Как вместо "Email address is invalid" выводить значение константы из языкового файла?

Собственного самого языкового файла там нет и я проделал следующее:

1. Создал файл languages/en-GB/en-GB.mod_s5_mailchimp_signup.ini

2. В mod_s5_mailchimp_signup.xml добавил:
<languages folder="languages-front">
<language tag="en-GB">mod_s5_mailchimp_signup.ini</language>
    </languages>

3. В en-GB.mod_s5_mailchimp_signup добавил:
MOD_S5_MAILCHIMP_SIGNUP_ERROR_INVALID_EMAIL="Invalid Email Address"
Потом пытаюсь вывести константу вместо стандартного текста:
if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $_GET['email'])) {
return JText::_('MOD_S5_MAILCHIMP_SIGNUP_ERROR_INVALID_EMAIL');
}

В результате на сайте отдает название самой константы, вместо его значения из языкового файла   ^-^

Подскажите, что я пропустил или не так сделал  ;D
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru


*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Включите отладку языков и посмотрите, он подгружается для этого модуля?

Выводится ??MOD_S5_MAILCHIMP_SIGNUP_ERROR_INVALID_EMAIL??
Это значит, что не может найти файл языка или соответствие в нём?

Сам языковой файл судя по системной отладке вроде подгружается:
**Loaded** : JROOT/language/en-GB/en-GB.mod_s5_mailchimp_signup.ini
Прошу прощения за глупый вопрос, но как Joomla в данном случаи знает путь к файлу языков? Через XML?

Т.е. есть строка
return JText::_('MOD_S5_MAILCHIMP_SIGNUP_ERROR_INVALID_EMAIL');А как указать, где должен производиться поиск по константе MOD_S5_MAILCHIMP_SIGNUP_ERROR_INVALID_EMAIL?

А то ведь в самом модуле изначально нет поддержки многоязычности и текст на английском в оригинале пишется напрямую в коде, а не через константу. И по сути вместо этого текста я просто подставляю константу через JText... правильно ли это?
« Последнее редактирование: 14.04.2016, 17:08:28 от wd »
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн b2z

  • *****
  • 7449
  • [+]739 / [-]0
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit

Выводится ??MOD_S5_MAILCHIMP_SIGNUP_ERROR_INVALID_EMAIL??
Это значит, что не может найти файл языка или соответствие в нём?

Сам языковой файл судя по системной отладке вроде подгружается:
**Loaded** : JROOT/language/en-GB/en-GB.mod_s5_mailchimp_signup.ini
Прошу прощения за глупый вопрос, но как Joomla в данном случаи знает путь к файлу языков? Через XML?

Т.е. есть строка
return JText::_('MOD_S5_MAILCHIMP_SIGNUP_ERROR_INVALID_EMAIL');А как указать, где должен производиться поиск по константе MOD_S5_MAILCHIMP_SIGNUP_ERROR_INVALID_EMAIL?

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

А так язык подгружается автоматом в хелпере:
https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/module/helper.php#L182-L186

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

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
А вот helper.php отсутствует в директории модуля - его в этом случаи нужно подключить? Если да - это сложное дело? :)
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн Taatshi

языковой файл в кодировке utf-8 без bom?
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3  /  ОТЗЫВЫ 
Минимальная ставка за платные услуги 1000 рэ Связь: telegram - Taatshi, почта - Taatshi на яндексе.

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
языковой файл в кодировке utf-8 без bom?

Так точно.

Может у кого-то есть возможность поставить этот модуль и попробовать подключить к нему языковой файл?
Сам модуль бесплатный, скачать можно тут.
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Или может есть ещё идеи почему не работает?

Helper.php вообще нужен внутри папки модуля и что значит, если его нет?
Или он по-умолчанию подгружается для всех модулей, даже если внутри такого файла нет?
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн robert

wd, helper.php не обязателен.
  • Не будь паразитом, сделай что-нибудь самостоятельно!
  • В личке и по Skype не даю советов.

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
А может быть из-за того, что всё это подгружается через AJAX?
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru


*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Значения, которые хочу перевести находится в файле store-address.php и выводятся без перезагрузки страницы:

Спойлер
[свернуть]

Сообщения 'Success! Check your email to confirm sign up.' , 'Error: ', "Email address is invalid" и "No email address provided" выводятся без перезагрузки страницы (т.е. используется AJAX, если я правильно понимаю). Правда не знаю имеет это значение или нет, потому и спрашиваю :)

Ещё заметил, что там кавычки разные (кавычки в которых выводится текст статуса отправки) - где-то двойные, а где-то одиночные... тоже не знаю имеет ли это значение :)
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн b2z

  • *****
  • 7449
  • [+]739 / [-]0
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Ну и причём тут модуль? Всё находится в отдельном файле... Подгрузите язык, как это делает helper модуля.

Так этот файл внутри директории модуля mod_s5_mailchimp_signup/files/store-address.php - это получается не связанный с модулем файл?
helper.php в этом модуле отсутствует... или как можно посмотреть, как это делает helper?
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru


*

Оффлайн Taatshi

Я, кажется, начинаю понимать. У меня была похожая ситуация.

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

Как сделать это корректнее пока не придумала.

Здесь не переводится, наверное, потому, что в AJAX проверка на язык не включена. Можно тоже сделать проверку на язык прямо в файле.
« Последнее редактирование: 19.04.2016, 12:46:03 от Taatshi »
ВЕРСТКА, САЙТЫ ПОД КЛЮЧ, УДАЛЕНИЕ ВИРУСОВ, МИГРАЦИЯ НА JOOMLA 3  /  ОТЗЫВЫ 
Минимальная ставка за платные услуги 1000 рэ Связь: telegram - Taatshi, почта - Taatshi на яндексе.

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Спасибо всем за помощь и советы.
Taatshi, у меня уже возникала подобная, но более брутальная идея - сделать три сборки модуля для трех языков )
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн b2z

  • *****
  • 7449
  • [+]739 / [-]0
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
А разве здесь Javascript? Вроде как PHP.

Код: (php) [Выделить]
$lang = JFactory::getLanguage();
$lang->load('mod_s5_mailchimp_signup', JPATH_BASE, null, false, true);

О, спасибо! Заработало. Я неправильно писал код из helper...
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Добрый вечер.

Прошу прощения за дилетантство в данном вопросе, но возникла ещё проблема с этим модулем из ряда "мистическая"...

Проблема в том, что значение констант берется только из английского ini файла.
Есть к примеру файл с переводом на немецкий, из отладки видно, что он подключен:
**Geladen** : JROOT/language/de-DE/de-DE.mod_s5_mailchimp_signup.iniНо на немецкой версии сайта выводится перевод на английском.

Сами языковые файлы проверил - там всё правильно (переводы есть).

Подскажите, пожалуйста, в чём может быть проблема?
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн b2z

  • *****
  • 7449
  • [+]739 / [-]0
  • Разраблю понемногу
    • Просмотр профиля
    • NorrNext - расширения для Joomla! и Pagekit
Видимо по какой-то причине не подхватывает другой язык... Попробуйте так:
Код: (php) [Выделить]
$lang->load('mod_s5_mailchimp_signup', JPATH_BASE, $lang->getTag(), false, true);

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Видимо по какой-то причине не подхватывает другой язык... Попробуйте так:
Код: (php) [Выделить]
$lang->load('mod_s5_mailchimp_signup', JPATH_BASE, $lang->getTag(), false, true);

Не помогло... по-прежнему выводит только английский.
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru

*

Оффлайн wd

  • *****
  • 525
  • [+]17 / [-]1
  • Просто юзер
    • Просмотр профиля
    • Мощный и дешевый KVM VDS/VPS хостинг
Попробовал вот такое решение (получить текущий язык из url) - подглядел у соседей на forum.joomla.org:


// load language string definitions in url
$app = JFactory::getApplication('site');
$app->initialise();
$lang = JFactory::getLanguage();
$url = getenv("HTTP_REFERER");
$choice_lg = strpos($url_lg, "/en/");
if ($choice_lg === false) $lg_tag = "de-DE";
else $lg_tag = "en-GB";
$extension = 'mod_s5_mailchimp_signup';
$base_dir = JPATH_SITE;
$lang->load($extension, $base_dir, $lg_tag, true);

Но в этом случаи наоборот - выдает всё время перевод из немецкого файла локализации (даже на английской версии).

Может можно как-то допилить этот код, чтобы он корректно работал для 3 языков (русский, немецкий, итальянский)?
Мощный KVM VDS на SSD от 5$: бесплатные 10$ для теста при регистрации.
Описание и руководство по Joomla 2.5 на портале Joomlauser.ru
Свежие новости, отличные переводы и документация в блоге Joomlablog.ru