Docker+Nginx+PHP环境下Gettext无法正确加载翻译问题求助
排查方向
- locale标识符不匹配:你代码中用的
$locale = 'sv-SE'是横杠分隔,但是系统locale列表里的瑞典语标识是下划线分隔的sv_SE,优先使用带UTF-8后缀的完整标识sv_SE.utf8避免编码问题。可以加一行调试代码验证locale是否生效:
如果返回false说明locale设置未生效,gettext不会加载对应翻译。var_dump(setlocale(LC_ALL, $locale)); - 路径映射错误:你提到
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
相关产品推荐
相关产品推荐

