使用 GNU gettext 实现国际化

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)运行程序,控制台会显示自己填写的翻译内容;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值