Python gettext多语言配置异常:无法输出俄文翻译结果
问题分析与解决
你的代码和项目结构存在几个关键问题,导致gettext未加载到俄文翻译:
1. 未编译.po文件为.mo二进制文件
gettext实际读取的是编译后的.mo二进制文件,你仅保留了.po源文件,程序无法直接解析使用。
2. 翻译域与语言环境配置问题
bindtextdomain的第一个参数是翻译域名称,需与LC_MESSAGES下的po/mo文件名一致;- 未显式指定目标语言环境,gettext会 fallback 到系统默认语言,无法触发俄文翻译。
3. po文件匹配校验
需确保ru.po中的msgid与代码里的字符串完全一致(包括大小写、空格),否则无法命中翻译。
修复步骤
第一步:编译po文件为mo文件
使用gettext自带的msgfmt工具编译俄文po文件(若未安装gettext工具集,需先安装,如Ubuntu下sudo apt install gettext):
msgfmt locales/ru/LC_MESSAGES/ru.po -o locales/ru/LC_MESSAGES/ru.mo
第二步:修复translator.py代码
显式指定语言环境,修正gettext配置:
import gettext import os # 强制设置俄文语言环境 os.environ['LANG'] = 'ru_RU.UTF-8' # 绑定翻译域:参数1为域名称(需与po/mo文件名一致),参数2为翻译文件根目录 gettext.bindtextdomain('ru', 'locales') # 设置默认使用的翻译域 gettext.textdomain('ru') # 定义翻译函数 _ = gettext.gettext print(_('What kind of trip'))
第三步:校验po文件内容
确保locales/ru/LC_MESSAGES/ru.po中的对应条目正确:
msgid "What kind of trip" msgstr "Выберите вариант полета"
验证
运行修复后的translator.py,即可输出预期的俄文内容:
Выберите вариант полета
内容的提问来源于stack exchange,提问作者HushAtom
相关产品推荐
相关产品推荐

