`
jinheking
  • 浏览: 77695 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

用gettext实现i18n多语言界面 转载自http://www.3snews.net/?

阅读更多


    想在开启程序界面的时候,中文系统就出现中文,英文系统就出现英文吗?呵呵,gettext就可以实现.

    过去非常向往那种风格: 选了语言,就可以用什么语言显示.以前玩anjuta的时候总是有个gettext错误,弄得我每次新建工程的时候第一件事就是关掉gettext,而且搞的好像非常神秘似的,今天才知道就是这个gettext有这种能力.

   其实说起来也没什么神秘的,gettext也就是建立一个语言对应文件,必要的时候去文件中查找某国语言,然后以那种形式读出,替代原来的字符罢了.

    用Python玩个简单的例子吧!其实C++什么的都有相关程序,只不过C++写起来太麻烦了,而且C++的库在Windows上是一大堆,需要下载好些依赖的dll和exe,Python才两个py文件就可以.

    Python的i18n工具的存放位置在Python24\Tools\i18n目录下,一共两个msgfmt.py和pygettext.py两个文件.

    现在我们先来制作语言对应文件.

    运行pygettext.py会生成一个messages.pot,注意,这不是个ppt模板,是一个po文件模板.拷贝一个,改名为gb.po,其实随便改成什么都好,只要扩展名为po(其实pot也可以),用记事本打开,里面的内容如下:

    # SOME DEscrīptIVE TITLE.
    # Copyright (C) YEAR ORGANIZATION
    # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "POT-Creation-Date: 2006-11-04 11:47+中国标准时间\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"

    把"Content-Type: text/plain; charset=CHARSET\n"改成
    "Content-Type: text/plain; charset=gb2312\n"
   
    把"Content-Transfer-Encoding: ENCODING\n"改成
    "Content-Transfer-Encoding: cp936\n"

    当然,这要看自己的情况了.gb2312是文件字符集,如果是utf8,则用utf8代替.

    然后在文件后面添加msgid,msgstr对,比如添加完是这样:

    # SOME DEscrīptIVE TITLE.
    # Copyright (C) YEAR ORGANIZATION
    # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
    #
    msgid ""
    msgstr ""
    "Project-Id-Version: PACKAGE VERSION\n"
    "POT-Creation-Date: 2006-11-04 09:59+中国标准时间\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: cp936\n"
    "Generated-By: pygettext.py 1.5\n"

    msgid "Open"
    msgstr "打开"

    msgid "Edit"
    msgstr "编辑"

    msgid "Delete"
    msgstr "删除"

    msgid "Export"
    msgstr "导出"

    注意,第一个出现的msgid,msgstr对是文件头中的内容,不要动,否则会出问题.

    好了,退出,运行dos命令:
    msgfmt.py gb.po

    生成一个gb.mo文件,这就是语言翻译库文件.

    写个程序运行下:
    import gettext
    cat = gettext.GNUTranslations(open("gb.mo"))
    _ = cat.gettext
    print _("Open")
    print _("Hello")

    输出:
    打开
    Hello

    可以看到,定义过的英文被翻译成了中文,其他的没有定义,也就还是英文输出.


分享到:
评论

相关推荐

    PDFBox 處理,分拆內容

    PDFBox是Apache软件基金会的一个开源Java库,专门用于处理PDF(Portable...在上述案例中,我们利用PDFBox实现了PDF文件的分拆和内容提取,生成了基于页面内容的独立文件,这在文档管理和自动化处理中具有实际应用价值。

    linux下php+mysql+apatch搭建web服务器

    3. PHP:http://www.php.net/downloads.php 4. GD:http://www.boutell.com/gd/#build 5. ZendOptimizer:http://www.zend.org/products/zend_optimizer 6. Gettext:http://ftp.gnu.org/pub/gnu/gettext/ 7. Netpbm...

    CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14

    - yasm (php扩展): `http://www.tortall.net/projects/yasm/releases/yasm-1.2.0.tar.gz` - t1lib (php扩展): `ftp://sunsite.unc.edu/pub/Linux/libs/graphics/t1lib-5.1.2.tar.gz` - gd库安装包 (用于生成图片等):...

    开发一款任意APP-开发一款任意APP需要的类库以及多渠道打包命名框架 如需学习用法详见旧版本:https://github.com/geeklx/jiuzhidao_xinjiagou.zip

    梁肖51CTO博客:http://blog.51cto.com/liangxiaoAndroid业务组件库:http://blog.51cto.com/liangxiao/2146536APP框架多渠道打包和闭包,支持分包安装,UI独立,网络请求独立 此项目还有一些不完善的地方,可以留言...

    Android2.doc

    String message = mEditText.getText().toString() + "\r\n"; try { // 创建Socket socket = new Socket("116.29.27.138", 5554); // 向服务器发送消息 PrintWriter out = new PrintWriter(new BufferedWriter...

    ubuntu20.04 rv1126 环境配置

    忽略:1 http://cn.archive.ubuntu.com/ubuntu bionic/universe amd64 fonts-gfs-baskerville all 1.1-5 错误:1 http://cn.archive.ubuntu.com/ubuntu bionic/universe amd64 fonts-gfs-baskerville all 1.1-5 连接...

    centos5-lnmp-source-code-compile:centos5.8源码编译安装LNMP环境服务-ce source code

    在Linux操作系统中,CentOS 5.8是一个广泛使用的版本,尤其在服务器领域。LNMP是Linux、Nginx、MySQL、PHP的缩写,它是一个流行的Web服务器组合,适用于高性能、高并发的网站。本篇文章将深入探讨如何在CentOS 5.8上...

    php window系统 gettext方式实现UTF-8国际化多语言(i18n)

    包含测试的php文件和gettext-0.14.4.exe,以及Poedit.exe 使用方法: 访问test.php?lan=zh_CN则显示简体 访问test.php?lan=en_US则显示英文 教程地址:https://www.cnblogs.com/-mrl/p/10949820.html

    GNU交叉工具链(arm-linux-gcc 3.4.4)

    - msgfmt (GNU gettext-tools) 0.14.5 - makeinfo (GNU texinfo) 4.8 - GNU m4 1.4.4 - flex 2.5.31 - autoconf (GNU Autoconf) 2.59 - automake (GNU automake) 1.4-p6 **2.2 用户与权限配置** - **创建新...

    ktdms-src-oss-3.5.4.zip_ktdms_smarty i18n gettext_workflow_树结构系统

    开发者可以利用Smarty模板引擎进行界面定制,通过i18n和gettext实现多语言支持,并利用工作流功能来规范化知识的生命周期管理。对于希望构建或改进知识管理平台,特别是需要多语言环境和流程控制的团队来说,这个...

    JSTL详细标签库介绍

    href="http://www.jspcn.net/css/news.css"&gt;&lt;LINK rel=stylesheet type=text/css href="http://www.jspcn.net/css/qq.css"&gt; &lt;META name=GENERATOR content="MSHTML 8.00.7600.16535"&gt;&lt;/HEAD&gt; &lt;LI&gt;&lt;A href=...

    亲测史上最全CACTI 完全编译安装手册

    以上步骤仅为安装CACTI所需的部分库文件,后续还需要安装其他库文件如libxml2、zlib、curl、gettext等,以及freetype、fontconfig、rrdtool等,并进行GD库的编译安装。此外还需要安装MySQL数据库、Apache Web服务器...

    Centos搭建PHP5.3.8+Nginx1.0.9+Mysql5.5.17

    wget http://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz wget ...

    lnmp环境搭建

    wget http://us3.php.net/get/php-5.4.21.tar.gz/from/ ``` **2. 编译安装** 针对每个软件包,按照其官方文档进行编译安装。这里以PHP为例简要说明: ```bash tar zxvf php-5.4.21.tar.gz cd php-5.4.21 ./...

    DDTCMS 0.2.3.pre.20090808

    Optional(needed when you use i18n tags in code or templates) # Google Data API Optional(allows image searching) Download it from http://code.google.com/p/gdata-python-client/ # django-profile ...

    MSFLXGRD.zip

    1. **添加控件**:在VB6或其他支持ActiveX的开发环境中,可以通过控件工具箱将FlexGrid添加到设计界面。如果没有显示,可以通过“工具”菜单的“部件”对话框手动添加。 2. **属性设置**:FlexGrid控件有许多可配置...

    php.ini-development

    3. A number of predefined registry keys on Windows (As of PHP 5.2.0) ; 4. Current working directory (except CLI) ; 5. The web server's directory (for SAPI modules), or directory of PHP ; (otherwise ...

    【ASP.NET编程知识】.NET Core 源码编译的问题解析.docx

    以上是.NET Core源码编译的基础步骤,但深入学习.NET Core,还需要了解更多的技术细节,如ASP.NET Core的静态文件处理、认证系统、ObjectPool的实现以及配置文件和依赖注入的工作原理。在ASP.NET Core MVC中,源码...

    Python库 | cc.gettext-0.6.1-py2.5.egg

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:cc.gettext-0.6.1-py2.5.egg 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    用C++实现简易的文本编辑器

    在本文中,我们将深入探讨如何使用C++编程语言和.NET框架构建一个简易的文本编辑器。这个项目的主要目标是模仿Windows操作系统内置的记事本程序(Notepad),提供基础的文字编辑功能,如打开、保存、复制、粘贴、...

Global site tag (gtag.js) - Google Analytics