一、先在QT工具栏中添加翻译工具
若不添加,默认应该是没有的

1、配置

添加->添加工具

2、分别加入三个:更新翻译,发布翻译,翻译
(1)、更新翻译
-
%{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate
-
%{CurrentDocument:Project:FilePath}
-
%{CurrentDocument:Project:Path}

(2)、发布翻译
-
%{CurrentDocument:Project:QT_INSTALL_BINS}\lrelease
-
%{CurrentDocument:Project:FilePath}
-
%{CurrentDocument:Project:Path}

(3)、翻译
-
%{CurrentDocument:Project:QT_INSTALL_BINS}\linguist
-
%{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编译的文件里面看看

这里面有实际编译的路径

替换路径后就可以了
503

被折叠的 条评论
为什么被折叠?



