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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 11:45:29