Как убрать приставку языка в адресе сайта на Joomla
Мультиязычность в Joomla с поддержкой разных доменов. Или как из site.ru/ru, site.ru/en сделать site.ru и site.com, используя системный плагин «Фильтр языка».
Наверняка многие хотели бы использовать в любимой Joomla вместо суффиксов языков /ru или /en разные домены для разных языков. Обычные настройки не позволяют это сделать, но решение проблемы есть!
Все это актуально для J1.6-1.7-2.5. И работает при включенном системном SEF и перенаправлении ссылок(это все в системных настройках).
Очевидный недостаток этого способа — прописывание имен доменов прямо в код плагина. То есть обычный человек не скорее всего не сможет сам изменить домены если что. С другой стороны при небольшом желании ничто не мешает вынести названия доменов в настройки плагина. Тогда вообще все будет красиво.
Плагин фильтра языков находится тут:
plugins/system/languagefilter/languagefilter.php
На всякий случай первым делом создаем резервную копию оригинала и уже после этого начинаем редактирование. Номера строк могут не совпадать, но для этого я привожу содержимое соседних строк, чтобы можно было сориентироваться где что делать. Добавления начинаются и заканчиваются комментарием //my. Пробуйте, если будут вопросы — пишите.
Итак, поехали. После строки 12 Добавляем:
jimport('joomla.language.helper');
jimport('joomla.plugin.plugin');
//my
$dmn_ru = 'http://site.ru/';
$dmn_en = 'http://site.com/';
//my
Примерно строка 67:
else {
$sef = $uri->getVar('lang');
}
//my
if ($uri->base() == $dmn_en) { $sef = "en"; }
if ($uri->base() == $dmn_ru) { $sef = "ru"; }
//my
if (isset(self::$sefs[$sef])) {
Примерно строка 107:
public function buildRule(&$router, &$uri)
{
//my
// $sef = $uri->getVar('lang');
if ($uri->base() == $dmn_en) { $sef = "en"; }
if ($uri->base() == $dmn_ru) { $sef = "ru"; }
//my
if (empty($sef)) {
Примерно строка 157, комментим родную и меняем:
$uri->delVar('lang');
// $uri->setPath($uri->getPath().'/'.$sef.'/');
$uri->setPath($uri->getPath());
Примерно строка 186:
$sef = $parts[0];
//my
if ($uri->base() == $dmn_en) { $sef = "en"; }
if ($uri->base() == $dmn_ru) { $sef = "ru"; }
//my
if (!isset(self::$sefs[$sef])) {
$sef = isset(self::$lang_codes[$lang_code]) ? self::$lang_codes[$lang_code]->sef : self::$default_sef;
// $uri->setPath($sef . '/' . $path);
//my
$uri->setPath($path);
//my
Примерно строка 208:
$lang_code = self::$sefs[$sef]->lang_code;
//my
if ($uri->base() == $dmn_en) { $lang_code = "en-GB"; }
if ($uri->base() == $dmn_ru) { $lang_code = "ru-RU"; }
//my
if ($lang_code && JLanguage::exists($lang_code)) {
// array_shift($parts);
// $uri->setPath(implode('/', $parts));
}
Примерно строка 280:
$lang_code = $registry->get('language');
//my
$lang_code = "en-GB";
//my
if (empty($lang_code)) {
Примерно строка 323:
$lang_code = $user['language'];
//my
$lang_code = "en-GB";
//my
if (empty($lang_code)) {