1

在 Mac 上使用 Qt 4.7.4。

我的 *.TS 文件是使用我编写的 perl 脚本生成的,并且是 UTF-8 格式。与遗留依赖关系的长篇故事。我们必须支持 13 种语言,包括一些外来语言。从中生成 *.QM 文件似乎效果很好。您可以将 *.QM 文件加载到 Qt Linguist 中,一切看起来都很健康。

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

QString label = tr("APP_STRINGS_MYLABEL_TEXT"); // this translates to 13 langauges...

因此,例如英语 .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>

我的项目文件有以下内容:

CODECFORTR = UTF-8

我的主要方法具有如下所示的测试代码:

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"

正如你所看到的,我所有的字符串都被翻译回它们的原始值。没有真正的翻译发生。如果您知道为什么会发生这种情况,我将不胜感激。我现在不知所措。

4

1 回答 1

0

罪魁祸首是上下文。由于我使用的是从第三方来源生成的字符串,因此上下文总是错误的。一旦我开始在翻译 API 中明确使用“MyApp”上下文,它就开始工作了。

感谢所有回复的人。

于 2012-05-07T21:09:25.300 回答