Простейшая настройка мультиязычности
Во время работы над modx-test.com (который потом вырос в https://modhost.pro) придумал и реализовал прикольную мультиязычность.
Никаких копирований файлов, поддоменов и прочих заморочек. 1 простой плагин, который делает всю работу.
Нам нужно 2 контекста, по умолчанию в основном контексте ставим русский язык. В настройках контекстов указаны следующие параметры:
web- cultureKey - ru
- site_start - 1
- error_page - 1
en- cultureKey - en
- site_start - 3
- error_page - 3
В системных настройках отключаем проверку дупликатов url во всех контекстах. Url соответствующих страниц должны быть одинаковыми - так гораздо проще. Иначе, надо будет наворачивать сниппет, выдающий ссылку на другую языковую версию.
А вот и сам плагин, реагирует на событие OnHandleRequest:
<?php
if ($modx->event->name != "OnHandleRequest" || $modx->context->key == 'mgr') {return;}
if (isset($_GET['lang']) && $_GET['lang'] != $_SESSION['lang']) {
if ($_GET['lang'] == 'en') {
$_SESSION['lang'] = 'en';
}
else {
$_SESSION['lang'] = 'ru';
}
}
if ($_SESSION['lang'] == 'en') {
$modx->switchContext('en');
}То есть, при указании параметра ?lang=en или ?lang=ru любой ссылке - контекст сайта переключается, а вместе с ним и язык - и это запоминается в сессию, то есть ссылка больше не нужна.
Прощай геморрой с настройками!
Бонус в виде сниппета для вывода ссылки на переключение:
<?php
$link = $modx->makeUrl($modx->resource->id, '', '', 'full');
if ($modx->getOption('cultureKey') == 'en') {
return "<a href=\"$link?lang=ru\">Русский</a>";
}
else {
return "<a href=\"$link?lang=en\">English</a>";
}Поисковики такой сайт индексируют нормально - ведь на каждой странице есть ссылка на другую языковую версию, и урл отличается. То есть в индексе страницы с разным ?lang=(en|ru) и с разным содержимым.
0
👍
👎
❤️
🔥
😮
😢
😀
😡
7 167
18.06.2012 16:45:00