国际化 本地化

**************************C语言中的国际化  本地化********************************************
C语言中用GNU gettext实现本地化
首先要确认GNU gettext已经被安装(一般在安装linux时,一般都会安装gettext)。

写一个示例程序

1、主程序gettext_test.c:

 

#include <stdio.h>
#include <locale.h>
#include <libintl.h>

#define _(string) gettext(string)

int
main ()
{
  setlocale (LC_ALL, "");
  bindtextdomain ("gettext_test", "language");
  textdomain ("gettext_test");
  printf (_("Hello world!\n"));          //
  return 0;
}


下面先分析一下上面的源文件

locale.h包含下面要调用的setlocale函数的声明。

libintl.h包含gettext所使用的一些函数。

setlocale(LC_ALL, "");进行区域设置。(第二个参数为""说明设置成当前系统的区域)

bindtextdomain ("gettext_test", "language");设置包含给定domain的语言文件的基目录。这里domain设置为gettext_test,基目录是当前目录下的language目录。

textdomain("gettext_test");设置当前程序的domain,要与bindtextdomain中的domain保持一致(这里是"gettext_test")。

将所有要翻译的字符串写成gettext("some string.")的形式,如程序中原来的printf ("Hello world!\n");要写成printf (gettext ("Hello world!\n");根据GNU标准也可以使用_代替gettext,这样可以少写几个字...

 

2、编译源文件生成gettext_test程序:

# gcc -o gettext_test gettext_test.c

3、生成翻译文件gettext_test.po:

# xgettext -k_ gettext_test.c

4、按照bindtextdomain 中参数,建立目录结构:

在gettext_test当前目录下建立language目录,language目录下建立你的语言目录如:zh_CN、zh_TW等等,所有可以使用的名字参考setlocale的第二个参数。在所有的语言目录下建立LC_MESSAGES目录。下面建立目录结构,假设你已经位于gettext_test的当前目录下:

# mkdir -p language/zh_CN/LC_MESSAGES

# mkdir -p language/zh_TW/LC_MESSAGES





5、翻译完成后生成*.mo文件:   注意:翻译前,一定要记得修改.po

# msgfmt -o language/zh_CN/LC_MESSAGES/gettext_test.mo gettext_test.po

# msgfmt -o language/zh_TW/LC_MESSAGES/gettext_test.mo gettext_test.po

下面运行gettext_test,其中的Hello world!\n已经显示翻译后的词了!


6、运行  ./gettext_test




**********************python中的国际化和本地化*************************************
************************************************************************************************
1、编写一个internation.py脚本文件
import gettext
locale_path = './locale'
zh_trans = gettext.translation('internation',locale_path,languages=['zh_CN'])
en_trans = gettext.translation('internation',locale_path,languages=['en_US'])


print "----中文版-----"
zh_trans.install()
print _("hello world!\n")
print _("python is a good language.\n")



print "----英文版----"
en_trans.install()
print _("hello world!\n")
print _("python is a good language.\n")

2、生成.po文件

    xgettext -k_ -o internation.po_en internation.c  


    xgettext -k_ -o internation.po_zh internation.c  

3、修改.po文件  (此处只显示另外一个.po文件)

# SOME DESCRIPTIVE TITLE.  
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER  
# This file is distributed under the same license as the PACKAGE package.  
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.  
#  
#, fuzzy  
msgid ""  
msgstr ""  
"Project-Id-Version: PACKAGE VERSION\n"  
"Report-Msgid-Bugs-To: \n"  
"POT-Creation-Date: 2015-10-08 22:06+0800\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"  
 
#: internation.py:11 internation.py:16  
msgid "Hello world!"  
msgstr "您好!"     //修改的第二个地方
 
#: internation.py:12 internation.py:17  
msgid "Python is a good Language."  
msgstr "Python是一种好语言。    //修改的第三处

4、创建文件目录   即建立翻译路径(要符合自己在python中所写的路径)
在主文件目录下建立英文翻译路径./locale/en_US/LC_MESSAGES/和中文翻译路径./locale/zh_CN/LC_MESSAGES/ (对文件层次比较严格)。

5、生成.mo 文件

msgfmt -o ./locale/en_US/LC_MESSAGES/internation.mo internation.po_en
msgfmt -o ./locale/zh_CN/LC_MESSAGES/internation.mo internation.po_zh

6、运行
python internation.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值