Переключение языка словаря

Здравствуйте!
В разных контекстах 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]]

Настройки контекстов:

Дмитрий
03 июля 2015, 08:52
modx.pro
2
5 069
0

Комментарии: 8

Володя
03 июля 2015, 12:35
+1
попробуй добавить
$lang = $context->getOption('cultureKey');
$modx->lexicon->load($lang.':darvo:front');
    Дмитрий
    03 июля 2015, 14:33
    0
    Логично.
    Но как не пытаюсь, не выводит английскую и все тут.
    Для верности, даже поэкспериментировал напрямую:
    Так, на русском:
    //$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');
      Володя
      03 июля 2015, 14:35
      +1
      проверь лексиконы в админке сайта… мож ты просто файл en/front.inc.php добавил и все?
        Дмитрий
        03 июля 2015, 15:28
        0
        Да, совсем забыл выложить скриншот. Самое интересное, что в словарях все ок.
          Володя
          03 июля 2015, 15:44
          +1
          ну тогда хз…
          проверь так
          сделай сниппет по типу
          $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]]
            Дмитрий
            03 июля 2015, 16:35
            0
            Работает! В ходе экспериментов, выявил несколько ключевых моментов:
            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? Вроде бы ничего не должно поломаться?)
              Дмитрий
              03 июля 2015, 16:45
              0
              Кстати, может быть потому и не получалось, что ключ в контексте задан не как cultureKey а как culture_key? cultureKey по всей видимости значение в системе.
    Александр
    15 мая 2017, 12:41
    1
    0
    Мучился с мультиязычностью (минишоп + несколько языков) + babel
    Стандартные чанки не подгружали англояз в контексте (EN, делал как тут писали)
    Русский язык (контекст WEB) — выводился норм, Английский везде выводился а в чанке корзины — нет, причем шапка таблицы заказов переводилать, а строки нет. Бред какой-то
    в итоге создал плагин и повесил его на «OnLoadWebDocument»
    $lang = $modx->getOption('cultureKey');
    $modx->lexicon->load($lang.':minishop2:default');
    И только тогда все заработало.
    вот такие пироги
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      8