【Python】Python3之i18n

简介: 最近在完成阿里云MVP共创任务定pgAdmin4定制任务的时候,接触到了Python的本地化与国际化,了解了Python多语言化的基本知识,记录一下分享。其中涉及Python基础类库gettext,大家可访问link。

最近在完成阿里云MVP共创任务定pgAdmin4定制任务的时候,接触到了Python的本地化与国际化,了解了Python多语言化的基本知识,记录一下分享。
其中涉及Python基础类库gettext,大家可访问link
首先创建一个测试文件i18ndemo.py,基本内容如下:

# Python Localization Sample
import os, gettext, sys

# Support localization
_ = None
def getUserLanguage():
    if (len(sys.argv) > 1):
        return sys.argv[1]
    return "zh-CN"

# Get loc string by language
def getLocStrings():
    currentDir = os.path.dirname(os.path.realpath(__file__))
    return gettext.translation('resource', currentDir, [getUserLanguage(), "en-US"]).gettext 

_ = getLocStrings()
print(_("Hello"))

该程序接受一个参数指定语言区域(可参考全球语言区域)。在不输入语言码的情况下默认为zh-CN(中文)。
我们把把所有需要本地化的字符串放到_()里面,注意‘resource’是资源文件的名字,例如:'resource.mo'。getUserLanguage() 返回需要显示的语言,"en-US"作为备份,如果找不到对应语言的资源文件,就使用"en-US"。
pygettext.py在python安装目录下 Toolsi18n 文件夹里面。 使用pygettext.py从py文件中提取所有被标记成需要本地化的字符串,也就是在_()里面的字符串。 例如:
运行

“python [pathto]pygettext.py -o resource.pot locsample.py”

生成resource.pot。其中pathto是pygettext.py文件所在的路径。一般在Python安装目录的Toolsi18n目录下。
生成的内容如下:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2019-05-13 11:13+0800\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=cp936\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"


#: locsample.py:15
msgid "Hello"
msgstr ""

我们在i18ndemo.py同级目录下创建zh-CNLC_MESSAGES,en-USLC_MESSAGES两个目录,把resource.pot改名为resource.po,为每种语言拷贝一份resource.po,zh-CN的resource.mo内容修改如下:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2019-05-13 08:51+0800\n"
"PO-Revision-Date: 2019-05-13 11:08+0800\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=cp936\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"X-Generator: Poedit 2.2\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: zh_CN\n"

msgid "Hello"
msgstr "你好,世界"

en-US的resource.mo内容如下:

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR ORGANIZATION
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2019-05-13 11:13+0800\n"
"PO-Revision-Date: 2019-05-13 11:14+0800\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=cp936\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n"
"Last-Translator: \n"
"Language-Team: \n"
"Language: en_US\n"
"X-Generator: Poedit 2.2\n"

#: locsample.py:15
msgid "Hello"
msgstr "Hello World"

将每种语言的po文件编译为gettext可读写的二进制mo文件,这里有两种方式,一种是使用python提供的工具,运行如下命令

python [pathto]msgfmt.py -o resource.mo resource.po

运行命令时候进入每种语言的目录LC_MESSAGES目录下。
另一种就是使用poEdit软件编辑保存,它会自动生成一份mo文件,并且同po文件同名,十分方便(我首先使用的这种方式)。
整个程序结构如下:
2019_05_13_140043
运行效果如下:
2019_05_13_140250

目录
相关文章
|
4月前
|
IDE 开发工具 iOS开发
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
本篇将详细介绍如何在Mac系统上安装Python,并配置Python开发环境。内容涵盖Python的安装、pip包管理工具的配置与国内镜像源替换、安装与配置PyCharm开发工具,以及通过PyCharm编写并运行第一个Python程序。通过本篇的学习,用户将完成Python开发环境的搭建,为后续的Python编程工作打下基础。
414 2
【10月更文挑战第3天】「Mac上学Python 3」入门篇3 - 安装Python与开发环境配置
|
4月前
|
安全 Linux 开发者
|
5月前
|
Python
用python实现背单词的功能(python3经典编程案例)
这篇文章介绍了如何使用Python和Tkinter库实现一个背单词的桌面应用,通过读取文本文件中的单词列表,并在GUI界面中随机显示单词及其音标和解释。
118 10
|
5月前
|
Python
在python终端中打印颜色的3中方式(python3经典编程案例)
这篇文章介绍了在Python终端中打印彩色文本的三种方式:使用`colorama`模块、`termcolor`模块和ANSI转义码。
89 8
|
5月前
|
传感器 JSON 监控
python中psutil模块的使用详解(python3经典编程案例)
这篇文章介绍了如何使用Python的`pyinstaller`库打包应用程序,并提供了详细的打包步骤和参数说明。
125 7
|
5月前
|
Python
python第三方库-字符串编码工具 chardet 的使用(python3经典编程案例)
这篇文章介绍了如何使用Python的第三方库chardet来检测字符串的编码类型,包括ASCII、GBK、UTF-8和日文编码的检测示例。
239 6
|
5月前
|
NoSQL MongoDB 数据库
python3操作MongoDB的crud以及聚合案例,代码可直接运行(python经典编程案例)
这篇文章提供了使用Python操作MongoDB数据库进行CRUD(创建、读取、更新、删除)操作的详细代码示例,以及如何执行聚合查询的案例。
48 6
|
5月前
|
Python
python3压缩和解压文件总结(python经典编程案例)
这篇文章总结了在Python 3中使用不同库对文件进行压缩和解压的方法,包括tar、7z、zip和gzip格式的操作示例。
74 4
|
5月前
|
Shell Linux Python
python执行linux系统命令的几种方法(python3经典编程案例)
文章介绍了多种使用Python执行Linux系统命令的方法,包括使用os模块的不同函数以及subprocess模块来调用shell命令并处理其输出。
179 0
|
5月前
|
调度 数据库 Python
python中APScheduler的使用详解(python3经典编程案例)
文章详细讲解了在Python中使用APScheduler来安排和执行定时任务的方法,包括不同调度器的配置与使用场景。
186 0

热门文章

最新文章