Qt国际化(i18n)使用方法

    以Qt中i18n示例为参照,解读Qt实现国际化的方法和步骤。

一、制作翻译文件

1、修改.pro文件,添加翻译文件配置:

TRANSLATIONS  += translations/i18n_zh.ts \
                 translations/i18n_en.ts

说明:

翻译文件名:项目名_地区名.ts,示例中i18n应随着实际项目修改。

地区名缩写:

        zh    中国

        en   英国

2、生成翻译文件

       交互模式:QtCreator菜单/工具/外部/Qt语言家/更新翻译

        命令行:

$ lupdate -verbose i18n.pro

翻译文件格式:



    …
    范围名称
    
        标识名称
        内容

3、编辑翻译文件

启动linguist语言翻译工具,命令行:

$ linguist

打开翻译文件,逐一配置翻译内容

Qt国际化(i18n)使用方法_第1张图片

 4、生成.qm文件

       交互模式:QtCreator菜单/工具/外部/Qt语言家/发布翻译

        命令行:

$ lrelease -verbose i18n.pro

二、配置资源文件

1、添加资源文件

    打开菜单文件/新建文件,选择Qt项目/Qt Resource File模板添加资源文件。

    示例中资源文件为i18n.qrc,可随着实际项目修改。

2、在资源文件中添加翻译文件,注意是发布后的.qm文件

/translations/i18n_zh.qm
/translations/i18n_en.qm

注意:可以同时使用多个翻译文件,使用时按后装优先的原则从最后安装的翻译文件找起。

三、关键代码

1、装配翻译文件

QTranslator translator;

//加载翻译文件的几种方法:
translator.load(":/translations/i18n_zh.qm");
translator.load("i18n",":/translations","_"/ _zh.qm");
translator.load(QLocale(),"i18n","_",":/translations",".qm"));

//安装翻译器
QCoreApplication::installTranslator(&translator);

2、使用翻译的几种方法:

QCoreApplication::translate(const char *context, const char *sourceText, \
                            const char *disambiguation = nullptr, int n = -1)

参数说明:

        Context:             范围标识。对应翻译文件的范围名称

        sourceText:         文本标识。对应翻译文件中的标识名称,翻译文件中未找对应的翻译内容时则返回sourceText的值

        disambiguation     消歧标识,可选项。用以处理同一范围内同一文本标识有多处不同用途的情况

​​​​​​​QObject::tr(const char *sourceText, const char *disambiguation = nullptr, int n = -1)

参数说明:

        对象类名:           对应翻译文件的范围名称。

        sourceText:         文本标识。对应翻译文件中的标识名称,翻译文件中未找对应的翻译内容时则返回sourceText的值

        disambiguation     消歧标识,可选项。应对同一范围内同一文本标识有多处不同用途的情况

注意:在非QObject类中使用tr()函数,需在类定义中增加宏

    Q_DECLARE_TR_FUNCTIONS(类名)

3、卸载翻译文件

removeTranslator(":/translations/i18n_zh.qm")

四、参考:

1、qt中制作添加 .ts 翻译文件

https://blog.csdn.net/peter_huang1987/article/details/67633633

2、Qt 国际化 | Qt 6.3

https://doc.qt.io/qt-6/internationalization.html

你可能感兴趣的:(Qt,qt)