Linux环境下gettext命令行工具无法查找翻译的问题求助
问题核心原因
命令行模式下的gettext默认不会自动将/usr/share/locale作为翻译文件搜索路径,只会从glibc存放系统locale定义的/usr/lib/locale路径下查找mo文件,因此找不到你安装在/usr/share/locale下的iso_639-3.mo翻译文件。
正确使用方法
单次查询指定文本域的翻译
使用以下格式的命令即可返回正确翻译:
TEXTDOMAINDIR=/usr/share/locale LC_MESSAGES=et_EE gettext -d iso_639-3 'Estonian, Standard'
参数说明:
TEXTDOMAINDIR=/usr/share/locale:显式指定翻译文件的根搜索目录,gettext会自动按{语言代码}/LC_MESSAGES/{文本域}.mo的规则匹配文件-d iso_639-3:指定要查询的文本域为iso_639-3,避免环境变量干扰- 最后一个参数为需要查询的原始msgid
Shell脚本中批量使用
如果需要在shell脚本中批量使用同一个文本域的翻译,可以在脚本开头统一配置环境变量:
#!/bin/bash # 全局配置翻译相关参数 export TEXTDOMAINDIR=/usr/share/locale export TEXTDOMAIN=iso_639-3 export LANG=et_EE.UTF-8 # 后续直接调用gettext加msgid即可返回翻译结果 echo $(gettext 'Estonian, Standard')
排查验证方法
如果调整后仍不生效,可以按以下步骤排查:
- 确认mo文件路径和权限正确,执行用户有读取权限:
ls -l /usr/share/locale/et/LC_MESSAGES/iso_639-3.mo - 确认mo文件中存在对应msgid的翻译:
msgunfmt /usr/share/locale/et/LC_MESSAGES/iso_639-3.mo | grep -A1 'Estonian, Standard' - 确认传入的msgid和mo文件中的原始字符串完全一致,包括大小写、空格、标点符号。
内容的提问来源于stack exchange,提问作者jotik
相关产品推荐
相关产品推荐

