Qt只加载UI字符串的翻译,而不加载代码中的字符串
我的项目中有很多表单和字符串,可翻译的字符串被装箱在tr()函数中。我由语言学家翻译了所有字符串,但当我加载相应的qm文件时,只翻译UI中的字符串 例如,如果我有一个表单,其中包含一个带有“helloworld!”文本的标签,那么它会被翻译成“ollehdlrow!”(仅用于say)。 但如果我在代码中写道:Qt只加载UI字符串的翻译,而不加载代码中的字符串,qt,translation,Qt,Translation,我的项目中有很多表单和字符串,可翻译的字符串被装箱在tr()函数中。我由语言学家翻译了所有字符串,但当我加载相应的qm文件时,只翻译UI中的字符串 例如,如果我有一个表单,其中包含一个带有“helloworld!”文本的标签,那么它会被翻译成“ollehdlrow!”(仅用于say)。 但如果我在代码中写道: if ( condition ) ui.setTitle(tr("MainWindow")); else ui.setTitle(tr("SecondaryWindow")
if ( condition )
ui.setTitle(tr("MainWindow"));
else
ui.setTitle(tr("SecondaryWindow"));
未翻译main窗口或secondary窗口,并显示原始文本
有什么想法吗?非常感谢advanced。我想为像我这样的人解释一下解决方案。 考虑到我有一个名为MyFrm的类。我为我的项目定义了一个名为MyNmeSpace的namspace
/* 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文件中的翻译像MyNmeSpace::MyForm一样写入每个条目。在设置标题之前还是之后加载.qm文件?翻译文件中是否有“MainWindow”和“SecondaryWindow”的翻译?当然,我已经翻译了“MainWindow”和“SecondaryWindow”在my.ts文件和laod.qm文件中,然后在安装.qm文件后重新转换ui()。
/* 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
}