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 , 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 \n"

"Language-Team: LANGUAGE \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 , 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 \n"

"Language-Team: LANGUAGE \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 , 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 \n"

"Language-Team: LANGUAGE \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)

python中英文切换_python国际化(i18n)和中英文切换相关推荐

  1. windows下安装python的i18n_python国际化(i18n)和中英文切换

    [1.到Flex SDK3.2的bin下运行命令:copylocale en_US zh_HK 2.在flex project下创建一个文件夹locale(与src同目录),在locale下分别创建e ...

  2. 项目国际化I18N多语言切换

    作为国际化的门户网站,支持多种不同的语言,以方便不同国家,不同语种的用户访问尤其重要,目前通过Vue I18n已实现中英文自由切换. 一.了解I18N 1.什么是I18N i18n(其来源是英文单词 ...

  3. Python中国际化(i18n)完整指南

    这是一个完整的指南,展示了如何为一个Python应用程序进行国际化(i18n).当我在handroll项目中添加i18n时,我很难找到支持其他语言的明确建议.这是我个人的一点经验,解释了我是如何做到这 ...

  4. I18n实现中英文切换

    Rails I18n API框架提供了 Rails 应用国际化/本地化所需的全部必要支持,可以很容易的实现网站语言的切换. 配置I18n模块 Rails 会把 config/locales 文件夹中的 ...

  5. react-intl-universal实现中英文语言切换(国际化)

    最近公司为了跟上时代潮流,要求我把之前的项目都进行国际化,实现中英文双语言切换功能,然后我只能连夜调研各大国际化组件,最终选择了这个react-intl-universal,它相比于 react-in ...

  6. flutter 全选_Flutter ios 国际化(复制粘贴 中英文切换等问题)

    前提 在做flutter ios 国际化的时候遇到长按文本框崩溃的问题,然后google到一堆写法是重写cupertinoLocalization的奇怪做法,然后还千篇一律都是这么改的,其实不用那么麻 ...

  7. vue2项目使用i18n进行中英文切换

    vue+element 使用i18n进行中英文切换 文章目录 前言 一.下载vue-i18n插件 二.定义中英文两套js文件,配置i18n,并在main.js中引入 三.通过点击事件切换语言 四.i1 ...

  8. 谷歌拼音输入法PinyinIME源码修改----随着Setting中中英文的切换对应改变软键盘中英文输入且字符变换

    项目中使用的是Google的输入法:谷歌拼音输入法,即PinyinIME. 客户提出需求:需要在Setting中切换中英文的时候,输入法对应成中英文输入,并且字符也对应成中英文,即Setting中设置 ...

  9. vue 使用vue-i18n实现中英文语言切换,以及动态添加中英文

    一.安装. npm install vue-i18n 二.使用.(这里只写了核心代码) main.js引入: // 引入插件和语言包 import VueI18n from 'vue-i18n' im ...

  10. 原生微信小程序实现中英文切换(内涵Vant Weapp+语言切换完整项目)

    一.在 utils 文件夹中新建两个语言包基础库 js 文件 1.Chinese.js //中文语言包 var Chinese = {content:"你好世界",informat ...

最新文章

  1. 机器学习入门(01)— 感知机概念、实现、局限性以及多层感知机
  2. R语言基于forestplot包可视化森林图实战详解:美化的森林图:自定义字体设置、置信区间、坐标轴(刻度、标签、范围)、无效线去除、水平线、辅助线、box形状、色彩等
  3. QT利用lamda正则表达式取出字符串中的浮点数与整数
  4. 复盘王者荣耀手游开发全过程,Unity引擎使用帧同步放弃状态同步
  5. python(matplotlib3)——ticks(坐标刻度)能见度
  6. 省选模拟赛记录(越往下越新哦~~~)
  7. C# Lazy Loading
  8. extern “C“解决链接问题
  9. python的编程模式有哪两种_python程序的两种运行方式是什么
  10. 谷粒商城高级篇爬坑笔记--错误异常信息乱码问题
  11. 导航系统辅助设备行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  12. 2.11.PHP7.1 狐教程-【PHP 数组】
  13. 重置linux系统root密码,CentOS(Linux)重置root密码
  14. DEDECMS 留言薄模块的使用方法
  15. linux mint 19界面美化,Linux Mint19字体、主题美化
  16. eclipse使用性能剖析工具TPTP的较好方案
  17. 一个纯技术程序员的求职心酸历程
  18. Java分离中文姓名姓氏和名字
  19. 第三方App接入微信登录 解读
  20. 绿色版本ps cs5 不能复制汉字【解决方法】

热门文章

  1. 【光通信】单模与多模区别
  2. html显示网上图片不显示不出来,网页图片显示不出来,教您网页不显示图片怎么办...
  3. 如何做一名优秀的工程师
  4. 韩信点兵问题的简单算法 downmoon
  5. LOGO特训营 第五节 字体结构与设计常用技法
  6. 幼儿的健脑菜谱:椰子鸡汤
  7. CSS特效二:按钮动画效果
  8. 中图分类号计算机 tp,中图分类号(TP)
  9. STM32——CAN通信实验
  10. 手把手教你如何使用Unity搭建简易图片服务器