QTranslator和UTF-8组合给我带来了麻烦

QTranslator和UTF-8组合给我带来了麻烦,qt,Qt,在Mac上使用Qt4.7.4 我的*.TS文件是使用我编写的perl脚本生成的,并且是UTF-8。关于遗留依赖性的长话短说。我们需要支持13种语言,包括一些外来语言。从中生成*.QM文件似乎效果不错。您可以将*.QM文件加载到Qt-Linguist中,一切看起来都正常 由于遗留的原因,我的系统语言是“Enums”。也就是说,我是这样做的: QString label = tr("APP_STRINGS_MYLABEL_TEXT"); // this translates to 13 langau

在Mac上使用Qt4.7.4

我的*.TS文件是使用我编写的perl脚本生成的,并且是UTF-8。关于遗留依赖性的长话短说。我们需要支持13种语言,包括一些外来语言。从中生成*.QM文件似乎效果不错。您可以将*.QM文件加载到Qt-Linguist中,一切看起来都正常

由于遗留的原因,我的系统语言是“Enums”。也就是说,我是这样做的:

QString label = tr("APP_STRINGS_MYLABEL_TEXT"); // this translates to 13 langauges...
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTranslator translator;
bool empty = translator.isEmpty(); // Returns TRUE
bool loaded = translator.load("myApp_en","/Users/user/Dev/myApp/translation");
empty = translator.isEmpty(); // returns FALSE

// install the translator.
MyApp->installTranslator(&translator);

// Here comes my problem...
QString test = MyApp->trUtf8("APP_STRINGS_MYLABEL_TEXT"); // returns "APP_STRINGS_MYLABEL_TEXT"
QString test2 = MyApp->tr("APP_STRINGS_MYLABEL_TEXT"); // returns "APP_STRINGS_MYLABEL_TEXT"
例如,从english.TS文件中摘录如下:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.0" language="en">
<defaultcodec>UTF-8</defaultcodec>
<context>
  <name>MyApp</name>
    <message>
      <source>APP_STRINGS_MYLABEL_TEXT/source>
      <translation>My Label Text In English</translation>
    </message>
..
..
..
</context>
我的主要方法的测试代码如下所示:

QString label = tr("APP_STRINGS_MYLABEL_TEXT"); // this translates to 13 langauges...
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));
QTranslator translator;
bool empty = translator.isEmpty(); // Returns TRUE
bool loaded = translator.load("myApp_en","/Users/user/Dev/myApp/translation");
empty = translator.isEmpty(); // returns FALSE

// install the translator.
MyApp->installTranslator(&translator);

// Here comes my problem...
QString test = MyApp->trUtf8("APP_STRINGS_MYLABEL_TEXT"); // returns "APP_STRINGS_MYLABEL_TEXT"
QString test2 = MyApp->tr("APP_STRINGS_MYLABEL_TEXT"); // returns "APP_STRINGS_MYLABEL_TEXT"

如您所见,我的所有字符串都被转换回其原始值。没有真正的翻译发生。如果你知道为什么会发生这种事,我会感谢你的帮助。我现在不知所措。

罪魁祸首是上下文。因为我使用的是从第三方来源生成的字符串,所以上下文总是错误的。我一开始在TranslateAPI中显式使用“MyApp”上下文,它就开始工作了


感谢所有回复者。

看起来翻译已加载,但无法与系统区域设置匹配。这有什么好处?:qDebug()uiLanguages()无法通过编译。可能在4.7.4中被弃用了,但是language()是31(“English”),这也是我从“languageToString(Langauge lang)”方法返回的字符串。但是等等,这里可能有东西。当我问“QLocale::system().name();”时,我得到的是“en_US”。这就是不匹配发生的地方吗?我该怎么衔接呢?我想国家后缀是可以的。Qt在尝试定位翻译文件时将其剥离:也许您可以尝试其他加载功能?在pro文件中设置
codefortr=UTF-8
后,尝试在我的项目中重新创建
.ts
文件。然后翻译几个字符串并运行
lrelease
生成
.qm
文件。一切都正常工作。@RM1970您的源代码中是否有
使用名称空间..
?我了解到名称空间会混淆
lupdate
工具,导致字符串的运行时转换失败。