文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>用gettext实现i18n多语言界面

用gettext实现i18n多语言界面

时间:2007-05-07  来源:thinkc

    转载自http://www.3snews.net/?550       想在开启程序界面的时候,中文系统就出现中文,英文系统就出现英文吗?呵呵,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 <[email protected]>\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 <[email protected]>\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

    可以看到,定义过的英文被翻译成了中文,其他的没有定义,也就还是英文输出.
 
相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载