介绍
GetText是GNU的一个项目,GetText主页有最丰富的信息。下面的翻译摘自网络,有关GetText主页的介绍 :
“通常,程序及其文档信息都是用英语语言写的,程序运行时同用户交互的信息也是英语。这是一个事实,不仅仅GNU的软件是这样,其他大部分私有软件或自由软件也是这样。一方面,对于来自所有国家的开发者、维护者和用户来说,相互沟通中使用一种通用的语言非常的方便。另一方面,相对于母语来说大多数人并不适应使用英语,而且他们的日常工作都是尽可能的使用他们自己的母语。多数人都会喜欢他们的计算机屏幕显示的英语更少,显示的母语更多。"
" GNU 的 'gettext' 是 GNU翻译项目的一个重要步骤,我们依赖于它 作很多其他的步骤。这个软件包给程序员、翻译者,或者用户提供了一套集成工具和文档。详细地说,GNU gettext 提供了一套工具, 能让其他 GNU 软件创建多语言信息。..."
gettext的工作流程是这样的:比如我们写一个Visual C++(MSVC)程序,通常printf等输出信息都是English的。如果我们在程序中加入gettext支持,在需要交互的字符串上用gettext函数,程序运行是就可以先调用gettext函数获取当前语言的字符串,替换当前的字符串了。注意是运行时替换。
GNU gettext-0.18.3.2 是最新版本,上可以直接下载,只是没有Visual C++(MSVC)可用的运行支持库,只能自己动手编译了,编译好的运行支持库,点击这里下载。
在Visual C++(MSVC)中使用GNU gettext实现多语言时,可以编写翻译函数来实现界面与菜单字符串的自动替换,程序中的字符串只能一个个手工替换了,这样使用起来,就跟在Delphi与C++Builder中使用GNU gettext差不多方便快捷了。
简单使用的例子
一个简单的例子,
#include <stdio.h>
#include <libgnuintl.h>
/*使用gettext通常使用类似下面的一个带函数的宏定义
*你完全可以不用,直接使用 gettext(字符串)
*/
#define _(S) gettext(S)
/*PACKAGE是获取语言字符串的文件名字(运行时输入的命令)*/
#define PACKAGE "default"
int main(int argc, char **argv)
{
/* 下面三个参数都是使用gettext时候需要使用的
* setlocale
* bindtextdomain
* textdomain
*/
setlocale(LC_ALL,"");
bindtextdomain(PACKAGE, "locale");
textdomain(PACKAGE);
printf(_("Hello,GetText!\n"));
return 0;
}
其中语言字符串文件的结构: .\locale\语言名称\LC_MESSAGES\default.mo,如简体中文:.\locale\ZH_CN\LC_MESSAGES\default.mo
mo文件是编译后的语言字符串文件,GNU网站上有相应的工具软件可以编辑与生成;
点击这里下载Visual C++(MSVC)中可用的GNU gettext-0.18.3.2运行支持库
感谢为这个项目做出贡献的所有人!有问题请去随心社区论坛讨论!