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

Docker+Nginx+PHP环境下Gettext无法正确加载翻译问题求助

排查方向

  • locale标识符不匹配:你代码中用的$locale = 'sv-SE'是横杠分隔,但是系统locale列表里的瑞典语标识是下划线分隔的sv_SE,优先使用带UTF-8后缀的完整标识sv_SE.utf8避免编码问题。可以加一行调试代码验证locale是否生效:
    var_dump(setlocale(LC_ALL, $locale));
    
    如果返回false说明locale设置未生效,gettext不会加载对应翻译。
  • 路径映射错误:你提到LOCALE_PATH是Nginx容器内的路径,但gettext是PHP扩展,运行在PHP-FPM容器中,必须保证PHP容器内可以通过该路径访问到翻译文件,且目录结构符合gettext规范:LOCALE_PATH/[语言标识]/LC_MESSAGES/[textdomain].mo,例如你的场景下应该存在文件$LOCALE_PATH/sv_SE/LC_MESSAGES/main.mo。
  • 文件权限问题:确认PHP-FPM运行用户(通常是www-data)对翻译文件、父级目录拥有读权限,gettext读取文件失败时默认返回原字符串,不会抛出错误。
  • gettext缓存问题:PHP-FPM是常驻进程,gettext会把加载过的mo文件缓存在进程内存中,修改翻译文件、调整路径配置后需要重启PHP-FPM容器清空缓存。
  • 调用顺序错误:调整代码执行顺序,setlocale和putenv要放在所有bindtextdomain、textdomain调用之前,你当前的顺序是对的,但如果实际代码中存在顺序调整会导致加载失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 18:36:04