结合Anjuta轻松使用gettext进行国际化
时间:2010-06-22 来源:catstep
gettext可以方便的进行国际化,在网络上查找了几篇文章,并且试了一下,都没有通
过,可能是由于环境不一样的缘故.经过两天的摸索,终于成功使用gettext.
现在将过程记录下来,希望能够对一些也正在寻找gettext进行汉化的网友一些帮助.
我的环境:
Anjuta: 2.28.10 (其实可以不用,但是因为我懒得自己动手写一个configure文件)
OS: Debian squeeze
GCC: 4.2.3
Editor: Emacs 23
详细过程如下:
1. 启动anjuta, 创建一个generic的c项目,命名为testpo,其他为默认
2. 在configure.ac中增加一行
ALL_LINGUAS="zh_CN"
3. 在main.c中加入
#include "config.h"
#include <libintl.h>
#define _(String) gettext (String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
和
setlocale(LC_ALL, "");
bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
textdomain(GETTEXT_PACKAGE);
并修改
printf("Hello world\n");
为
printf(_("Hello world\n"));
完整的代码:
#include <stdio.h>
#include "config.h" \
#include <libintl.h> \
#define _(String) gettext (String) \
#define gettext_noop(String) String \
#define N_(String) gettext_noop (String)
int main()
{
setlocale(LC_ALL, "");
bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
textdomain(GETTEXT_PACKAGE);
printf(_("Hello world\n"));
return (0);
}
4. 在anjuta里选择configure project,用于生成一些必要的文件
5. 切换到terminal, 进入项目目录
执行
./configure --prefix=/tmp/testpo
目的是进行make install的时候安装进入临时的目录,不会对系统构成污染.
6. 接着进入po子目录
make update-po
会得到testpo.pot
7. 复制一份testpo的拷贝
cp testpo.pot zh_CN.po
8. 修改zh_CN.po, 修改后的zh_CN.po与原始的testpo.pot的对比如下
--- testpo.pot 2010-06-22 11:08:35.000000000 +0800
+++ zh_CN.po 2010-06-22 11:12:36.000000000 +0800
@@ -13,10 +13,10 @@ msgstr ""
"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-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/main.c:29
#, c-format
msgid "Hello world\n"
-msgstr ""
+msgstr "你好中文\n"
9. 回到上一级目录,进行编译安装
cd ..
make install
到这里,测试程序已经被安装到了/tmp/testpo目录下. 接下来进行测试, 看
gettext是否工作.
10. 进入程序安装的目录
cd /tmp/testpo
先查看一下当前的locale设置
$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES=en_US.UTF-8
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
运行一下程序
testpo$ ./bin/testpo
Hello world
由于是en_US的LC_MESSAGES, 所以显示的还是英文.
接下来,修改 LC_MESSAGES=zh_CN,也就要使用中文显示了.
testpo$ export LC_MESSAGES=zh_CN.UTF-8
再查看一下locale的设置
testpo$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES=zh_CN.UTF-8
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
运行程序
catbot: testpo$ ./bin/testpo
你好中文
成功! gettext工作正常!
过,可能是由于环境不一样的缘故.经过两天的摸索,终于成功使用gettext.
现在将过程记录下来,希望能够对一些也正在寻找gettext进行汉化的网友一些帮助.
我的环境:
Anjuta: 2.28.10 (其实可以不用,但是因为我懒得自己动手写一个configure文件)
OS: Debian squeeze
GCC: 4.2.3
Editor: Emacs 23
详细过程如下:
1. 启动anjuta, 创建一个generic的c项目,命名为testpo,其他为默认
2. 在configure.ac中增加一行
ALL_LINGUAS="zh_CN"
3. 在main.c中加入
#include "config.h"
#include <libintl.h>
#define _(String) gettext (String)
#define gettext_noop(String) String
#define N_(String) gettext_noop (String)
和
setlocale(LC_ALL, "");
bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
textdomain(GETTEXT_PACKAGE);
并修改
printf("Hello world\n");
为
printf(_("Hello world\n"));
完整的代码:
#include <stdio.h>
#include "config.h" \
#include <libintl.h> \
#define _(String) gettext (String) \
#define gettext_noop(String) String \
#define N_(String) gettext_noop (String)
int main()
{
setlocale(LC_ALL, "");
bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
textdomain(GETTEXT_PACKAGE);
printf(_("Hello world\n"));
return (0);
}
4. 在anjuta里选择configure project,用于生成一些必要的文件
5. 切换到terminal, 进入项目目录
执行
./configure --prefix=/tmp/testpo
目的是进行make install的时候安装进入临时的目录,不会对系统构成污染.
6. 接着进入po子目录
make update-po
会得到testpo.pot
7. 复制一份testpo的拷贝
cp testpo.pot zh_CN.po
8. 修改zh_CN.po, 修改后的zh_CN.po与原始的testpo.pot的对比如下
--- testpo.pot 2010-06-22 11:08:35.000000000 +0800
+++ zh_CN.po 2010-06-22 11:12:36.000000000 +0800
@@ -13,10 +13,10 @@ msgstr ""
"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-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../src/main.c:29
#, c-format
msgid "Hello world\n"
-msgstr ""
+msgstr "你好中文\n"
9. 回到上一级目录,进行编译安装
cd ..
make install
到这里,测试程序已经被安装到了/tmp/testpo目录下. 接下来进行测试, 看
gettext是否工作.
10. 进入程序安装的目录
cd /tmp/testpo
先查看一下当前的locale设置
$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES=en_US.UTF-8
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
运行一下程序
testpo$ ./bin/testpo
Hello world
由于是en_US的LC_MESSAGES, 所以显示的还是英文.
接下来,修改 LC_MESSAGES=zh_CN,也就要使用中文显示了.
testpo$ export LC_MESSAGES=zh_CN.UTF-8
再查看一下locale的设置
testpo$ locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES=zh_CN.UTF-8
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
运行程序
catbot: testpo$ ./bin/testpo
你好中文
成功! gettext工作正常!
相关阅读 更多 +