qTranslate WordPress的不自动给我正确的语言(qTranslate for Wor

2019-09-17 06:30发布

我用的qTranslate WordPress的有英语,瑞典和德国我的博客文章。 我已经激活了“检测浏览器语言”,让访问者将被转发到正确的URL由他的浏览器指定的语言。

所以,如果我访问blog.domain.com我被转移到blog.domain.com/sv/和我的博客文章是在瑞典,这是伟大的! 但现在的问题,如果我再次从我没有得到转移在同一台计算机访问blog.domain.com第二次和博客文章是在默认语言英语。

是有什么我做错了什么? 似乎很奇怪,我总是需要指定的语言,我需要它基于浏览器上是自动的。

Answer 1:

我有同样的问题,我已经修改了qTranslate添加此功能。 我所做的就是保存的语言信息一个cookie,当用户点击该语言在widget标志这个cookie保存。

我的逻辑是这样的:

  • 在显示所有语言的小部件,下面PARAM添加到每个网址:save_lang
  • 当这个PARAM存在,保存名为“save_lang”和值一个cookie = $ LANG
  • 立即重定向到同一个页面,但是不PARAM“save_lang”
  • 调用任何页面时,现在qTranslate将DEFAULT_LANGUAGE设置为一个在设置。 如果cookie“save_lang”存在,那么我将覆盖DEFAULT_LANGUAGE与一个保存在cookie

这么几个步骤:

  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”参数去各的语言网址):

每当您看到这行:

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;

}

我希望这有帮助 :)



Answer 2:

我找到了一个不错的.htaccess规则,可以在此处设置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

语言1LANG2,你可以将你的网站,你有翻译的语言。



Answer 3:

很难指出什么可能是错误与上面的描述

当你第一次登录你正在从“检测浏览器语言”输入可能的错误可能。 而从下一次从cookie中取回。 有可能是东西是错了这个过程。 或者你可能不会使用的所有Cookie。

如果你有一个登录数据库,可以保存用户的语言设定。 然后根据尽快为他们登录所需的语言更改URL。



文章来源: qTranslate for Wordpress doesn't automatic give me the correct language