You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress如何获取访客浏览器语言?get_user_locale无效问题

解决浏览器语言检测问题

首先要说明:get_user_locale() 是WordPress专属函数,它返回的是站点默认语言或者已登录用户的个人语言设置,和访客浏览器的语言偏好完全无关——这就是你切换浏览器语言后结果始终是pl_PL的原因。

要获取访客浏览器的语言,得直接读取HTTP请求头里的Accept-Language字段,下面是几种实用的实现方式:

1. 基础PHP解析方法(适配WordPress locale格式)

这个方法能解析出浏览器优先选择的语言,并转换成WordPress常用的xx_XX格式:

function get_browser_locale() {
    // 先判断服务器是否传递了语言头,没有就用默认值
    if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        return 'en_US';
    }

    // 分割浏览器发送的语言列表
    $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    
    foreach ($languages as $lang) {
        // 去掉语言权重(比如 en-US;q=0.9 里的 ;q=0.9)
        $lang = trim(strtok($lang, ';'));
        // 把格式从 en-US 转换成 en_US
        $locale = str_replace('-', '_', $lang);

        // 可以只保留你站点支持的语言,避免无效值
        $supported_locales = ['pl_PL', 'en_US'];
        if (in_array($locale, $supported_locales)) {
            return $locale;
        }

        // 如果精确匹配不到,尝试匹配语言前缀(比如 en-US 匹配 en_US)
        $lang_prefix = strtok($locale, '_');
        foreach ($supported_locales as $supported) {
            if (str_starts_with($supported, $lang_prefix . '_')) {
                return $supported;
            }
        }
    }

    // 都匹配不到就返回默认值
    return 'en_US';
}

// 使用示例
$browser_locale = get_browser_locale();
echo $browser_locale;

2. 适配GTranslate的Cookie设置

如果你要给GTranslate插件设置Cookie,通常它的Cookie名称是gtranslate_lang,值是短语言代码(比如en或pl),可以用下面的代码:

function get_gtranslate_browser_lang() {
    if (!isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
        return 'en';
    }

    $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);
    foreach ($languages as $lang) {
        $lang = trim(strtok($lang, ';'));
        // 提取短语言代码(比如 en-US → en)
        $short_lang = strtok($lang, '-');

        // 只保留GTranslate支持的语言
        $supported_langs = ['pl', 'en'];
        if (in_array($short_lang, $supported_langs)) {
            return $short_lang;
        }
    }

    return 'en';
}

// 设置有效期30天的Cookie
setcookie('gtranslate_lang', get_gtranslate_browser_lang(), time() + 30*24*60*60, '/');

注意事项

  • 部分服务器可能不会传递$_SERVER['HTTP_ACCEPT_LANGUAGE'],所以一定要设置默认 fallback 值
  • 浏览器发送的语言格式可能有多种(en-US/en/pl-PL等),要做好兼容处理
  • 如果是WordPress环境,建议把代码放到主题的functions.php里,或者自定义插件中

内容的提问来源于stack exchange,提问作者1zboro1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:22:16