Qt国际化

A:Qt界面文字国际化

界面文字国际化又分为静态国际化与动态国际化。

 

静态国际化即启动软件时判断当前语言,在main函数或继承自qappliation的类中,加载qm文件。

1、将代码中手动设置的文字包上,比如:ui.label->setText(tr("文字"));

2、利用creator或者vs的qt插件创建ts文件,通过Qt Linguist打开文件,可以看到所有ui以及代码中使用tr包含的带翻译字符都在这边,手动翻译即可。(ts文件其实可以是xml格式的,可以写个程序把对应的翻译填进去,手动填翻译还是比较痛苦的)

3、保存+发布,发布后生成qm文件。

4、代码中根据当前语言,安装translator。

    QTranslator *translator = new QTranslator(this);

    if (translator->load(QString("c:/folder.../xxxx.qm"), QLibraryInfo::location(QLibraryInfo::TranslationsPath)))
        installTranslator(translator);

动态国际化比较繁琐:

1、创建一个全局或静态的QTranslator变量(通过translator->load去修改加载的qm文件,而不是通过多次installTranslator(translator)修改translator!)。

2、将所有代码中手动设置的文字放到同一个函数下,方便更换语言包时手动调用,调用方式如下:

viod Translation::translatorUi(){

ui.label->setText(tr("文字"));

}

void Translation::changeEvent(QEvent* event) {
    if (QEvent::LanguageChange == event->type()) {
        translatorUi();
    }
    return QWidget::changeEvent(event);
}

3、更换完语言包,并调用了步骤2的函数后,还需要在有ui的界面调用ui.retranslateUi(this);(Qt更换语言包不会自动刷新并翻译界面)

 

总的来说动态国际化很不方便,首先有些代码中的文字时动态加载的,不容易放在同一个函数下,步骤2实现的效果就很差。其次,需要一个容易记录当前所有的ui界面指针,这样操作起来更加复杂了。

参考了微信、飞书等软件,基本都是更换后提示需要重启,然后切换语言。

 

 

B:Qt图片国际化

Qt软件基本都会用到带文字的图片,需要翻译图片的基本只能选择静态国际化.

这一类图片也需要在软件启动时加载资源文件。

1、添加多个qrc文件,专门存放不同语言对应的图片,不同语言对应的图片使用相同的别名即Alias:(不需要手动切换图片名)

2、找到qt中rcc.exe目录,运行 rcc.exe -binary xxxx_zh.qrc -o xxx_zh.rcc,生成rcc文件。(rcc放在程序运行目录中)

3、main函数或继承自qappliation的类中,判断当前语言,得出对应的rcc名称及目录。

运行QResource::registerResource(qrcFileName)

提示:生成rcc之后,要从项目中排除qrc,不然没有翻译效果,因为会自动加载第一个qrc中的图片。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值