python模块i18n肿么导入

发布于2022-01-07 16:41:26
5个回答
admin
网友回答2022-01-07
Python通过gettext模块支持国际化(i18n),可以实现程序的多语言界面的支持,下面是我的多语言支持实现:
1. 在python安装目录下的./Tools/i18n/(windows下例 D:\Program Files\Python25\Tools\i18n)目录中找到pygettext.py运行之,生成翻译文件模版messages.pot,内容大概是这个样子:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR EMAIL@ADDRESS, YEAR.
#
msgid
msgstr
Project-Id-Version: PACKAGE VERSION\n
POT-Creation-Date: 2007-01-24 15:05+China Standard Time\n
PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n
Last-Translator: FULL NAME EMAIL@ADDRESS\n
Language-Team: LANGUAGE LL@li.org\n
MIME-Version: 1.0\n
Content-Type: text/plain; charset=CHARSET\n
Content-Transfer-Encoding: ENCODING\n
Generated-By: pygettext.py 1.5\n

改之,charset=gb2312 Content-Transfer-Encoding: utf8如下:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR EMAIL@ADDRESS, YEAR.
#
msgid
msgstr
Project-Id-Version: PACKAGE VERSION\n
POT-Creation-Date: 2007-01-18 09:55+China Standard Time\n
PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n
Last-Translator: FULL NAME EMAIL@ADDRESS\n
Language-Team: LANGUAGE LL@li.org\n
MIME-Version: 1.0\n
Content-Type: text/plain; charset=gb2312\n
Content-Transfer-Encoding: utf8\n
Generated-By: pygettext.py 1.5\n

那个msgid” ” 和msgstr” “不要动
好,翻译文件已经建立了,保存之,文件名改为lang.po.
2. 建立翻译文件路径,在主文件目录下建立中文翻译路径 ./locale/cn/LC_MESSAGES/(windows下例D:\ python-prj\src\locale\cn\LC_MESSAGES,其中src目录是源文件主目录),英文翻译路径 ./locale/en/LC_MESSAGES/(windows下例D:\ python-prj\src\locale\en\LC_MESSAGES,其中src目录是源文件主目录)
3. 在主文件中引入gettext模块:

# -*- coding: utf-8 -*-
#!/usr/bin/env python
import gettext
gettext.install('lang', './locale', unicode=False)
gettext.translation('lang', './locale', languages=['cn']).install(True)

第四行中lang是翻译文件主名, ./locale是存放翻译文件的路径,第三个参数是是否使用unicode,第五行languages参数指定要使用的语言存放的子目录,这里cn表示使用./locale/cn/LC_MESSAGES/路径下的翻译文件.
注意: # -*- coding: utf-8 -*- 一定要写在前两行,写第三行都不会生效
4. 处理要翻译的字符串,例:

print “Hello world!”
print “Python is a good Language.”

改之:

print _(“Hello world!”)
print _(“Python is a good Language.”)

5. 编写并生成翻译文件,打开步骤1中编辑过的lang.po文件添加翻译文字,形成如下内容:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR EMAIL@ADDRESS, YEAR.
#
msgid
msgstr
Project-Id-Version: PACKAGE VERSION\n
POT-Creation-Date: 2007-01-18 09:55+China Standard Time\n
PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n
Last-Translator: FULL NAME EMAIL@ADDRESS\n
Language-Team: LANGUAGE LL@li.org\n
MIME-Version: 1.0\n
Content-Type: text/plain; charset=gb2312\n
Content-Transfer-Encoding: utf8\n
Generated-By: pygettext.py 1.5\n

msgid Hello world!
msgstr 世界你好!

msgid Python is a good Language.
msgstr Python 是门好语言.

保存之,运行./Tools/i18n/目录下的msgfmt.py,Linux下命令为: python msgfmt.py lang.po(widows下的话,将lang.po文件拷贝到./Tools/i18n/目录下,运行命令行窗口,到改目录下键入:msgfmt.py lang.po),生成lang.mo,将该文件拷贝至./locale/cn/LC_MESSAGES/目录下,将步骤1生成的lang.po文件直接生成lang.mo文件拷贝到./locale/en/LC_MESSAGES/目录下,好了一切都准备好了,命令行下运行你的主文件,看看两个print命令是不是输出了世界你好! Python 是门好语言.,如果将主文件第五行languages参数置为en,则输出是Hello world! Python is a good Language.,因为en目录下lang.mo文件未做任何的翻译,默认字符串不被替换.
上述实现的方法用在界面编程上可以实现中英文界面的切换,需要作个配置文件选择中/英文;或者在主文件开始时先获取操作系统本地语言然后根据获取结果再设置中/英文,这样就可以实现软件语言自适应;如果想实现软件语言在线切换,对于python来说就比较困难了,需要在软件中加入界面刷新机制,不推荐,可以在切换中/英文设置后软件下一次启动生效(软件如Ulipad).

Note:
.调用python安装目录的 Tools/i18n/pygettext.py抽取所需翻译的模板
pygettext.py path/to/yourfile.py
将生成一个名为messages.pot的文件
2.生成模板文件后,修改这个模板文件,其中的msgid为键值,对应你程序里写的文本,如:_(New File),而msgstr为翻译后的值。还有就是注意修改文件头部分Content-Type的charset为合适的编码,比如utf8
3.编写好模板后,把扩展名修改为.po,运行Tools/i18n/msgfmt.py,生成二进制的资源文件
msgfmt.py messages.po
将生成一个名为messages.mo的文件
4.把这个mo文件放在正确的位置.
比如你在程序中是这样写的:
gettext.install('i18ntest', './locale', unicode=True)
gettext.translation('i18ntest', './locale', languages=['cn']).install(True)
那么你的程序目录下需要存在./local/cn/LC_MESSAGES/i18ntest.mo
这样程序启动时就会读取这个资源文件,替换对应的文本,实现国际化了。
注意:如果使用utf格式保存,po文件不能有BOM头。cn目录是所对应的语言,LC_MESSAGES目录是gettext.py里要求的,mo文件必须和所定义的域同名,见
gettext.py的mofile = os.path.join(localedir, lang, 'LC_MESSAGES', '%s.mo' % domain)
admin
网友回答2022-01-07
首先确认是否安装了这个模块,如果没有,到pypi找到安装即可,如果确认已经安装,检查导入时大小写,如果无误检查模块路径中是否有。
admin
网友回答2022-01-07
创建一个.py文件,放在pythonpath里面有的目录,比如同目录(目录里需要有__init__.py,空文件也可以),其他程序就可以将其导入,至于导入什么,你自己写了。导入就直接import 模块名就可以了,如果你自己写的,没有特殊情况就是py文件的名字,可以是目录名字。
admin
网友回答2022-01-07
第一:你是不有这些东西
第二:路径设置的对不对,环境变量等!

不明白的地方请追问!
admin
网友回答2022-01-07
在import之前,你可以 import sys sys.path.append('你的module的目录‘)就可以import这个目录里的module了。

回到
顶部