**************************C语言中的国际化 本地化********************************************
C语言中用GNU gettext实现本地化
首先要确认GNU gettext已经被安装(一般在安装linux时,一般都会安装gettext)。
写一个示例程序
1、主程序gettext_test.c:
下面先分析一下上面的源文件
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脚本文件
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
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