【问题标题】:qTranslate for Wordpress doesn't automatic give me the correct languageqTranslate for Wordpress 不会自动给我正确的语言
【发布时间】:2012-05-24 00:30:51
【问题描述】:

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

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

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

【问题讨论】:

  • 你的意思是 sa 之前正在重定向你,但现在已经停止工作?
  • 问题是我第一次从浏览器访问 blog.domain.com 时被重定向到正确的语言,但第二次访问 blog.domain.com 时我没有被重定向并且只看英文博客。
  • 第二次登录了吗?如果您以管理员身份登录,qtranslate 似乎以不同的方式处理语言检测。如果您在重定向后检查设置了哪些 cookie,也许这也很有帮助。

标签: wordpress localization qtranslate


【解决方案1】:

我遇到了同样的问题,我修改了 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' 参数添加到每个语言的 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;

}

我希望这会有所帮助:)

【讨论】:

  • 这里相同,应用代码没有任何结果。 :( qTranslate 版本 3.4.6.4 | WordPress 4.4.2
【解决方案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 中,您可以在您的网站中插入您已翻译的语言。

【讨论】:

    【解决方案3】:

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

    可能的错误可能是您首次登录时从“检测浏览器语言”获取输入。并且从下一次从 cookie 中检索它。这个过程可能有问题。或者您可能根本没有使用 cookie。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-15
      • 2014-05-01
      • 1970-01-01
      相关资源
      最近更新 更多