Переключение языка словаря
Здравствуйте!
В разных контекстах en и web, словарные слова выводятся только на русском языке. Уже голову сломал. Очевидно, что ответ лежит на поверхности, иначе как объяснить отсутствие такой проблемы в документации.
Словари лежат в «core/components/darvo/lexicon/en/front.inc.php» и «core/components/darvo/lexicon/ru/front.inc.php»
Содержимое ru:
Содержимое en:
Настройки контекстов:
В разных контекстах en и web, словарные слова выводятся только на русском языке. Уже голову сломал. Очевидно, что ответ лежит на поверхности, иначе как объяснить отсутствие такой проблемы в документации.
Словари лежат в «core/components/darvo/lexicon/en/front.inc.php» и «core/components/darvo/lexicon/ru/front.inc.php»
Содержимое ru:
<?php
$_lang['a_share'] = 'Поделиться сайтом с друзьями:';
$_lang['a_comment_pls'] = 'Пожалуйста, оставьте свой отзыв о сайте.';
$_lang['a_action'] = 'Действие';
$_lang['a_rank'] = 'Ранг мода от 0 до';
$_lang['a_rank_helper'] = 'Укажите ранг мода от 0 до';
$_lang['a_price'] = 'Стоимость';
$_lang['a_price_helper'] = 'Укажите 0 чтобы создать предложение с открытой ценой';
$_lang['a_buy'] = 'Куплю';
$_lang['a_sell'] = 'Продам';
$_lang['a_trade'] = 'Обменяю';
$_lang['a_add'] = 'Добавить';
$_lang['a_want'] = 'Хочу';
$_lang['a_shove'] = 'Меняю';
$_lang['a_info'] = 'Описание';
$_lang['a_buyers'] = 'Покупатели';
$_lang['a_sellers'] = 'Продавцы';
$_lang['a_wrap_item'] = 'Предмет';
$_lang['a_wrap_price'] = 'Стоимость';
$_lang['a_wrap_player'] = 'Игрок';
$_lang['a_wrap_contacts'] = 'Связь';
$_lang['a_packs'] = 'Наборы модов:';
Содержимое en:
<?php
$_lang['a_share'] = 'Share:';
$_lang['a_comment_pls'] = 'Please leave your feedback about the site.';
$_lang['a_action'] = 'Action';
$_lang['a_rank'] = 'Mod rank from 0 to';
$_lang['a_rank_helper'] = 'Select mod rank from 0 to';
$_lang['a_price'] = 'Price';
$_lang['a_price_helper'] = 'Enter 0 to create an open price offer';
$_lang['a_buy'] = 'WTB';
$_lang['a_sell'] = 'WTS';
$_lang['a_trade'] = 'WTT';
$_lang['a_add'] = 'Add';
$_lang['a_want'] = 'Want';
$_lang['a_shove'] = 'Shove';
$_lang['a_info'] = 'Info';
$_lang['a_buyers'] = 'Buyers';
$_lang['a_sellers'] = 'Sellers';
$_lang['a_wrap_item'] = 'Item';
$_lang['a_wrap_price'] = 'Price';
$_lang['a_wrap_player'] = 'Player';
$_lang['a_wrap_contacts'] = 'Contacts';
$_lang['a_packs'] = 'Mod packs:';
На событии OnLoadWebDocument висит плагин:<?php
$modx->getService('lexicon','modLexicon');
return $modx->context->key;//$modx->lexicon->load('darvo:front');
Вывожу словарные слова так: [[%a_packs]]Настройки контекстов:
Комментарии: 8
попробуй добавить
$lang = $context->getOption('cultureKey');
$modx->lexicon->load($lang.':darvo:front');
Логично.
Но как не пытаюсь, не выводит английскую и все тут.
Для верности, даже поэкспериментировал напрямую:
Так, на русском:
Но как не пытаюсь, не выводит английскую и все тут.
Для верности, даже поэкспериментировал напрямую:
Так, на русском:
//$lang = $modx->getOption('culture_key');
$modx->getService('lexicon','modLexicon');
return $modx->lexicon->load('ru:darvo:front');
Так, тоже на русском://$lang = $modx->getOption('culture_key');
$modx->getService('lexicon','modLexicon');
return $modx->lexicon->load('darvo:front');
А вот так, не обрабатывает значения, т.е. на выходе «a_packs»://$lang = $modx->getOption('culture_key');
$modx->getService('lexicon','modLexicon');
return $modx->lexicon->load('en:darvo:front');
проверь лексиконы в админке сайта… мож ты просто файл en/front.inc.php добавил и все?
ну тогда хз…
проверь так
сделай сниппет по типу
проверь так
сделай сниппет по типу
$lang = (!empty($lang)) ? $lang : $modx->getOption('cultureKey');
$modx->setOption('cultureKey',$lang);
$modx->lexicon->load($lang.':darvo:front');
вызвать так[[!lexicon?
&lang=`ru`
]]
и [[!lexicon?
&lang=`en`
]]
и после каждого вызова пробуй вывести фразу со словаря. например[[!%a_buy]]
Работает! В ходе экспериментов, выявил несколько ключевых моментов:
1. Если использовать сниппет, то фраза должна быть не кешируемой. То есть [[!%a_buy]] будет работать, а [[%a_buy]] — нет.
2. Если использовать плагин, то кеширование фраз не требуется. То есть [[%a_buy]] работает.
3. $modx->setOption('cultureKey',$lang); — обязательная строка.
Код плагина на событие «OnLoadWebDocument»:
Вопросик по поводу:
$lang = $modx->getOption('culture_key');
$modx->setOption('cultureKey',$lang);
Стоит ли поменять название ключа culture_key в контексте на cultureKey? Вроде бы ничего не должно поломаться?)
1. Если использовать сниппет, то фраза должна быть не кешируемой. То есть [[!%a_buy]] будет работать, а [[%a_buy]] — нет.
2. Если использовать плагин, то кеширование фраз не требуется. То есть [[%a_buy]] работает.
3. $modx->setOption('cultureKey',$lang); — обязательная строка.
Код плагина на событие «OnLoadWebDocument»:
$lang = $modx->getOption('culture_key');
$modx->setOption('cultureKey',$lang);
$modx->lexicon->load($lang.':darvo:front');
Вопросик по поводу:
$lang = $modx->getOption('culture_key');
$modx->setOption('cultureKey',$lang);
Стоит ли поменять название ключа culture_key в контексте на cultureKey? Вроде бы ничего не должно поломаться?)
Кстати, может быть потому и не получалось, что ключ в контексте задан не как cultureKey а как culture_key? cultureKey по всей видимости значение в системе.
Мучился с мультиязычностью (минишоп + несколько языков) + babel
Стандартные чанки не подгружали англояз в контексте (EN, делал как тут писали)
Русский язык (контекст WEB) — выводился норм, Английский везде выводился а в чанке корзины — нет, причем шапка таблицы заказов переводилать, а строки нет. Бред какой-то
в итоге создал плагин и повесил его на «OnLoadWebDocument»
вот такие пироги
Стандартные чанки не подгружали англояз в контексте (EN, делал как тут писали)
Русский язык (контекст WEB) — выводился норм, Английский везде выводился а в чанке корзины — нет, причем шапка таблицы заказов переводилать, а строки нет. Бред какой-то
в итоге создал плагин и повесил его на «OnLoadWebDocument»
$lang = $modx->getOption('cultureKey');
$modx->lexicon->load($lang.':minishop2:default');
И только тогда все заработало.вот такие пироги
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.