1. gettext 下载地址https://nchc.dl.sourceforge.net/project/gnuwin32/gettext/0.14.4/gettext-0.14.4.exe
2. 代码中使用安装后的头文件和库文件:
(1)头文件
(2) 库文件
(3)libintl.lib 库依赖一些dll文件,需要把需要的dll文件拷到项目目录下:
3. 项目中使用的代码
(1)代码 (代码页名称:DesignPattern.cpp)
#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <locale.h>
#include <libintl.h>
#define _(STRING) gettext(STRING)
using namespace std;
int main()
{
setlocale(LC_ALL, "en_US"); // 设置使用环境变量的默认地域,中国
bindtextdomain("DesignPattern", "locale"); // 设置mo文件名称,设置mo文件所在目录
textdomain("DesignPattern");
printf(_("Error en los parametros de entrada.\n"));
printf(_("Uso: ./sumatorio [Max num] [Threads]\n"));
getchar();
return 0;
}
(2)说明:
1. "DesignPattern"为生成的mo文件名称;
2. “locale” 为mo文件所在的目录:
项目文件里新建locale文件夹,将下图的目录结构复制过去并将mo文件放到对应的目录中;
gettext要求mo文件所在路径要符合它的规则,每种语言在不同的固定路径下:
附注:
4. 我理解的gettext 使用方式
(1)我们根据它的接口将需要国际化的字符串包含起来;
(2)getext读取代码文件中的被接口包含的字符串生成po文件,我们把po文件的对应字符串进行翻译,然后gettext再将po文件转成mo文件,最终根据语言区域,将字符串转成当地的语言;
5. 文件生成步骤:
(1)在cmd中使用语句 (xgettext.exe -k_ -o DesignPattern.po DesignPattern.cpp) 生成.po文件;
生成的po文件中有
"Content-Type: text/plain; charset=CHARSET\n"
msgid "Error en los parametros de entrada.\n"
msgstr ""
将CHARSET 改为UTF-8;
msgid 代表原先代码里的字符串;msgstr 里需要自己写上需要翻译成的字符串;
(2) 在cmd中使用语句 (msgfmt -o DesignPattern.mo DesignPattern.po) 生成.mo文件;
(3)将生成的mo文件放在固定的文件夹下( locale/zh_CN/LC_MESSAGES文件夹下);
(4)运行程序,控制台会显示自己填写的翻译内容;