私のような状況にある誰かのために解決策を説明したいと思います。MyForm という名前のクラスがあるとします。MyNmeSpace という名前のプロジェクト用の名前空間を定義しました。
/* MyForm.cpp */
using namespace MyNmeSpace;
MyForm::MyForm(QWidget* parent):QMainWindow(parent)
{}
1)ユーザーが文字列をtr()関数でラップすると、翻訳されません。翻訳を有効にするには、次のようにQApplication::translate("ClassName", "str", 0, QApplication::UnicodeUTF8)を使用する必要があります。
/* MyForm.cpp approach 1 */
using namespace MyNmeSpace;
MyForm::MyForm(QWidget* parent):QMainWindow(parent)
{
bool condition; /* sth you like */
if ( condition )
// ui.setWindowTitle(tr("MainWindow")); <= won't work
ui.setWindowTitle(QApplication::translate("MyForm", "MainWindow", 0, QApplication::UnicodeUTF8));
else
// ui.setWindowTitle(tr("SecondaryWindow")); <= won't work
ui.setWindowTitle(QApplication::translate("MyForm", "SecondaryWindow", 0, QApplication::UnicodeUTF8));
}
このアプローチでは、.ts ファイルの翻訳は各エントリに MyForm で書き込まれます。
2) using 名前空間 MyNmeSpace を削除します。MyForm.cppの冒頭から、次のようにスコープを指定します。
/* MyForm.cpp approach 2 */
MyNmeSpace::MyForm::MyForm(QWidget* parent):QMainWindow(parent)
{
bool condition; /* sth you like */
if ( condition )
ui.setWindowTitle(tr("MainWindow")); // Now works
else
ui.setWindowTitle(tr("SecondaryWindow")); // Now works
}
このアプローチでは、.ts ファイル内の翻訳は、各エントリでMyNmeSpace::MyFormのように記述されます。