python i18n(国际化)使用简介

操作系统:Ubuntu(Linux)

Linux 下 Python 是已经安装好的。

###1.生成翻译文件模板并修改相应内容

Python 有个 gettext 模块用以支持 i18n,在终端中直接通过命令 pygettext 使用。

user@ubuntu: pygettext -o lang.po

运行命令后会生成翻译文件模板 lang.pot,如果不提供 -o 参数,直接运行命令,生成的文件名默认为 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: 2014-08-19 16:37+CST\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=CHARSETContent-Transfer-Encoding: ENCODING 改为自己需要的编码, 如 Linux 下改为 charset=utf-8、Content-Transfer-Encoding: utf-8,其他选项可根据需要自行修改; 修改完成后内容如下:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2014-08-19 16:37+CST\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=utf-8\n"
"Content-Transfer-Encoding: utf-8\n"
"Generated-By: pygettext.py 1.5\n"

###2.建立翻译文件目录结构

建立翻译文件路径,如,我们翻译中英文的话,需要建立一个翻译文件目录结构,如下:

中文./locale/cn/LC_MESSAGES

英文./locale/en/LC_MESSAGES

###3.添加翻译内容并生成二进制翻译文件

在 lang.po 文件后面添加要翻译原文和翻译结果,格式如下:

msgid "Hello" # 原文

msgstr "你好" # 译文

生成翻译文件的二进制文件

msgfmt lang.po -o ./locale/cn/LC_MESSAGES/lang.mo

msgfmt lang.po -o ./locale/en/LC_MESSAGES/lang.mo # 通过未添加任何翻译内容的 lang.po 得到

###4.python 使用翻译文件的方法

最后由 Python 进行调用,完成国际化:

#!/usr/bin/python
 
import gettext
 
gettext.install('lang', './locale', unicode=False)
gettext.translation('lang', './locale', languages=['cn']).install(True)
print _("Hello")

###5.示例代码下载

点击下载源码