我使用 qTranslate for Wordpress 发布英语、瑞典语和德语的博客文章。我已经激活了"检测浏览器语言",以便访问者将被转发到其浏览器指定的语言的正确URL。
因此,如果我访问 blog.domain.com 我被转移到 blog.domain.com/sv/并且我的博客文章是瑞典语,那就太好了!但是现在问题是,如果我从同一台计算机再次访问 blog.domain.com,我不会被转移,并且博客文章是默认语言英语。
我在这里做错了什么吗?似乎很奇怪,我总是需要指定语言,我需要它基于浏览器自动
我遇到了同样的问题,我已经修改了qTranslate以添加此功能。我所做的是保存一个带有语言信息的cookie,当用户单击小部件中的语言标志时,就会保存这个cookie。
我的逻辑如下:
- 在显示所有语言的小部件中,将以下参数添加到每个 URL:?save_lang
- 当此参数存在时,保存名称为"save_lang"且值 = $lang 的 cookie
- 立即重定向到同一页面,但没有该参数"save_lang"
- 调用任何页面时,现在qTranslate会将default_language设置为设置中的页面。如果 cookie 'save_lang' 存在,那么我将用保存在 cookie 中的 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;
}
我希望这对:)有所帮助
我找到了一个很好的.htaccess规则,可以在这里设置lang cookie:http://tips.naivist.net/2012/11/09/remembering-the-user-language-choice/
它似乎更容易并且工作正常:
只需更改您的主 .ht 访问即可:
# 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
在 lang1 和 lang2 中,您可以在站点中插入要翻译的语言。
很难指出上面的描述可能有什么问题
可能的错误可能是当您第一次登录时,您正在从"检测浏览器语言"中获取输入。从下次从饼干中检索它。这个过程可能出了问题。或者您可能根本不使用 cookie。
如果您有登录数据库,则可以保存用户的语言预设。然后在他们登录后立即根据所需的语言更改 URL。