C++多语言——libintl库的使用
下面是一个 使用 GNU intl
(libintl)库 实现 C++ 项目多语言支持(中英文) 的完整示例,包括:
-
源代码
-
.po
翻译文件 -
编译和运行步骤
✅ 1. 示例 C++ 源代码 main.cpp
#include <iostream>
#include <locale.h>
#include <libintl.h>
#define _(STRING) gettext(STRING)
int main() {
// 设置程序使用的语言环境
setlocale(LC_ALL, "");
// 设置翻译文件的目录
bindtextdomain("myapp", "./locale");
textdomain("myapp");
// 打印可翻译字符串
std::cout << _("Hello, world!") << std::endl;
std::cout << _("How are you?") << std::endl;
return 0;
}
✅ 2. 生成 .pot
、.po
、.mo
文件
2.1 提取翻译模板 .pot
xgettext --language=C++ --keyword=_ -o messages.pot main.cpp
2.2 创建中文翻译文件 zh_CN.po
msginit --input=messages.pot --locale=zh_CN.UTF-8 --output=zh_CN.po
编辑 zh_CN.po
:
msgid "Hello, world!"
msgstr "你好,世界!"
msgid "How are you?"
msgstr "你好吗?"
2.3 编译 .po
成 .mo
mkdir -p locale/zh_CN/LC_MESSAGES
msgfmt zh_CN.po -o locale/zh_CN/LC_MESSAGES/myapp.mo
✅ 3. 编译程序
Linux / MSYS2:
g++ main.cpp -o myapp -lintl
✅ 4. 设置语言并运行
Linux 或类 Unix:
LANG=zh_CN.UTF-8 ./myapp
输出:
你好,世界!
你好吗?
如你设置的是 LANG=en_US.UTF-8
或未提供翻译,则显示默认英文。
📝 小贴士
-
myapp
是你的 域名(domain name),必须与.mo
文件名一致 -
./locale/zh_CN/LC_MESSAGES/myapp.mo
是固定路径结构 -
Windows 环境下使用 MSYS2 或 mingw 编译时同样支持
libintl