我想为像我这样的人解释解决方案。考虑我有一个名为 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)删除使用命名空间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一样编写。