Qt Translation返回相同的字符串,而不是Translation

Qt Translation返回相同的字符串,而不是Translation,qt,Qt,我遇到了一个奇怪的Qt翻译问题 由于我无法更改涉及翻译表的遗留数据库的原因,我们的“自然语言”是“枚举” QString myString = tr("OUR_APP_MY_STRING"); 我有一个脚本,它从数据库中构建*.TS文件供Qt使用 英文版*.TS文件中的条目如下所示: <message> <source>OUR_APP_MY_STRING</source> <translation>My String</tr

我遇到了一个奇怪的Qt翻译问题

由于我无法更改涉及翻译表的遗留数据库的原因,我们的“自然语言”是“枚举”

QString myString = tr("OUR_APP_MY_STRING");
我有一个脚本,它从数据库中构建*.TS文件供Qt使用

英文版*.TS文件中的条目如下所示:

<message>
    <source>OUR_APP_MY_STRING</source>
    <translation>My String</translation>
</message>

我们的应用程序我的字符串
我的绳子
*.TS文件可以很好地加载到Qt-Linguist中。那里的一切看起来都很好。“我们的应用程序我的字符串”被找到,它的“英文翻译”看起来还可以

QT项目文件的翻译部分包含*.TS文件 我正在使用lRelease生成.QM文件,并将它们放入应用程序的资源(.qrc)文件中

在我的应用程序的设置函数(构造后由main()调用)中,我有以下代码:

// initialize translator
this->currentTranslator = new QTranslator(instance());

if (this->currentTranslator->load(":/translation/myApp_en.qm"))
{
  this->installTranslator(this->currentTranslator);
  QString test = tr("OUR_APP_MY_STRING");  // <<----- problem. output is always "OUR_APP_MY_STRING"

}
//初始化转换器
此->currentTranslator=新的QTranslator(实例());
如果(此->当前转换器->加载(“:/translation/myApp_en.qm”))
{
此->安装转换器(此->当前转换器);

QString test=tr(“我们的应用程序我的字符串”);//这行中的
instance()
不清楚

 this->currentTranslator = new QTranslator(instance());
 if (this->currentTranslator->load(":/translation/myApp_en.qm"))
但无论如何,这里有一些东西需要检查:

  • 您的projectname.pro中是否有类似的内容
resources.qrc
是我通常使用的名称。替换为您选择的任何名称。)

  • 您是否检查了
    参考资料.qrc
    中的前缀?您确定其中有
    翻译/
    前缀吗?类似的操作也应该可以:
resources.qrc
中:

下面是项目树的简要说明:

MyApplication
 ├── resources
 │   ├── pixmaps
 │   └── ...
 ├── (sources are here)
 ├── MyApplication.pro
 ├── resources.qrc
 ├── TODO.txt
 ├── ts
 │   ├── MyApplication_en.qm
 │   ├── MyApplication_en.ts
 │   ├── MyApplication_es.qm
 │   └── MyApplication_es.ts
 └── win32.rc
这是一个非常小的项目,源代码混合了一些工件

编辑:

我认为您应该尝试将文件名和目录部分分开传递给load方法

 this->currentTranslator = new QTranslator(instance());
 if (this->currentTranslator->load(":/translation/myApp_en.qm"))
对此

 if (this->currentTranslator->load("myApp_en.qm", ":/translation/"))

回答您的问题:是的,我的项目文件中有*.qrc文件。我的所有应用程序图像都在那里。*.qrc文件前缀为“/”.文件夹存在。我们之间的唯一区别是,我从QApplication派生类中加载和初始化转换器,而您是从main方法中进行的。这不是加载部分。我放弃了资源,只是为了看看问题出在哪里。我直接从硬盘加载,加载正常。加载返回“真的”.“我是空的”"在QTranslator上,返回false。我想我遇到了问题,因为我的*.TS文件是UTF-8,因为我的应用程序被翻译成13种语言,有些非常奇特。我不知道如何修复它。翻译字符串总是返回同一个未翻译的字符串。@dschulz在项目文件中有一个变量,用于将qrc_资源文件收集到f中像
MOC\u DIR
这样的旧版本,用于
.MOC
文件吗?@Niklas一般来说,资源文件有
RCC\u DIR
,但我不确定这是您想要的。您可以在任何您认为合适的目录结构中根据需要对资源文件进行分类,然后在
.qrc>中正确定义各个文件的路径文件。@dschulz我在找
RCC\u DIR
。非常感谢!
MyApplication
 ├── resources
 │   ├── pixmaps
 │   └── ...
 ├── (sources are here)
 ├── MyApplication.pro
 ├── resources.qrc
 ├── TODO.txt
 ├── ts
 │   ├── MyApplication_en.qm
 │   ├── MyApplication_en.ts
 │   ├── MyApplication_es.qm
 │   └── MyApplication_es.ts
 └── win32.rc
 if (this->currentTranslator->load(":/translation/myApp_en.qm"))
 if (this->currentTranslator->load("myApp_en.qm", ":/translation/"))