2026.1.26随笔:实习第二十一天(翻译问题)

期末考试回来第一天

上午mt让我先看了一下那个翻译那一块,之后就让我改了一下翻译的功能

搞半天没搞出来,项目还启动不了了,然后用git把版本全部回退,重启了一下电脑,重新编译一下项目,还是不行,问了mt说让我把Resources.qrc文件里面添加一下当前项目的qm文件路径,添加之后,failed to load translate file倒是不报错了,但是还是显示的英文

最后,在ACFEAMainWindows里面(初始化translator的地方)可以进行翻译,但是同样的代码,在另一个模块里面就是不行,可能就是生命周期的问题

最后将初始化那一部分改成了new来分配,问题就完美解决了

之后就是把我今天遇到的问题都更新到团队文档上面

另外说一嘴,最后解决这个问题后mt说他们之前都没发现这个问题然后用了一些笨办法解决的(再给其他模块添加一个翻译QTranslator),最后居然让我给发现了

使用tr()的前提:

● 类内写法:继承 QObject 并声明 Q_OBJECT 宏,随后可直接 tr(“text”)
● 类外/静态写法:QObject::tr(“text”) 同样有效,但 lupdate 会把上下文记为 QObject 而非当前类,后期维护略麻烦,不推荐

翻译流程步骤:

  1. 生成翻译源文件(.ts)

打开 Qt 5.14.2 (MSVC 2017 64-bit) 终端,进入项目根目录(含 .pro 文件)。

执行命令:

1
lupdate xx.pro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 D:\UGit\xx-acoustics-20250824-gitea\ACFEA 的目录

2025/12/24 11:56 <DIR> .
2025/12/24 11:56 <DIR> ..
2025/12/23 15:47 309 ACFEA.pro
2025/12/24 11:56 2,968 ACFEA.sln
2026/01/26 09:33 <DIR> ACFEADataManager
2026/01/06 15:13 <DIR> ACFEAGUI
2026/01/06 15:13 <DIR> ACFEAMain
2026/01/16 10:28 <DIR> ACFEAOperatorsModel
2026/01/06 15:13 <DIR> ACFEAUtils
2026/01/14 10:26 78,755 Makefile
3 个文件 82,032 字节
7 个目录 441,359,544,320 可用字节

D:\UGit\xx-acoustics-20250824-gitea\ACFEA>lupdate ACFEA.pro
Updating '../Resources/translation/ACFEA_DataManager_zh.ts'...
Found 1 source text(s) (0 new and 1 already existing)
Updating '../Resources/translation/ACFEA_zh.ts'...
Found 32 source text(s) (3 new and 29 already existing)

D:\UGit\xx-acoustics-20250824-gitea\ACFEA>
1
2
tr = QCoreApplication::translate("SPHPostProcess", "SoundPressureData"); // 原文本只能是常量
tr = QCoreApplication::translate(ctx, "SoundPressureData"); // 写成这样可能不会被lupdate识别
  1. 翻译编辑

在 Qt Creator 中找到翻译文件(如 xx_zh_CN.ts)。右键点击文件,选择 “使用 Qt Linguist 打开”。确保.pro文件里声明了翻译文件。

  1. 翻译与保存

在 Linguist 中定位待翻译字符串,填写对应翻译。翻译完成后,勾选 “ ✅ 图标”。全部完成后保存文件(Ctrl + S),或点击保存菜单。

  1. 发布翻译生成.qm文件

关闭 Qt Linguist,返回 Qt Creator。选择工具->外部->Qt语言家->发布翻译。 或者直接在命令行里再次运行 lrelease xx.pro,下次启动项目时,系统将自动加载已翻译内容。

1
2
3
4
5
6
7
D:\UGit\xx-acoustics-20250824-gitea\ACFEA>lrelease ACFEA.pro
Updating 'D:/UGit/xx-acoustics-20250824-gitea/ACFEA/../Resources/translation/ACFEA_zh.qm'...
Generated 3 translation(s) (3 finished and 0 unfinished)
Ignored 29 untranslated source text(s)
Updating 'D:/UGit/xx-acoustics-20250824-gitea/ACFEA/ACFEADataManager/../../Resources/translation/ACFEA_DataManager_zh.qm'...
Generated 0 translation(s) (0 finished and 0 unfinished)
Ignored 1 untranslated source text(s)
  1. 常见问题处理

若 Qt Linguist 中某些条目显示为灰色,表示该字符串已不在源代码中使用。(已过时)

可手动在文本编辑器中打开 .ts 文件,删除对应 段落,再重新发布翻译。