Как убрать приставку языка в адресе сайта на 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)) {

комментарии