打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
C语言中用GNU gettext实现本地化

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

写一个示例程序

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

 

编译源文件生成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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
PHP的gettext用法
C++ 标准库的 locale 类用法
ofstream和wofstream与中文输出问题
也谈C语言对国际化的支持 | Tony Bai
linux C 宽字符wchar_t处理
C标准库的setlocale()用法笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服