QT6.9.1多语言切换

一、先在QT工具栏中添加翻译工具

若不添加,默认应该是没有的

1、配置

添加->添加工具

2、分别加入三个:更新翻译,发布翻译,翻译

(1)、更新翻译

  1. %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate

  2. %{CurrentDocument:Project:FilePath}

  3. %{CurrentDocument:Project:Path}

(2)、发布翻译

  1. %{CurrentDocument:Project:QT_INSTALL_BINS}\lrelease

  2. %{CurrentDocument:Project:FilePath}

  3. %{CurrentDocument:Project:Path}

(3)、翻译

  1. %{CurrentDocument:Project:QT_INSTALL_BINS}\linguist

  2. %{CurrentDocument:Project:Path}

二、在.pro中添加代码,生成ts文件

TRANSLATIONS += res/language/zh_CN.ts \
                res/language/en_US.ts

这里需要注意,要自己去新建一个文件夹,路径为工程目录下。

点击刚刚添加进入的:工具->外部->更新翻译,就会生成两个ts文件,下图中qm文件是后续翻译转换出来的。

三、打开

导入其中一个ts,并选择目标,第一个可以不用填

另一个ts文件:

四、开始翻译

中文文件只需要将源文重新复制一遍下来即可。

保存

发布

发布之后就会多出一个qm文件

这个qm文件就是后面需要用到的。切记这个ts不要删除,不然后面修改程序后,所有的翻译都需要重新翻译,若不删除,只需要翻译新的即可。

解释一下为什么还需要一个中文文件:从中文切换到英文需要英文的文件,从英文切换回中文也是需要一个中文文件的,所以需要制作两个。

英文翻译:

这里需要重新打开一个新的linguist6.9.1,再打开en_US.ts文件,不然的话源文和翻译为以及上下文好像无法切换,软件bug?

跟上面一样的操作,翻译完成后,保存,发布即可。

五、编写程序

在mainwindow.h的private中定义

在mainwindow.cpp中加入,初始化时根据系统语言设置语言

需要注意这个load路径,我这里使用了绝对路径,才能够正确的找到文件,使用相对路径 "../res/language/en_US.qm" 时,Qt 会从当前工作目录(working directory) 去找这个文件。

切换逻辑:

我这里使用了菜单切换:

切换时点击不同选项:

六、补充

1、如果后续需要更新翻译,一样的操作,点击更新翻译,使用linguist进行翻译,然后保存,发布即可。程序切换翻译依赖的是qm文件。

2、在自写代码中想要翻译,需要使用tr()包裹,如:

3、如果软件中发现切换语言后,某个类没有成功切换到新的语言(多发生在代码中动态new出的类),则在该类中重写以下函数。

//.h
void changeEvent(QEvent *e);

//.cpp
void changeEvent(QEvent *e)
{
    if(e->type() == QEvent::LanguageChange)
    {
        ui->retranslateUi(this);
    }
}

七、To do

将qm文件放入到.qrc中,不依赖路径

//=======20251106========//

1、添加新文件

Qt -> Qt Resource File

添加前缀,输入名字

添加文件

编译一次,然后在代码中调用,替换掉原来的代码:

这里面有一个坑,我原本路径使用的是:qrc:/language_rec/res/language/en_US.qm,但是发现不行。

实际上可以去qrc编译的文件里面看看

这里面有实际编译的路径

替换路径后就可以了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值