我使用qTranslate for Wordpress来发布我的英文,瑞典文和德文博文。我已激活“检测浏览器语言”,以便将访问者转发到其浏览器指定语言的正确URL。
因此,如果我访问blog.domain.com,我会转移到blog.domain.com/sv/,我的博客文章是瑞典语,这太棒了!但是现在问题是,如果我再次从同一台计算机再次访问blog.domain.com,我就不会被转移,博客文章是默认语言英语。
我在这里做错了吗?似乎很奇怪,我总是需要指定语言,我需要它基于浏览器自动。
答案 0 :(得分:2)
我遇到了同样的问题,我修改了qTranslate以添加此功能。我所做的是使用语言信息保存cookie,当用户点击小部件中的语言标志时,会保存此cookie。
我的逻辑如下:
步骤很少:
修改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'参数添加到每个语言网址):
每次看到这一行:
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。
如果您有登录数据库,则可以保存用户的语言预设。 然后在登录后立即根据所需语言更改网址。