关键字:Python 3.4,gettext,本地化,Localization

OS:Windows 7,Mac


1. 创建一个locsample.py文件,文件内容如下,把所有需要本地化的字符串放到_()里面。

# Python Localization Sample
import os, gettext # Support localization
_ = None
def getUserLanguage():
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"))
注意: 注意‘resource’是资源文件的名字,例如:'resource.mo'。getUserLanguage() 返回需要显示的语言,"en-US"作为备份,如果找不到对应语言的资源文件,就使用"en-US"。

 
2.pygettext.py在python安装目录下 \Tools\i18n 文件夹里面。 使用pygettext.py从py文件中提取所有被标记成需要本地化的字符串,也就是在_()里面的字符串。 例如:
运行“python pygettext.py -o resource.pot locsample.py”生成resource.pot。
 
3. 把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: PACKAGE VERSION\n"
"POT-Creation-Date: 2015-08-04 12:47+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=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\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: PACKAGE VERSION\n"
"POT-Creation-Date: 2015-08-04 12:47+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=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Generated-By: pygettext.py 1.5\n" #:
msgid "Hello"
msgstr "Hello"
4. 为各种语言创建gettext可读的.mo文件,使用msgfmt.py, 例如: 
运行"python msgfmt.py -o resource.mo resource.po"生成resource.mo。mo文件是一个二进制文件。
 
5.把所有文件按照以下文件夹结构放置。
6. 运行locsample.py,输出:
你好
 
代码:
 

Python本地化例子 - gettext 模块的更多相关文章

  1. Python正则表达式与re模块介绍

    Python中通过re模块实现了正则表达式的功能.re模块提供了一些根据正则表达式进行查找.替换.分隔字符串的函数.本文主要介绍正则表达式先关内容以及re模块中常用的函数和函数常用场景. 正则表达式基 ...

  2. python 正则表达式 (重点) re模块

    京东的注册页面,打开页面我们就看到这些要求输入个人信息的提示.假如我们随意的在手机号码这一栏输入一个11111111111,它会提示我们格式有误.这个功能是怎么实现的呢?假如现在你用python写一段 ...

  3. Python中的random模块,来自于Capricorn的实验室

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  4. Python自动化之常用模块

    1 time和datetime模块 #_*_coding:utf-8_*_ __author__ = 'Alex Li' import time # print(time.clock()) #返回处理 ...

  5. Python学习笔记-常用模块

    1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作 ...

  6. Python中的logging模块

    http://python.jobbole.com/86887/ 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录.主要是从官方文档和stack ...

  7. Python中的random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

  8. Python日志输出——logging模块

    Python日志输出——logging模块 标签: loggingpythonimportmodulelog4j 2012-03-06 00:18 31605人阅读 评论(8) 收藏 举报 分类: P ...

  9. python学习之random模块

    Python中的random模块用于生成随机数.下面介绍一下random模块中最常用的几个函数. random.random random.random()用于生成一个0到1的随机符点数: 0 < ...

随机推荐

  1. cocos2d-x lua与c++简单交互

    cocos2d-x lua与c++简单交互 version: cocos2d-x 3.6 本文讲述lua与c++的一些简单交互: lua通过消息方式调用c++无参接口 c++调用lua带参接口 1.通 ...

  2. struts2.1笔记06:struts2开发环境的搭建实际操作出现的问题

    1.我根据新建一个struts工程之后,启动报错,如下: 六月 29, 2015 3:08:18 下午 org.apache.catalina.core.AprLifecycleListener in ...

  3. javascript 通过面向对象编写圆形数字时钟

    效果如图所示,代码如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  4. IE8 innerHTML赋值时包含多级HTML标签时的解决方案

    var inhtml = ''; var font = document.createElement("font"); var a = document.createElement ...

  5. ARM Linux bootloader笔记

    .text //指定了后续编译出来的内容放在代码段[可执行] .global //告诉编译器后续跟的是一个全局可见的名字[可能是变量,也可以是函数名] _start /*函数的其实地址,也是编译.链接 ...

  6. 开源IDE CodeBlocks的下载安装、配置、简单编程

    如果没有集成开发环境(IDE),在linux下开发程序将非常繁琐,IDE是指将编辑.编译.调试等功能集成在一个桌面环境上,这样就大大方便了用户.IDE一般包括代码编辑器.编译器.调试器和图形界面用户工 ...

  7. poj 2942 点的双连通分量

    思路: 对于该图,直接用建图貌似没法解,所以也很容易想到建补图,这样存在边的两个点就能再圆桌上做一起.也就将问题转化为对双连通分量中是否存在奇圈了. 我们将每次查询的边保存在stack中,当遇到关键点 ...

  8. Linux 命令 - ss: 查看套接字统计信息

    命令格式 ss [options] [ FILTER ] 命令参数 -h, --help 显示帮助信息. -V, --version 显示版本信息. -n, --numeric 不解析服务名称. -r ...

  9. Networking - IPv4 报文格式

    每个 IP 数据报都以一个 IP 报头开始.源计算机的 TCP/IP 软件构造这个 IP 报头,目的计算机的 TCP/IP 软件利用 IP 报头中封装的信息处理数据.IP 报头包含大量信息,包括源 I ...

  10. ASP判断当前页面上是否有参数ID传递过来

    遇到了一个这样的ASP问题: 在当前页面上判断,是否有参数ID传递过来? 如果没有,显示“没有参数传递过来”. 如果有传递,但值为空,显示“存在参数,但参数为空” <% if (request( ...