3

奇妙な Qt Translation の問題が発生しています。

変換テーブルのレガシーデータベースを含む変更できない理由により、私たちの「自然言語」は「列挙型」です。

QString myString = tr("OUR_APP_MY_STRING");

Qt で使用するデータベースから *.TS ファイルを作成するスクリプトがあります。

英語の *.TS ファイルのエントリは次のようになります。

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

*.TS ファイルは Qt Linguist に正常に読み込まれます。そこにあるものはすべて問題ないように見えます。「OUR_APP_MY_STRING」が見つかり、その「英語の翻訳」は問題ないようです。

QT プロジェクト ファイルの TRANSLATION セクションに *.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"

}

何か案は?

4

1 に答える 1

6

instance()この行に何があるかは明らかではありません

 this->currentTranslator = new QTranslator(instance());

とにかく、ここで確認すべき点がいくつかあります。

  • にこのようなものはありYourProjectName.proますか?
RESOURCES += \
   resources.qrc 

(resources.qrcは私が通常使用する名前です。任意の名前に置き換えてください。)

  • のプレフィックスを確認しましたresources.qrcか? translation/そこに接頭辞があると確信していますか?このようなものも動作するはずです:
  <RCC>
    <qresource prefix="/">
      <file>translation/YourProjectName_en.qm</file>
      <!-- other resources here -->
    </qresource>
  </RCC>

YourProjectName_en.qmサブディレクトリにある場合translation/

これが私のために働くものです™

main.cpp:

 QApplication app(argc, argv);
 QApplication::setApplicationName("MyApplication");
 QApplication::setApplicationVersion("4.4");
 QApplication::setOrganizationName("FUBAR");
 QApplication::setOrganizationDomain("www.fu.bar");

 QTranslator translator;
 translator.load(app.applicationName() + "_" + QLocale::system().name(), ":/ts");
 app.installTranslator(&translator);

resources.qrc:

<RCC>
   <qresource prefix="/">
     <file>resources/pixmaps/exit.png</file>
     <!-- ... -->
     <file>ts/MyApplication_en.qm</file>
     <file>ts/MyApplication_es.qm</file>
   </qresource>
</RCC>

MyApplication.pro:

 TRANSLATIONS += \
   ts/MyApplication_en.ts \
   ts/MyApplication_es.ts

 RESOURCES += \
   resources.qrc

 win32 {
   RC_FILE = win32.rc
 }

 OTHER_FILES += \
     win32.rc \
     TODO.txt

プロジェクトツリーの簡単な説明は次のとおりです。

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 メソッドに渡してみるのがいいと思います。つまり、この行を変更します

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

これに

 if (this->currentTranslator->load("myApp_en.qm", ":/translation/"))
于 2012-05-03T19:39:37.723 に答える