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»?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.