modx словари и мультиязычность.
        Здравствуйте. Встала задача сделать мультиязычный сайт, решил сделать это через словари, но столкнулся с рядом проблем.
Пытаюсь создать свое пространство имен, чтобы в словарях перевод хранился в нем, а не вперемешку с допустим ACE, не получается. Видимо для этого надо писать целый компонент, т.к создал я пространство. Иду в словари, выбираю созданное пространство, туда создаю запись RU — а она после создания не отображается. И в фильтрах даже RU нету, только EN. Но это пол беды. Даже если я в пространстве имен ACE создам какую то запись, например link_home с значением «ссылка на главную», дальше я иду в документ, вставляю [[%link_home]], и вместо ожидаемой надписи «ссылка на главную» по итогу я вижу link_home.
Можно конечно через контексты, но это неудобно. Во первых децентрализованность, нужно поддерживать сразу несколько контекстов, во вторых обьемность. А если языков будет 3-4-5, тут можно будет прикурить.
Подскажите пожалуйста, может быть я что то не знаю о словарях? Пытался гуглить — информации нужной не нашел.
UPD методом тыка выяснил, что если записи в пространство имен core добавлять — они работают.
    
    
                                                                                
            Пытаюсь создать свое пространство имен, чтобы в словарях перевод хранился в нем, а не вперемешку с допустим ACE, не получается. Видимо для этого надо писать целый компонент, т.к создал я пространство. Иду в словари, выбираю созданное пространство, туда создаю запись RU — а она после создания не отображается. И в фильтрах даже RU нету, только EN. Но это пол беды. Даже если я в пространстве имен ACE создам какую то запись, например link_home с значением «ссылка на главную», дальше я иду в документ, вставляю [[%link_home]], и вместо ожидаемой надписи «ссылка на главную» по итогу я вижу link_home.
Можно конечно через контексты, но это неудобно. Во первых децентрализованность, нужно поддерживать сразу несколько контекстов, во вторых обьемность. А если языков будет 3-4-5, тут можно будет прикурить.
Подскажите пожалуйста, может быть я что то не знаю о словарях? Пытался гуглить — информации нужной не нашел.
UPD методом тыка выяснил, что если записи в пространство имен core добавлять — они работают.
Комментарии: 10
                Нужно создать в core/components директорию в соответствии с Вашим namespace.
В ней директорию lexicon и в ней уже папки по языкам.
То есть, если пространство называется langs, то так:
В каждой языковой папке создайте файл default.inc.php и пропишите туда Ваши переменные:
После этого все записи появятся в словарях, их можно будет править и т. д.
Выводить надежнее так:
                    В ней директорию lexicon и в ней уже папки по языкам.
То есть, если пространство называется langs, то так:
core
  components
    langs
      lexicon
        ru
        en
        ...В каждой языковой папке создайте файл default.inc.php и пропишите туда Ваши переменные:
<?php
$_lang['link_home'] = 'На главную';
$_lang['feedback'] = 'Обратная связь';
$_lang['sitemap'] = 'Карта сайта';
...После этого все записи появятся в словарях, их можно будет править и т. д.
Выводить надежнее так:
[[%link_home? &namespace=`langs`]]            
                del            
                    
                Попрошу еще помощи немного. Как перезаписывать $modx->setOption('cultureKey', 'en');?
Я даже в index.php перед $modx->initialize('web'); вставил, для опыта. Не меняется язык никак…
Если только у контекста сам руками прописываю en или ru — меняется…
                    Я даже в index.php перед $modx->initialize('web'); вставил, для опыта. Не меняется язык никак…
Если только у контекста сам руками прописываю en или ru — меняется…
                У контекста вручную добавляете, да.            
                    
                А как его менять на лету? Чтобы в зависимости от $_SESSION['lang'] подставлялся?            
                    
                Разобрался. Зачем то нужно делать $modx->switchContext('web');            
                    
                Имейте в виду, setOption устанавливает параметры текущего экземпляра объекта (this instance of an xPDOObject).            
                    
                То есть, 
А
                    $modx->cultureKey; вернет значение объекта, переопределенное setOption.А
$modx->getOption('cultureKey'); вернет исходную системную настройку.            
                Здравствуйте. На другом сайте столкнулся с проблемой. Хочу так же на лету менять эту настройку, и столкнулся с тем что теперь ничего не работает, вообще. 
Беру, и вандально добавляю в index.php
                    Беру, и вандально добавляю в 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по всякому пытался. Не могу понять что не так…            
                Да, вы, кстате, в курсе про «lingua»?            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.