首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在iOS应用程序中正确嵌入QT5.15本地化

如何在iOS应用程序中正确嵌入QT5.15本地化
EN

Stack Overflow用户
提问于 2021-09-21 07:54:18
回答 1查看 220关注 0票数 0

Qt 5.15引入了(至少我认为它对5.15是新的) .ts文件,以便在应用程序中正确地处理多区域文本。我正在从5.X更新一个iOS Qt应用程序,其中X对.ts文件一无所知。在启动时,我收到一个警告,表示存在一个特定于应用程序的翻译集(这是正确的),但是Qt自己的文本没有翻译(比如警告文本和对话框提示)。文档中说,这些翻译位于qttL.12文件夹中的Qt5源目录中(当前通常是/tqtc-qt5)。因此,这个医生说https://doc.qt.io/qt-5/ios-platform-notes.html#application-assets。示例只显示应用程序独特的文本翻译,而不是Qt的“内置”文本。所以很快,我将列出我的假设,这样它们就可以被纠正或确认。

  1. Qt一直有自己的嵌入式文本,但是5.15引入了一种方法来确保您的多语言环境就绪应用程序拥有所有正确翻译的“内置”文本。

只有应用程序编写者才知道他们使用的是哪些模块,因此,指定将哪些翻译添加到应用程序的资源中以处理不同的区域设置是应用程序编写人员的责任。(根据本文档- https://doc.qt.io/qt-5/qmake-variable-reference.html#translations) )

例如,根据上述两个文档,如果我使用基本的Qt功能和QML,并且我有一个对英语、德语和法语的一级语言支持的应用程序,那么我的应用程序的文件应该包括如下内容

翻译:/qt5/qtbase_en.ts翻译-- += /qt根翻译/qtbase_de.ts翻译+= /qttranslations/qtbase_fr.ts翻译+= += _fr.ts翻译+= /qt5/qtbase_fr.ts翻译/qttranslations/qtdeclarative_de.ts /qttranslations/qtdeclarative_fr.ts += _qtt5/qt5翻译+= /path_to_qt5>/qt5/qtbase/qtbase_to.

我通过调试器中的Qt源代码跟踪到了它抱怨缺少翻译的程度。它正在寻找qt*_*.qm,其中第一个通配符是您的模块(“基本”、“声明性”等),第二个是您的两个字母的语言代码。因此,我应该显式地将.qm文件作为资源添加到iOS包中,还是TRANSLATIONS += foo_ln.ts在响应CONFIG += lrelease embed_translations时隐式地执行此嵌入。有一件事是肯定的:现在,我天真地移植了一个旧的.pro文件,对TRANSLATIONS属性没有任何作用,Qt对我的包中缺少的.qm文件感到不快。这是一个警告,而不是一个关键的失败,所以我认为,在紧要关头,它会提供美国英语文本,这似乎是翻译的基线,并嵌入源(而不是包)默认。上面第3点中对.pro文件的示例添加是否足够,还是还有更多的工作要做?还是有更少的事可做?我在文档中是否遗漏了一个.pro指令:“对Qt固有字符串的国际翻译做正确的事情”?在列出的.ts文件中添加了一个"qt_*.ts“文件集。不管我是否需要它,对于那些懒散的人来说,不管我是否需要它,这些都是我所需要的吗?最后,还有类似于EXTRA_TRANSLATIONSTRANSLATIONS,只是它在构建过程中不通过lupdate。现在,我对lupdate相对于lrelease的功能非常不清楚,但是是一种用于“股票”Qt字符串,另一种用于特定于应用程序的翻译(因为它们可能由于开发过程中的变化而被“更新”)?现在的语义学对我来说没有意义,我也没有责任用“正确”的方式来处理这些事情。

EN

回答 1

Stack Overflow用户

发布于 2021-09-27 20:33:57

我想回答我自己的问题,因为事实证明,上面的许多假设都是错误的,并且花了更深入的研究源代码和调试器才使我头脑清醒,但现在我有了智慧。我读到的文档是关于如何将原始翻译文件"(.ts文件)“包含到用qmake构建的应用程序中。与Qt一样,使用qmakeQt Creator构建可以自动解决大部分问题,您的部分是只提供执行应用程序所需的少量规范。然而,我正在开发的这款应用非常庞大、陈旧,而且过于复杂,所以我花了很多时间寻找最晦涩的QtCMake功能,把这个弗兰肯斯坦的怪物拼凑在一起。我想要解决的问题只是简单地为Qt提供一个多语言环境应用程序的自己的文本本地化文件。这款应用程序很好,但Qt却对我指手画脚,抱怨自己找不到自己的。因此,.ts文件不是这种任务的一部分--它们只是从翻译公司以可消费的形式获取数据的管道的一部分。在Qt自己的配置和构建过程中(是的,我们从源代码构建Qt ),它处理将原始.ts文件编译成.qm文件,适合框架的翻译器对象使用。这些都只是放在qtbase/translations中,准备集成到应用程序的安装中。问题是我们(很久以前开发这个应用程序的小组,我现在正在恢复)没有处理iOS的案件。这是一个特殊的情况,需要一些选择。您可以将翻译文件放在特定路径的应用程序包中,您可以自制一些异国情调的网址解析,根据需要将.qm文件的内容提供给翻译器,也可以将它们全部编译成.qrc文件,并将它们放在资源树中。这就是我们对特定于应用程序的翻译所做的,所以我模仿了Qt的翻译,为我们使用的模块和我们的一级本地化目标语言中的语言环境过滤了整个.qm文件集。这涉及到一个复杂的python脚本,以及一些额外的Cmake行,包括一个非常难以捉摸的行(QINIT_RESOURCES),它关闭了所有东西,直到我意识到这个平台需要它。我只是结束这个问题,所以如果其他人感到困惑,找到这个问题,就会有一些一般性的评论来纠正问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69265278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档