|
| 1 | +#!/usr/bin/env python3 |
| 2 | +# |
| 3 | +# 2021-01-05 01:43:57 |
| 4 | + |
| 5 | +''' |
| 6 | +# https://blog.51cto.com/underthehood/1663604 |
| 7 | +# http://blog.timd.cn/python-gettext/ |
| 8 | +# https://docs.python.org/3.8/library/gettext.html#gettext.translation |
| 9 | +
|
| 10 | +edit my_app.py: |
| 11 | +import gettext |
| 12 | +
|
| 13 | +_ = gettext.gettext |
| 14 | +
|
| 15 | +if __name__ == "__main__": |
| 16 | + print _("hello world") |
| 17 | +
|
| 18 | +cd static |
| 19 | +# 1.生成1个pot文件(翻译模板), -k与_之间不能有空格 |
| 20 | +xgettext -k_ -o sqlmap_gtk.pot --from-code='UTF-8' ../sqlmap_gtk.py |
| 21 | +# 2.首次生成po文件(翻译文件) |
| 22 | +msginit -l en -i sqlmap_gtk.pot |
| 23 | +msginit -l zh_CN -i sqlmap_gtk.pot |
| 24 | +# 3.修改po文件, 翻译字符串, 并把里面的charset改成UTF-8 |
| 25 | +vim en.po; vim zh_CN.po |
| 26 | +# 4.新建目录结构, 用msgfmt生成mo文件(用-o把mo文件放到相应目录中) |
| 27 | +mkdir -p locale/zh_CN/LC_MESSAGES |
| 28 | +mkdir -p locale/en/LC_MESSAGES |
| 29 | +msgfmt -o locale/zh_CN/LC_MESSAGES/sqlmap_gtk.mo zh_CN.po |
| 30 | +msgfmt -o locale/en/LC_MESSAGES/sqlmap_gtk.mo en.po |
| 31 | +# 以上完成所有准备工作. |
| 32 | +# 之后py文件中要翻译的字串发生变化(修改/增删), 要重新生成po文件, |
| 33 | +用msgmerge替代msginit: |
| 34 | +msgmerge -U zh_CN.po my_app.pot |
| 35 | +再重复3和4. |
| 36 | +
|
| 37 | +# 国际化, 两种方式: |
| 38 | +# 一、根据OS的环境变量自动选择语言: 略 |
| 39 | +# 向 python解释器 的全局变量里添加 _ = gettext.gettext |
| 40 | +# 二、在程序中实时切换: |
| 41 | +# 向 当前模块 的全局变量里添加 _ = gettext.gettext |
| 42 | +edit my_app.py: |
| 43 | +import os |
| 44 | +import gettext |
| 45 | +# 这其实是mo文件的文件名! |
| 46 | +APP_NAME = "my_app" |
| 47 | +# mo文件的base目录 |
| 48 | +LOCALE_DIR = os.path.abspath("locale") |
| 49 | +# 这条语句会将_()函数自动放到python的内置命名空间中 |
| 50 | +gettext.install(APP_NAME, LOCALE_DIR) # 如果不想, 也可不加, 用下面的install就行 |
| 51 | +# 获取中文翻译类的实例 |
| 52 | +lang_zh_CN = gettext.translation(APP_NAME, LOCALE_DIR, ["zh_CN"]) |
| 53 | +# 获取英文翻译类的实例 |
| 54 | +lang_en = gettext.translation(APP_NAME, LOCALE_DIR, ["en"]) |
| 55 | +
|
| 56 | +if __name__ == "__main__": |
| 57 | + # 安装中文, _()在当前模块的命名空间 |
| 58 | + lang_zh_CN.install() |
| 59 | + print _("hello world") |
| 60 | + # 安装英文(程序中实时切换回英文) |
| 61 | + lang_en.install() |
| 62 | + print _("hello world") |
| 63 | +''' |
0 commit comments