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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:48:02