c语言gettext的头文件,C语言中用GNU gettext实现本地化

首先要确认GNU gettext已经被安装。

写一个示例程序

gettext_test.c:

#include

#include

#include

#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,这样可以少写几个字...

编译源文件生成gettext_test程序:

# gcc -o gettext_test gettext_test.c

生成翻译文件gettext_test.po:

# xgettext -k_ gettext_test.c

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

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

# mkdir -p language/zh_CN/LC_MESSAGE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 C 语言中,`gettext` 库同样可以用于国际化,其使用方式与 Python 中类似,也分为以下几个步骤: 1. 在代码中使用 `gettext` 函数来标记需要翻译的字符串,例如: ```c #include <libintl.h> #include <locale.h> #define _(str) gettext(str) printf(_("Hello, world!\n")); ``` 2. 使用 `xgettext` 工具提取需要翻译的字符串,并生成 `.pot` 文件,例如: ```bash xgettext -d myapp -o locales/myapp.pot myapp.c ``` 3. 使用翻译工具(如 Poedit)打开 `.pot` 文件,翻译字符串并保存为 `.po` 文件,例如: ``` #. Translators: This is a comment #: myapp.c:5 msgid "Hello, world!\n" msgstr "你好,世界!\n" ``` 4. 使用 `msgfmt` 工具将 `.po` 文件编译成 `.mo` 文件,例如: ```bash msgfmt -o locales/zh_CN/LC_MESSAGES/myapp.mo locales/zh_CN/LC_MESSAGES/myapp.po ``` 5. 在应用程序中设置语言环境,并使用 `gettext` 函数获取翻译后的字符串,例如: ```c #include <libintl.h> #include <locale.h> int main() { // 设置语言环境 setlocale(LC_ALL, "zh_CN.utf8"); bindtextdomain("myapp", "locales"); textdomain("myapp"); // 获取翻译后的字符串 printf(gettext("Hello, world!\n")); return 0; } ``` 以上就是使用 `gettext` 进行国际化的基本步骤。需要注意的是,在使用 `gettext` 时需要先将其初始化,即调用 `setlocale`、`bindtextdomain` 和 `textdomain` 函数来设置语言环境和翻译域。同时,翻译后的字符串需要使用 `printf` 函数输出,而不能直接使用 `puts` 函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值