modx словари и мультиязычность.

Здравствуйте. Встала задача сделать мультиязычный сайт, решил сделать это через словари, но столкнулся с рядом проблем.
Пытаюсь создать свое пространство имен, чтобы в словарях перевод хранился в нем, а не вперемешку с допустим ACE, не получается. Видимо для этого надо писать целый компонент, т.к создал я пространство. Иду в словари, выбираю созданное пространство, туда создаю запись RU — а она после создания не отображается. И в фильтрах даже RU нету, только EN. Но это пол беды. Даже если я в пространстве имен ACE создам какую то запись, например link_home с значением «ссылка на главную», дальше я иду в документ, вставляю [[%link_home]], и вместо ожидаемой надписи «ссылка на главную» по итогу я вижу link_home.
Можно конечно через контексты, но это неудобно. Во первых децентрализованность, нужно поддерживать сразу несколько контекстов, во вторых обьемность. А если языков будет 3-4-5, тут можно будет прикурить.
Подскажите пожалуйста, может быть я что то не знаю о словарях? Пытался гуглить — информации нужной не нашел.
UPD методом тыка выяснил, что если записи в пространство имен core добавлять — они работают.
Николай
01 февраля 2017, 09:18
modx.pro
4 713
0

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

Павел Романов
01 февраля 2017, 12:48
3
+2
Нужно создать в core/components директорию в соответствии с Вашим namespace.
В ней директорию lexicon и в ней уже папки по языкам.
То есть, если пространство называется langs, то так:
core
  components
    langs
      lexicon
        ru
        en
        ...

В каждой языковой папке создайте файл default.inc.php и пропишите туда Ваши переменные:
<?php
$_lang['link_home'] = 'На главную';
$_lang['feedback'] = 'Обратная связь';
$_lang['sitemap'] = 'Карта сайта';
...

После этого все записи появятся в словарях, их можно будет править и т. д.
Выводить надежнее так:
[[%link_home? &namespace=`langs`]]
    Николай
    01 февраля 2017, 13:14
    0
    del
      Николай
      01 февраля 2017, 13:38
      0
      Попрошу еще помощи немного. Как перезаписывать $modx->setOption('cultureKey', 'en');?
      Я даже в index.php перед $modx->initialize('web'); вставил, для опыта. Не меняется язык никак…
      Если только у контекста сам руками прописываю en или ru — меняется…
        Павел Романов
        01 февраля 2017, 13:41
        0
        У контекста вручную добавляете, да.
          Николай
          01 февраля 2017, 13:47
          0
          А как его менять на лету? Чтобы в зависимости от $_SESSION['lang'] подставлялся?
            Николай
            01 февраля 2017, 13:52
            0
            Разобрался. Зачем то нужно делать $modx->switchContext('web');
              Гриборий
              11 февраля 2017, 17:31
              +1
              Имейте в виду, setOption устанавливает параметры текущего экземпляра объекта (this instance of an xPDOObject).
                Гриборий
                11 февраля 2017, 17:36
                1
                +1
                То есть,
                $modx->cultureKey;
                вернет значение объекта, переопределенное setOption.
                А
                $modx->getOption('cultureKey');
                вернет исходную системную настройку.
                  Николай
                  08 августа 2018, 10:37
                  0
                  Здравствуйте. На другом сайте столкнулся с проблемой. Хочу так же на лету менять эту настройку, и столкнулся с тем что теперь ничего не работает, вообще.
                  Беру, и вандально добавляю в index.php
                  $modx->setOption('cultureKey', 'en');
                  $modx->initialize('web');
                  $modx->setOption('cultureKey', 'en');
                  $modx->switchContext('web');
                  
                  echo $modx->cultureKey; // возвращает ru
                  echo $modx->getOption('cultureKey'); // возвращает en
                  по всякому пытался. Не могу понять что не так…
                Гриборий
                11 февраля 2017, 17:32
                +1
                Да, вы, кстате, в курсе про «lingua»?
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          10