【发布时间】:2021-11-14 19:15:26
【问题描述】:
Qt 5.15 引入(至少我相信它是 5.15 的新功能).ts 文件,以允许在应用程序中正确处理多语言环境文本。我正在从 5.X 更新 iOS Qt 应用程序,其中 X 对 .ts 文件一无所知。启动时,我收到一条警告,表明存在特定于应用程序的翻译集(这是真的),但 Qt 自己的文本没有翻译(如警告文本和对话框提示)。文档说,这些翻译位于 qtttranslations 文件夹中的 Qt5 源目录(目前通常是 /tqtc-qt5)中。这样说这个文档https://doc.qt.io/qt-5/ios-platform-notes.html#application-assets。示例仅显示应用程序特有的文本翻译,而不是 Qt 的“内置”文本。太快了,我将列出我的假设,以便可以更正或确认它们。
-
Qt 一直都有自己的嵌入文本,但 5.15 引入了一种方法来确保您的多语言环境就绪应用程序具有所有可用的正确翻译的“内置”文本。
-
只有 app-writer 知道他们正在使用哪些模块,因此 app-writer 有责任指定将哪些翻译集添加到 app 的资源中以处理不同的语言环境。 (根据本文档 - https://doc.qt.io/qt-5/qmake-variable-reference.html#translations)
-
根据上述两个文档,例如,如果我使用基本的 Qt 功能和 QML,并且我有一个应用程序具有一级语言支持,例如英语、德语和法语,我的应用程序似乎.pro 文件应包含类似
TRANSLATIONS += <path_to_qt5>/qttranslations/qtbase_en.ts TRANSLATIONS += <path_to_qt5>/qttranslations/qtbase_de.ts TRANSLATIONS += <path_to_qt5>/qttranslations/qtbase_fr.ts TRANSLATIONS += <path_to_qt5>/qttranslations/qtdeclarative_en.ts TRANSLATIONS += <path_to_qt5>/qttranslations/qtdeclarative_de.ts TRANSLATIONS += <path_to_qt5>/qttranslations/qtdeclarative_fr.ts CONFIG += lrelease embed_translations
我已经跟踪调试器中的 Qt 源代码,直到它抱怨缺少翻译。它正在寻找 qt*_*.qm,其中第一个通配符是您的模块(“base”、“declarative”等),第二个是您的双字母语言代码。那么,我应该明确地将 .qm 文件作为资源添加到我的 iOS 包中,还是 TRANSLATIONS += foo_ln.ts 隐含地执行此嵌入以响应 CONFIG += lrelease embed_translations。有一件事是肯定的:现在,我对较旧的 .pro 文件的天真移植对 TRANSLATIONS 属性没有任何作用,并且 Qt 对我的包中丢失的 .qm 文件感到不安。这是一个警告,而不是严重的失败,所以我假设在紧要关头,它会提供美国英文文本,这似乎是翻译的基线,并且默认嵌入源(而不是包)中。我在上面第 3 点中对 .pro 文件的示例添加似乎足够了,还是还有更多工作要做?还是有更少的事情要做?有没有我在文档中遗漏的 .pro 指令,上面写着“使用 Qt 固有字符串的国际翻译做正确的事情”?除了列出的 .ts 文件之外,还有一个“qt_*.ts”文件集。无论我是否需要,对于那些不关心拖着一些额外字符串的懒惰人来说,这就是一切吗?最后,还有EXTRA_TRANSLATIONS,类似于TRANSLATIONS,只是它在构建过程中不经过lupdate。现在我很不清楚lupdate 相对于lrelease 的功能,但是否一个用于“库存”Qt 字符串,另一个用于特定于应用程序的翻译(因为它们可能是“更新的”由于开发过程中的变化)?语义现在对我来说没有意义,我也没有责任以“正确”的方式处理这些事情。
【问题讨论】: