Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt只加载UI字符串的翻译,而不加载代码中的字符串_Qt_Translation - Fatal编程技术网

Qt只加载UI字符串的翻译,而不加载代码中的字符串

Qt只加载UI字符串的翻译,而不加载代码中的字符串,qt,translation,Qt,Translation,我的项目中有很多表单和字符串,可翻译的字符串被装箱在tr()函数中。我由语言学家翻译了所有字符串,但当我加载相应的qm文件时,只翻译UI中的字符串 例如,如果我有一个表单,其中包含一个带有“helloworld!”文本的标签,那么它会被翻译成“ollehdlrow!”(仅用于say)。 但如果我在代码中写道: if ( condition ) ui.setTitle(tr("MainWindow")); else ui.setTitle(tr("SecondaryWindow")

我的项目中有很多表单和字符串,可翻译的字符串被装箱在tr()函数中。我由语言学家翻译了所有字符串,但当我加载相应的qm文件时,只翻译UI中的字符串

例如,如果我有一个表单,其中包含一个带有“helloworld!”文本的标签,那么它会被翻译成“ollehdlrow!”(仅用于say)。 但如果我在代码中写道:

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
}