Форум русской поддержки Joomla!® CMS
09.12.2016, 19:33:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

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

 (Прочитано 1044 раз)
0 Пользователей и 1 Гость смотрят эту тему.
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« : 13.04.2016, 23:07:22 »

Доброго времени суток.

Пытаюсь добавить поддержку многоязычности в модуль 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');
}

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

Подскажите, что я пропустил или не так сделал  Grin
Записан
b2z
Support Team
*****

Репутация: +710/-0
Online Online

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #1 : 14.04.2016, 10:08:27 »

Включите отладку языков и посмотрите, он подгружается для этого модуля?
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #2 : 14.04.2016, 16:02:23 »

Включите отладку языков и посмотрите, он подгружается для этого модуля?

Выводится ??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, 16:08:28 от wd » Записан
b2z
Support Team
*****

Репутация: +710/-0
Online Online

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #3 : 14.04.2016, 16:48:17 »


Выводится ??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
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #4 : 14.04.2016, 17:54:00 »

А вот helper.php отсутствует в директории модуля - его в этом случаи нужно подключить? Если да - это сложное дело? Azn
Записан
Taatshi
Support Team
*****

Репутация: +430/-3
Offline Offline

Пол: Женский
Сообщений: 4718

Мама, я снова верстал во сне...


« Ответ #5 : 14.04.2016, 18:08:56 »

языковой файл в кодировке utf-8 без bom?
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #6 : 14.04.2016, 20:46:46 »

языковой файл в кодировке utf-8 без bom?

Так точно.

Может у кого-то есть возможность поставить этот модуль и попробовать подключить к нему языковой файл?
Сам модуль бесплатный, скачать можно тут.
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #7 : 15.04.2016, 22:04:53 »

Или может есть ещё идеи почему не работает?

Helper.php вообще нужен внутри папки модуля и что значит, если его нет?
Или он по-умолчанию подгружается для всех модулей, даже если внутри такого файла нет?
Записан
robert
Профи
********

Репутация: +344/-11
Offline Offline

Пол: Мужской
Сообщений: 3593


« Ответ #8 : 15.04.2016, 22:49:11 »

wd, helper.php не обязателен.
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #9 : 16.04.2016, 14:31:12 »

А может быть из-за того, что всё это подгружается через AJAX?
Записан
b2z
Support Team
*****

Репутация: +710/-0
Online Online

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #10 : 17.04.2016, 09:39:40 »

Что всё?
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #11 : 18.04.2016, 20:38:23 »

Значения, которые хочу перевести находится в файле store-address.php и выводятся без перезагрузки страницы:

Показать текстовый блок

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

Ещё заметил, что там кавычки разные (кавычки в которых выводится текст статуса отправки) - где-то двойные, а где-то одиночные... тоже не знаю имеет ли это значение Azn
Записан
b2z
Support Team
*****

Репутация: +710/-0
Online Online

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #12 : 18.04.2016, 20:47:46 »

Ну и причём тут модуль? Всё находится в отдельном файле... Подгрузите язык, как это делает helper модуля.
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #13 : 18.04.2016, 22:27:11 »

Ну и причём тут модуль? Всё находится в отдельном файле... Подгрузите язык, как это делает helper модуля.

Так этот файл внутри директории модуля mod_s5_mailchimp_signup/files/store-address.php - это получается не связанный с модулем файл?
helper.php в этом модуле отсутствует... или как можно посмотреть, как это делает helper?
Записан
b2z
Support Team
*****

Репутация: +710/-0
Online Online

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #14 : 18.04.2016, 22:34:28 »

https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/module/helper.php#L182-L186
Записан
Taatshi
Support Team
*****

Репутация: +430/-3
Offline Offline

Пол: Женский
Сообщений: 4718

Мама, я снова верстал во сне...


« Ответ #15 : 19.04.2016, 11:43:01 »

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

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

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

Здесь не переводится, наверное, потому, что в AJAX проверка на язык не включена. Можно тоже сделать проверку на язык прямо в файле.
« Последнее редактирование: 19.04.2016, 11:46:03 от Taatshi » Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #16 : 20.04.2016, 14:33:01 »

Спасибо всем за помощь и советы.
Taatshi, у меня уже возникала подобная, но более брутальная идея - сделать три сборки модуля для трех языков )
Записан
b2z
Support Team
*****

Репутация: +710/-0
Online Online

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #17 : 20.04.2016, 14:35:15 »

А разве здесь Javascript? Вроде как PHP.

Код
$lang = JFactory::getLanguage();
$lang->load('mod_s5_mailchimp_signup', JPATH_BASE, null, false, true);
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #18 : 20.04.2016, 15:53:40 »

А разве здесь Javascript? Вроде как PHP.

Код
$lang = JFactory::getLanguage();
$lang->load('mod_s5_mailchimp_signup', JPATH_BASE, null, false, true);

О, спасибо! Заработало. Я неправильно писал код из helper...
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #19 : 23.04.2016, 22:39:40 »

Добрый вечер.

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

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

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

Подскажите, пожалуйста, в чём может быть проблема?
Записан
b2z
Support Team
*****

Репутация: +710/-0
Online Online

Пол: Мужской
Сообщений: 7538


Разраблю понемногу


« Ответ #20 : 24.04.2016, 10:24:37 »

Видимо по какой-то причине не подхватывает другой язык... Попробуйте так:
Код
$lang->load('mod_s5_mailchimp_signup', JPATH_BASE, $lang->getTag(), false, true);
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #21 : 24.04.2016, 14:06:30 »

Видимо по какой-то причине не подхватывает другой язык... Попробуйте так:
Код
$lang->load('mod_s5_mailchimp_signup', JPATH_BASE, $lang->getTag(), false, true);

Не помогло... по-прежнему выводит только английский.
Записан
wd
Завсегдатай
*****

Репутация: +17/-1
Offline Offline

Пол: Мужской
Сообщений: 529


Просто юзер


« Ответ #22 : 24.04.2016, 16:37:09 »

Попробовал вот такое решение (получить текущий язык из 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 языков (русский, немецкий, итальянский)?
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet