Проблемы с выбором языка Joomla

(Ответов: 2, Просмотров: 1742)
  1. Опытный Аватар для Viper
    • Регистрация: 22.09.2011
    • Сообщений: 311
    • Репутация: 58
    • Webmoney BL: ?
    Собственно имеется сайт на Joomla 2.5, недавно сайт собственными средствами Joomla был переведен так же на английский язык. Так же сайт закупает ссылки на Sape. Недавно позиции начали проседать и выяснилось, что с русской версии сайта имеется редирект на английскую версию "На указанной странице-акцепторе обнаружено перенаправление на другую страницу".

    В связи с этим логический вопрос, как сделать так, что бы русская версия сайта была по умолчанию. Сразу оговорюсь что в плагине "Система - Язык сайта" были перепробованы все варианты с "Язык сайта \ Настройки браузера", а так же "Автоматическая смена языка". Так же в "Менеджер языков" русский стоит главным.

    Было подмечено, что если выбрать русскую версию, закрыть страницу, затем открыть сайт - все нормально, при выборе английской версии и закрытии сайта, при повторном посещении открывается уже английская версия.

    Буду рад любым предложениям, гугл уже перешерстил - не помогло. Извините за сумбур, если что :)
    • 0
  2. Опытный Аватар для Viper
    • Регистрация: 22.09.2011
    • Сообщений: 311
    • Репутация: 58
    • Webmoney BL: ?
    Вот собственно код плагина, который отвечает за смену языков, что в нем можно исправить, что бы в любом случае главный язык был русским?

    PHP код:
    <?php
    /**
     * @copyright    Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
     * @license        GNU General Public License version 2 or later; see LICENSE.txt
     */

    // no direct access
    defined('_JEXEC') or die;
    JLoader::register('MenusHelper'JPATH_ADMINISTRATOR '/components/com_menus/helpers/menus.php');
    /**
     * Joomla! Language Filter Plugin
     *
     * @package        Joomla.Plugin
     * @subpackage    System.languagefilter
     * @since        1.6
     */
    class plgSystemLanguageFilter extends JPlugin
    {
        protected static 
    $mode_sef;
        protected static 
    $tag;
        protected static 
    $sefs;
        protected static 
    $lang_codes;

        protected static 
    $default_lang;
        protected static 
    $default_sef;

        protected static 
    $cookie;

        private static 
    $_user_lang_code;

        public function 
    __construct(&$subject$config)
        {
            
    // Ensure that constructor is called one time
            
    self::$cookie SID == '';
            if (!
    self::$default_lang) {
                
    $app JFactory::getApplication();
                
    $router $app->getRouter();
                if (
    $app->isSite()) {
                    
    // setup language data
                    
    self::$mode_sef     = ($router->getMode() == JROUTER_MODE_SEF) ? true false;
                    
    self::$sefs         JLanguageHelper::getLanguages('sef');
                    
    self::$lang_codes     JLanguageHelper::getLanguages('lang_code');
                    
    self::$default_lang JComponentHelper::getParams('com_languages')->get('site''en-GB');
                    
    self::$default_sef     self::$lang_codes[self::$default_lang]->sef;

                    
    $user JFactory::getUser();
                    
    $levels $user->getAuthorisedViewLevels();
                    foreach (
    self::$sefs as $sef => &$language)
                    {
                        if (isset(
    $language->access) && $language->access && !in_array($language->access$levels))
                        {
                            unset(
    self::$sefs[$sef]);
                        }
                    }

                    
    $app->setLanguageFilter(true);
                    
    $uri JFactory::getURI();
                    if (
    self::$mode_sef) {
                        
    // Get the route path from the request.
                        
    $path JString::substr($uri->toString(), JString::strlen($uri->base()));

                        
    // Apache mod_rewrite is Off
                        
    $path JFactory::getConfig()->get('sef_rewrite') ? $path JString::substr($path10);

                        
    // Trim any spaces or slashes from the ends of the path and explode into segments.
                        
    $path  JString::trim($path'/ ');
                        
    $parts explode('/'$path);

                        
    // The language segment is always at the beginning of the route path if it exists.
                        
    $sef $uri->getVar('lang');

                        if (!empty(
    $parts) && empty($sef)) {
                            
    $sef reset($parts);
                        }
                    }
                    else {
                        
    $sef $uri->getVar('lang');
                    }
                    if (isset(
    self::$sefs[$sef])) {
                        
    $lang_code self::$sefs[$sef]->lang_code;
                        
    // Create a cookie
                        
    $conf JFactory::getConfig();
                        
    $cookie_domain     $conf->get('config.cookie_domain''');
                        
    $cookie_path     $conf->get('config.cookie_path''/');
                        
    setcookie(JApplication::getHash('language'), $lang_codetime() + 365 86400$cookie_path$cookie_domain);
                        
    // set the request var
                        
    JRequest::setVar('language'$lang_code);
                    }
                }
                
    parent::__construct($subject$config);
                
    //     Detect browser feature
                
    if ($app->isSite()) {
                    
    $app->setDetectBrowser($this->params->get('detect_browser''1')=='1');
                }
            }
        }

        public function 
    onAfterInitialise()
        {
            
    $app JFactory::getApplication();
            
    $app->set('menu_associations'$this->params->get('menu_associations'0));
            if (
    $app->isSite()) {
                
    self::$tag JFactory::getLanguage()->getTag();

                
    $router $app->getRouter();
                
    // attach build rules for language SEF
                
    $router->attachBuildRule(array($this'buildRule'));

                
    // attach parse rules for language SEF
                
    $router->attachParseRule(array($this'parseRule'));

                
    // Adding custom site name
                
    $languages JLanguageHelper::getLanguages('lang_code');
                if (isset(
    $languages[self::$tag]) && $languages[self::$tag]->sitename) {
                    
    JFactory::getConfig()->set('sitename'$languages[self::$tag]->sitename) ;
                }
            }
        }

        public function 
    buildRule(&$router, &$uri)
        {
            
    $sef $uri->getVar('lang');
            if (empty(
    $sef)) {
                
    $sef self::$lang_codes[self::$tag]->sef;
            }
            elseif (!isset(
    self::$sefs[$sef])) {
                
    $sef self::$default_sef;
            }

            
    $Itemid $uri->getVar('Itemid');
            if (!
    is_null($Itemid)) {
                if (
    $item JFactory::getApplication()->getMenu()->getItem($Itemid))
                {
                    if (
    $item->home && $uri->getVar('option')!='com_search')
                    {
                        
    $link $item->link;
                        
    $parts JString::parse_url($link);
                        if (isset (
    $parts['query']) && strpos($parts['query'], '&amp;')) {
                            
    $parts['query'] = str_replace('&amp;''&'$parts['query']);
                        }
                        
    parse_str($parts['query'], $vars);

                        
    // test if the url contains same vars as in menu link
                        
    $test true;
                        foreach (
    $uri->getQuery(true) as $key=>$value)
                        {
                            if (!
    in_array($key, array('format''Itemid''lang')) && !(isset($vars[$key]) && $vars[$key] == $value))
                            {
                                
    $test false;
                                break;
                            }
                        }
                        if (
    $test) {
                            foreach (
    $vars as $key=>$value)
                            {
                                
    $uri->delVar($key);
                            }
                            
    $uri->delVar('Itemid');
                        }
                    }
                }
                else
                {
                    
    $uri->delVar('Itemid');
                }
            }

            if (
    self::$mode_sef) {
                
    $uri->delVar('lang');
                if (
                    
    $this->params->get('remove_default_prefix'0) == ||
                    
    $sef != self::$default_sef ||
                    
    $sef != self::$lang_codes[self::$tag]->sef ||
                    
    $this->params->get('detect_browser'1) && JLanguageHelper::detectLanguage() != self::$tag && !self::$cookie
                
    )
                {
                    
    $uri->setPath($uri->getPath().'/'.$sef.'/');
                }
                else
                {
                    
    $uri->setPath($uri->getPath());
                }
            }
            else {
                
    $uri->setVar('lang'$sef);
            }
        }

        public function 
    parseRule(&$router, &$uri)
        {
            
    $app JFactory::getApplication();

            
    $array = array();
            
    $lang_code JRequest::getString(JApplication::getHash('language'), null 'cookie');
            
    // No cookie - let's try to detect browser language or use site default
            
    if (!$lang_code) {
                if (
    $this->params->get('detect_browser'1)){
                    
    $lang_code JLanguageHelper::detectLanguage();
                } else {
                    
    $lang_code self::$default_lang;
                 }
            }
            if (
    self::$mode_sef) {
                
    $path $uri->getPath();
                
    $parts explode('/'$path);

                
    $sef $parts[0];

                
    // Redirect only if not in post
                
    $post JRequest::get('POST');
                if (!empty(
    $lang_code) && $app->input->getMethod() != "POST" || count($post) == 0)
                {
                    if (
    $this->params->get('remove_default_prefix'0) == 0)
                    {
                        
    // redirect if sef does not exists
                        
    if (!isset(self::$sefs[$sef]))
                        {
                            
    // Use the current language sef or the default one
                            
    $sef = isset(self::$lang_codes[$lang_code]) ? self::$lang_codes[$lang_code]->sef self::$default_sef;
                            
    $uri->setPath($sef '/' $path);

                            if (
    $app->getCfg('sef_rewrite')) {
                                
    $app->redirect($uri->base().$uri->toString(array('path''query''fragment')));
                            }
                            else {
                                
    $path $uri->toString(array('path''query''fragment'));
                                
    $app->redirect($uri->base().'index.php'.($path ? ('/' $path) : ''));
                            }
                        }
                    }
                    else
                    {
                        
    // redirect if sef does not exists and language is not the default one
                        
    if (!isset(self::$sefs[$sef]) && $lang_code != self::$default_lang)
                        {
                            
    $sef = isset(self::$lang_codes[$lang_code]) ? self::$lang_codes[$lang_code]->sef self::$default_sef;
                            
    $uri->setPath($sef '/' $path);

                            if (
    $app->getCfg('sef_rewrite')) {
                                
    $app->redirect($uri->base().$uri->toString(array('path''query''fragment')));
                            }
                            else {
                                
    $path $uri->toString(array('path''query''fragment'));
                                
    $app->redirect($uri->base().'index.php'.($path ? ('/' $path) : ''));
                            }
                        }
                        
    // redirect if sef is the default one
                        
    elseif (isset(self::$sefs[$sef]) &&
                            
    self::$default_lang == self::$sefs[$sef]->lang_code &&
                            (!
    $this->params->get('detect_browser'1) || JLanguageHelper::detectLanguage() == self::$tag || self::$cookie)
                        )
                        {
                            
    array_shift($parts);
                            
    $uri->setPath(implode('/' $parts));

                            if (
    $app->getCfg('sef_rewrite')) {
                                
    $app->redirect($uri->base().$uri->toString(array('path''query''fragment')));
                            }
                            else {
                                
    $path $uri->toString(array('path''query''fragment'));
                                
    $app->redirect($uri->base().'index.php'.($path ? ('/' $path) : ''));
                            }
                        }
                    }
                }

                
    $lang_code = isset(self::$sefs[$sef]) ? self::$sefs[$sef]->lang_code '';
                if (
    $lang_code && JLanguage::exists($lang_code)) {
                    
    array_shift($parts);
                    
    $uri->setPath(implode('/'$parts));
                }
            }
            else {
                
    $sef $uri->getVar('lang');
                if (!isset(
    self::$sefs[$sef])) {
                    
    $sef = isset(self::$lang_codes[$lang_code]) ? self::$lang_codes[$lang_code]->sef self::$default_sef;
                    
    $uri->setVar('lang'$sef);
                    
    $post JRequest::get('POST');
                    if (
    $app->input->getMethod() != "POST" || count($post) == 0)
                    {
                        
    $app JFactory::getApplication();
                        
    $app->redirect(JURI::base(true).'/index.php?'.$uri->getQuery());
                    }
                }
            }

            
    $array = array('lang' => $sef);
            return 
    $array;
        }
        
    /**
         * before store user method
         *
         * Method is called before user data is stored in the database
         *
         * @param    array        $user    Holds the old user data.
         * @param    boolean        $isnew    True if a new user is stored.
         * @param    array        $new    Holds the new user data.
         *
         * @return    void
         * @since    1.6
         */
        
    public function onUserBeforeSave($user$isnew$new)
        {
            if (
    $this->params->get('automatic_change''1')=='1' && key_exists('params'$user))
            {
                
    $registry = new JRegistry();
                
    $registry->loadString($user['params']);
                
    self::$_user_lang_code $registry->get('language');
                if (empty(
    self::$_user_lang_code)) {
                    
    self::$_user_lang_code self::$default_lang;
                }
            }
        }


        
    /**
         * after store user method
         *
         * Method is called after user data is stored in the database
         *
         * @param    array        $user        Holds the new user data.
         * @param    boolean        $isnew        True if a new user is stored.
         * @param    boolean        $success    True if user was succesfully stored in the database.
         * @param    string        $msg        Message.
         *
         * @return    void
         * @since    1.6
         */
        
    public function onUserAfterSave($user$isnew$success$msg)
        {
            if (
    $this->params->get('automatic_change''1')=='1' && key_exists('params'$user) && $success)
            {
                
    $registry = new JRegistry();
                
    $registry->loadString($user['params']);
                
    $lang_code $registry->get('language');
                if (empty(
    $lang_code)) {
                    
    $lang_code self::$default_lang;
                }
                
    $app JFactory::getApplication();
                if (
    $lang_code == self::$_user_lang_code || !isset(self::$lang_codes[$lang_code]))
                {
                    if (
    $app->isSite())
                    {
                        
    $app->setUserState('com_users.edit.profile.redirect'null);
                    }
                }
                else
                {
                    if (
    $app->isSite())
                    {
                        
    $app->setUserState('com_users.edit.profile.redirect''index.php?Itemid='.$app->getMenu()->getDefault($lang_code)->id.'&lang='.$lang_codes[$lang_code]->sef);
                        
    self::$tag $lang_code;
                        
    // Create a cookie
                        
    $conf JFactory::getConfig();
                        
    $cookie_domain     $conf->get('config.cookie_domain''');
                        
    $cookie_path     $conf->get('config.cookie_path''/');
                        
    setcookie(JApplication::getHash('language'), $lang_codetime() + 365 86400$cookie_path$cookie_domain);
                    }
                }
            }
        }

        
    /**
         * This method should handle any login logic and report back to the subject
         *
         * @param    array    $user        Holds the user data
         * @param    array    $options    Array holding options (remember, autoregister, group)
         *
         * @return    boolean    True on success
         * @since    1.5
         */
        
    public function onUserLogin($user$options = array())
        {
             
    $app JFactory::getApplication();
             
    $menu     $app->getMenu();
            if (
    $app->isSite() && $this->params->get('automatic_change'1))
            {
                
    // Load associations
                
    if ($app->get('menu_associations'0)) {
                    
    $active $menu->getActive();
                    if (
    $active) {
                        
    $associations MenusHelper::getAssociations($active->id);
                    }
                }
                
                
    $lang_code $user['language'];
                if (empty(
    $lang_code))
                {
                    
    $lang_code self::$default_lang;
                }
                if (
    $lang_code != self::$tag)
                {
                    
    // Change language
                     
    self::$tag $lang_code;

                     
    // Create a cookie
                     
    $conf JFactory::getConfig();
                     
    $cookie_domain     $conf->get('config.cookie_domain''');
                     
    $cookie_path     $conf->get('config.cookie_path''/');
                     
    setcookie(JApplication::getHash('language'), $lang_codetime() + 365 86400$cookie_path$cookie_domain);

                    
    // Change the language code
                    
    JFactory::getLanguage()->setLanguage($lang_code);

                    
    // Change the redirect (language have changed)
                    
    if (isset($associations[$lang_code]) && $menu->getItem($associations[$lang_code])) {
                        
    $itemid $associations[$lang_code];
                        
    $app->setUserState('users.login.form.return''index.php?&Itemid='.$itemid);
                    }
                    else 
                    {
                        
    $itemid = isset($homes[$lang_code]) ? $homes[$lang_code]->id $homes['*']->id;
                        
    $app->setUserState('users.login.form.return''index.php?&Itemid='.$itemid);
                    }
                 }
             }
        }

        
    /**
         * This method adds alternate meta tags for associated menu items
         *
         * @return    nothing
         * @since    1.7
         */
        
    public function onAfterDispatch()
        {
            
    $app JFactory::getApplication();
            
    $doc JFactory::getDocument();

            if (
    $app->isSite() && $this->params->get('alternate_meta') && $doc->getType() == 'html')
            {
                
    // Get active menu item
                
    $active $app->getMenu()->getActive();
                if (!
    $active) {
                    return;
                }

                
    // Get menu item link
                
    if ($app->getCfg('sef')) {
                    
    $active_link JRoute::_('index.php?Itemid='.$active->idfalse);
                } else {
                    
    $active_link JRoute::_($active->link.'&Itemid='.$active->idfalse);
                }
                if (
    $active_link == JUri::base(true).'/') {
                    
    $active_link .= 'index.php';
                }

                
    // Get current link
                
    $current_link JRequest::getUri();
                if (
    $current_link == JUri::base(true).'/') {
                    
    $current_link .= 'index.php';
                }

                
    // Check the exact menu item's URL
                
    if ($active_link == $current_link)
                {
                    
    // Get menu item associations
                    
    JLoader::register('MenusHelper'JPATH_ADMINISTRATOR '/components/com_menus/helpers/menus.php');
                    
    $associations MenusHelper::getAssociations($active->id);

                    
    // Remove current menu item
                    
    unset($associations[$active->language]);

                    
    // Associated menu items in other languages
                    
    if ($associations && $this->params->get('menu_associations'))
                    {
                        
    $menu     $app->getMenu();
                        
    $server JURI::getInstance()->toString(array('scheme''host''port'));

                        foreach(
    JLanguageHelper::getLanguages() as $language) {
                            if (isset(
    $associations[$language->lang_code])) {
                                
    $item $menu->getItem($associations[$language->lang_code]);
                                if (
    $item && JLanguage::exists($language->lang_code)) {
                                    if (
    $app->getCfg('sef')) {
                                        
    $link JRoute::_('index.php?Itemid='.$associations[$language->lang_code].'&lang='.$language->sef);
                                    } else {
                                        
    $link JRoute::_($item->link.'&Itemid='.$associations[$language->lang_code].'&lang='.$language->sef);
                                    }
                                    
    $doc->addHeadLink($server $link'alternate''rel', array('hreflang' => $language->lang_code));
                                }
                            }
                        }
                    }
                    
    // Homepages in other languages
                    
    elseif ($active->home)
                    {
                        
    $menu     $app->getMenu();
                        
    $server JURI::getInstance()->toString(array('scheme''host''port'));

                        foreach(
    JLanguageHelper::getLanguages() as $language) {
                            
    $item $menu->getDefault($language->lang_code);
                            if (
    $item && $item->language != $active->language && $item->language != '*' && JLanguage::exists($language->lang_code)) {
                                if (
    $app->getCfg('sef')) {
                                    
    $link JRoute::_('index.php?Itemid='.$item->id.'&lang='.$language->sef);
                                } else {
                                    
    $link JRoute::_($item->link.'&Itemid='.$item->id.'&lang='.$language->sef);
                                }
                                
    $doc->addHeadLink($server JRoute::_($item->link.'&Itemid='.$item->id.'&lang='.$language->sef), 'alternate''rel', array('hreflang' => $language->lang_code));
                            }
                        }
                    }
                }
            }
        }
    }
    • 0
  3. Опытный Аватар для Viper
    • Регистрация: 22.09.2011
    • Сообщений: 311
    • Репутация: 58
    • Webmoney BL: ?
    Нашел ответ сам. Кому понадобится - нужно закомментировать следующие строки:
    PHP код:
    // Create a cookie
                        
    $conf JFactory::getConfig();
                        
    $cookie_domain     $conf->get('config.cookie_domain''');
                        
    $cookie_path     $conf->get('config.cookie_path''/');
                        
    setcookie(JApplication::getHash('language'), $lang_codetime() + 365 86400$cookie_path$cookie_domain); 
    • 2

    Спасибо сказали:

    FreemanVLD(03.06.2014), gaalferov(12.11.2013),

Похожие темы

Темы Раздел Ответов Последний пост
проблемы с Joomla 2.5 и eaccelerator
Joomla 2 08.11.2012 02:18
Проблемы с кешированием модулей Joomla 1.7
Web программирование 0 04.03.2012 19:34
Проблемы с joomla, заплачу до 10 у.е. за помощь!
Другая работа 1 21.12.2011 09:10
Проблемы с joomla, заплачу до 10 у.е. за помощь!
Web программирование 1 21.12.2011 09:10

У кого попросить инвайт?

Вы можете попросить инвайт у любого модератора:

Информеры