文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python gettext使用

2023-01-31 08:14

关注


python中使用gettext进行语言国际化的方法

1.编辑源代码, 保存为gettextdemo.py

import gettext
catalogs = gettext.find("example", localedir="locale", all=True)
print 'catalogs:',catalogs
t = gettext.translation('example', "locale", fallback=True)
_=t.ugettext
print(_("this message"))

2.从源代码中抽取需要国际化的文本消息,并转换创建.pot文件, 可以使用的工具为pygettext.py 或者GNU工具 xgettext

这里我使用xgettext,  MAC上使用homebrew 安装, 输入命令:

>brew install xgettext

即可自动完成安装, 安装后的默认目录:/usr/local/Cellar/gettext/0.19.2/, 

进入/usr/local/Cellar/gettext/0.19.2/bin 可以看到有很多可执行文件 , 我们这里需要用到xgettext 和 msgfmt

回到正题, 输入以下命令生成example.pot文件

xgettext -o example.pot gettextdemo.py

3.将example.pot复制到./local/en_US/LC_MESSAGES/example.po, 修改这个文件,替换要国际化的消息内容

如把

msgid "this message"
msgstr "translated message"

修改为:

<pre name="code" class="html">msgid "this message"
msgstr "translated message"

4.将po文件转换成.mo 二进制文件, 

cd locale/en_US/LC_MESSAGES/
msgfmt -o example.mo example.po
可以看到转换后生成的mo是二进制文件,而po,pot都是文本文件

这一步很关键,我在弄的时候没注意到这一步, 直接把.po文件复制成.mo文件, 导致出现以下类似的情况, 掉到坑里,半天爬不出来,汗~

File "C:\env\lib\gettext.py", line 281, in _parse
    raise IOError(0, 'Bad magic number', filename)
IOError: [Errno 0] Bad magic number: 'advbus/locale\\ja\\LC_MESSAGES\\noname.mo'










参考资料:

1.<python标准库> 15.1.3

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯