首页 文章

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

提问于
浏览
6

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

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

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

3 回答

  • 0

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

    我的逻辑如下:

    • 在显示所有语言的小部件中,将以下参数添加到每个URL:?save_lang

    • 当此参数存在时,保存名为'save_lang'且值= $ lang的cookie

    • 立即重定向到同一页面,但没有该参数'save_lang'

    • 当调用任何页面时,现在qTranslate会将default_language设置为设置中的一个 . 如果cookie 'save_lang'存在,那么我将使用cookie中保存的那个覆盖default_language

    这么几个步骤:

    • 修改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;
    }
    
    • 修改文件qtranslate_widget.php(将'save_lang'参数添加到每个语言URL):

    每当你看到这一行:

    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;
    
    }
    

    我希望这有帮助 :)

  • 2

    我找到了一个很好的.htaccess规则,可以在这里设置lang cookie:http://tips.naivist.net/2012/11/09/remembering-the-user-language-choice/

    它似乎更容易,工作得很好:

    只需将您的主要.htaccess更改为:

    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    
    # Language Cookie redirect
    RewriteCond %{REQUEST_URI} ^/$ [NC]
    RewriteCond %{HTTP_COOKIE} lang=(lang1|lang2) [NC] 
    RewriteRule ^(.*)$ /%1/ [R=302,L]
    
    RewriteCond %{REQUEST_URI} ^/(lang1|lang2)/.*$ [NC] 
    RewriteCond %{HTTP_COOKIE} !lang=%1 [NC] 
    RewriteRule . - [cookie=lang:%1:.%{HTTP_HOST}:144000:/]
    
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress
    

    lang1lang2 中,您可以在网站中插入已翻译的语言 .

  • 2

    很难指出上述描述可能有什么问题

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

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

相关问题