Как реализовать переключение языков без контекстов
Здравствуйте!
Есть статьи с переводами на английский язык, которые должны открываться по ссылкам вида:
site.com/ru/article
site.com/en/article
Используется только контекст web, переводы заполняются в кастомной вкладке ресурса и хранятся в отдельной таблице.
Подскажите, как можно реализовать переключение языковой версии при условии, что нет контекста и нужно использовать директории ru|en?
Сразу скажу, чем не устраивает контекст + babel и т.д.:
это долго и неудобно при добавлении большого количества статей, много «лишних» переключений, копирований и т.д., кратно быстрее и удобнее при создании ресурса быстро скопипастить во вкладку все поля с переводами.
Заранее спасибо за ваши идеи и предложения.
Есть статьи с переводами на английский язык, которые должны открываться по ссылкам вида:
site.com/ru/article
site.com/en/article
Используется только контекст web, переводы заполняются в кастомной вкладке ресурса и хранятся в отдельной таблице.
Подскажите, как можно реализовать переключение языковой версии при условии, что нет контекста и нужно использовать директории ru|en?
Сразу скажу, чем не устраивает контекст + babel и т.д.:
это долго и неудобно при добавлении большого количества статей, много «лишних» переключений, копирований и т.д., кратно быстрее и удобнее при создании ресурса быстро скопипастить во вкладку все поля с переводами.
Заранее спасибо за ваши идеи и предложения.
Комментарии: 3
Кажется, вы начали писать что-то подобное localizator. Он бесплатный – читайте доки, смотрите код.
Точно, в localizator такое было реализовано!
В localizator реализовано через setOption.
Если идти тем же путем, то можно взять за основу способ Василия Наумкина Переключение контекстов мультиязычного сайта, но
работать только с контекстом web и вместо переключения контекста переопределить значения для текущего контекста (web).
//выбираем только контекст web
$q = $modx->newQuery('modContextSetting', array('context_key' => 'web'))
//разбираем запрос в массив
$requestToArray = explode('/',$request);
//если в запросе en директория
if($requestToArray[0] == 'en'){
$modx->setOption('site_url', 'http://site.ru/en/');
$modx->setOption('cultureKey','en');
$modx->setOption('http_host','site.ru');
$modx->setOption('base_url','/en/');
$base_url = 'en';
}
//если директория ru
if($requestToArray[0] == 'ru'){
$modx->setOption('site_url', 'http://site.ru/ru/');
$modx->setOption('cultureKey','ru');
$modx->setOption('http_host','site.ru');
$modx->setOption('base_url','/ru/');
$base_url = 'ru';
}
Остается, конечно, вопрос про кеш…
Если идти тем же путем, то можно взять за основу способ Василия Наумкина Переключение контекстов мультиязычного сайта, но
работать только с контекстом web и вместо переключения контекста переопределить значения для текущего контекста (web).
//выбираем только контекст web
$q = $modx->newQuery('modContextSetting', array('context_key' => 'web'))
//разбираем запрос в массив
$requestToArray = explode('/',$request);
//если в запросе en директория
if($requestToArray[0] == 'en'){
$modx->setOption('site_url', 'http://site.ru/en/');
$modx->setOption('cultureKey','en');
$modx->setOption('http_host','site.ru');
$modx->setOption('base_url','/en/');
$base_url = 'en';
}
//если директория ru
if($requestToArray[0] == 'ru'){
$modx->setOption('site_url', 'http://site.ru/ru/');
$modx->setOption('cultureKey','ru');
$modx->setOption('http_host','site.ru');
$modx->setOption('base_url','/ru/');
$base_url = 'ru';
}
Остается, конечно, вопрос про кеш…
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.