python国际化 i18n 和中英文切换

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)

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

原文地址:https://www.cnblogs.com/swchswhih/p/10391945.html

时间: 2024-11-06 22:44:51

python国际化 i18n 和中英文切换的相关文章

旧文备份:Python国际化支持

Python通过gettext模块支持国际化(i18n),可以实现程序的多语言界面的支持,下面是我的多语言支持实现: 在python安装目录下的./Tools/i18n/(windows下例 D:\Program Files\Python25\Tools\i18n)目录中找到pygettext.py运行之,生成翻译文件模版messages.pot,内容大概是这个样子: # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR ORGANIZATION # FI

gettext模块实现Python国际化支持

1.gettext模块介绍 gettext模块为Python模块和应用程序提供国际化(i18n)和本地化(l10n)服务.它提供两套API,一套高层的类似于GNU gettext的API和一套基于类的API.前者适用于单语言的场景,并且语言的选择通常依赖于用户的locale,会全局性地影响到你整个应用程序语言的转译.后者允许你在一个python模块内进行本地化,非常适用于在应用程序运行时切换你的语言. 2.通用步骤 (1)无论是使用哪一套API,都必须提取可以翻译的字符串并且生成一个翻译模板文件

springMVC项目国际化(i18n)实现方法

SpringMVC项目国际化(i18n)实现方法 按照作息规律,每周五晚必须是分享知识的时间\(^o^)/~,这周讲点儿啥呢,项目需要逼格,咱们国际化吧(* ̄rǒ ̄)~,项目中碰到这类需求的童鞋可能并不多,但偶尔用到也会比较费时间滴;-),不如驻足本帖片刻吧︿( ̄︶ ̄)︿ 额,嗯~,记得一开始从事软件开发时在一个很轻量级的项目中碰到了一个貌似叼炸天的需求,什么?国际化?没听说过,不知道怎么玩儿...,谷歌翻帖快一周,大神们的神贴也看了许久,可就是解决不了我的项目需求,怎么办,加大神Q骚扰之~~(

javaweb学习总结(三十一)——国际化(i18n)

一.国际化开发概述 软件的国际化:软件开发时,要使它能同时应对世界不同地区和国家的访问,并针对不同地区和国家的访问,提供相应的.符合来访者阅读习惯的页面或数据. 国际化(internationalization)又称为 i18n(读法为i 18 n,据说是因为internationalization(国际化)这个单词从i到n之间有18个英文字母,i18n的名字由此而来) 二.合格的国际化软件 软件实现国际化,需具备以下两个特征: 1.对于程序中固定使用的文本元素,例如菜单栏.导航条等中使用的文本

深入分析JavaWeb Item22 -- 国际化(i18n)

一.国际化开发概述 软件的国际化:软件开发时,要使它能同一时候应对世界不同地区和国家的訪问,并针对不同地区和国家的訪问.提供对应的.符合来訪者阅读习惯的页面或数据. 国际化(internationalization)又称为 i18n(读法为i 18 n,据说是由于internationalization(国际化)这个单词从i到n之间有18个英文字母,i18n的名字由此而来) 二.合格的国际化软件 软件实现国际化,需具备以下两个特征: 1.对于程序中固定使用的文本元素.比如菜单条.导航条等中使用的

spring 国际化-i18n

i18n(其 来源是英文单词 internationalization的首末字符i和n,18为中间的字符数)是“国际化”的简称.在资讯领域,国际化(i18n)指让产品(出版 物,软件,硬件等)无需做大的改变就能够适应不同的语言和地区的需要.对程序来说,在不修改内部代码的情况下,能根据不同语言及地区显示相应的界面. 在全球化的时代,国际化尤为重要,因为产品的潜在用户可能来自世界的各个角落.通常与i18n相关的还有L10n(“本地化”的简称).<摘自百度 百科http://baike.baidu.c

无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换

无法启动 Maya 集成的 qt designer 的解决方法和原因 以及 中英文切换 前言: Maya 集成了 PySide,同时集成了qt designer,在 Maya 的安装目录下的 bin 文件夹中可以找到 designer.exe. 运行 designer.exe 报错解决方法和原因 当我们单独运行 Maya 中的 designer.exe 的时候,会报错:This application failed to start because it could net find or lo

vue实现中英文切换

1.安装 vue-i18n依赖 yarn add vue-i18n 或者 npm install vue-i18n --save-dev 2.在src/components下新建文件夹language,并在文件夹language下新建zh.js及en.js [src/components/language/zh.js] module.exports = { language: { name: 'English' }, user: { login:'登录', register:'注册', logi

虚拟化--vsphere client和vsphere web client中英文切换(语言)

经验--vsphere client和vsphere web client中英文切换(语言) vsphere client切换到中文:"C:\Program Files\VMware\Infrastructure\Virtual Infrastructure Client\Launcher\VpxClient.exe" -locale zh_CN vsphere client切换到英文:"C:\Program Files\VMware\Infrastructure\Virtu