qTranslate for Wordpress不会自动给我正确的语言

时间:2012-05-16 12:34:32

标签: wordpress localization qtranslate

我使用qTranslate for Wordpress来发布我的英文,瑞典文和德文博文。我已激活“检测浏览器语言”,以便将访问者转发到其浏览器指定语言的正确URL。

因此,如果我访问blog.domain.com,我会转移到blog.domain.com/sv/,我的博客文章是瑞典语,这太棒了!但是现在问题是,如果我再次从同一台计算机再次访问blog.domain.com,我就不会被转移,博客文章是默认语言英语。

我在这里做错了吗?似乎很奇怪,我总是需要指定语言,我需要它基于浏览器自动。

2 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,我修改了qTranslate以添加此功能。我所做的是使用语言信息保存cookie,当用户点击小部件中的语言标志时,会保存此cookie。

我的逻辑如下:

  • 在显示所有语言的小部件中,将以下参数添加到每个URL:?save_lang
  • 当此参数存在时,请保存名为“save_lang”且值= $ lang
  • 的Cookie
  • 立即重定向到同一页面,但没有该参数'save_lang'
  • 当调用任何页面时,现在qTranslate会将default_language设置为设置中的一个。如果cookie'save_lang'存在,那么我将使用cookie中保存的那个覆盖default_language

步骤很少:

  1. 修改qtranslate_core.php文件:

            //Save the cookie if param ?save_lang is set, and then redirect to the same page without the param
    add_action('qtranslate_loadConfig', 'custom_qtranslate_loadConfig');
    function custom_qtranslate_loadConfig() {
    
        global $q_config, $_COOKIE;
    
        // By default, if the save_lang cookie is set, use that one instead
        if(isset($_COOKIE['save_lang'])) {
    
            $q_config['default_language'] = $_COOKIE['save_lang'];
        }
    }
    
    
    // Priority 3: load after function qtrans_init (it has priority 2)
    add_action('plugins_loaded', 'custom_after_qtrans_init', 3);    
    function custom_after_qtrans_init() {
    
        global $q_config, $_COOKIE;
    
        if (isset($_GET["save_lang"])) {
    
            // cookie will last 30 days     
            setcookie('save_lang', $q_config['language'], time()+86400*30, $q_config['url_info']['home'], $q_config['url_info']['host']);       
            wp_redirect(remove_url_param("save_lang", $q_config['url_info']['url']));
            exit();
        }
    }
    
    function remove_url_param($param_rm, $url) {
    
        $new_url = str_replace("?$param_rm", '', $url);
        $new_url = str_replace("&$param_rm", '', $new_url);
    
        return $new_url;
    }
    
  2. 修改文件qtranslate_widget.php(将'save_lang'参数添加到每个语言网址):

  3. 每次看到这一行:

    qtrans_convertURL($url, $language)
    

    将其替换为:

    add_url_param(qtrans_convertURL($url, $language), "save_lang")
    

    然后添加该功能:

    // Function to add a parameter to a URL
    function add_url_param($url, $name, $value = '') {
    
        // Pick the correct separator to use
        $separator = "?";
        if (strpos($url,"?")!==false)
          $separator = "&";
    
        // Find the location for the new parameter
        $insertPosition = strlen($url); 
        if (strpos($url,"#")!==false)
          $insertPosition = strpos($url,"#");
    
        $withValue = ($value == '' ? '' : "=$value");
    
    
        // Build the new url
        $newUrl = substr_replace($url,"$separator$name$withValue",$insertPosition,0);
    
        return $newUrl;
    
    }
    

    我希望这会有所帮助:)

答案 1 :(得分:0)

很难指出上述说明可能出现的问题

可能的错误可能是您首先登录时从“检测浏览器语言”中获取输入。从下次从cookie中检索它。这个过程可能会出现问题。或者你根本不使用cookies。

如果您有登录数据库,则可以保存用户的语言预设。 然后在登录后立即根据所需语言更改网址。