QFileDialog本地化

时间:2012-01-18 08:05:10

标签: qt

QFileDialog在我的代码中使用如下:

QFileDialog fileDlg;
fileDlg.setFileMode(QFileDialog::AnyFile);
fileDlg.setViewMode(QFileDialog::List);
fileDlg.setNameFilter("Excel Files(*.csv)");
fileDlg.setDefaultSuffix("csv");
fileDlg.setAcceptMode(QFileDialog::AcceptSave);
fileDlg.exec();

不幸的是,这不使用用户当前语言环境中的文本。我希望保存按钮是“保存”。此外,当我单击对话框时,按钮的文本设置为“打开”,而在我的语言环境中它应该是“打开”。

如何向QFileDialog提供本地化字符串?

3 个答案:

答案 0 :(得分:3)

我知道这已被回答并被接受,但正确的方法不是手动翻译Qt已经提供的内容而是 加载Qt中包含的翻译 像这样:

 /* load the system translations provided by Qt */
 QTranslator qtTranslator;
 qtTranslator.load("qt_" + QLocale::system().name(),
         QLibraryInfo::location(QLibraryInfo::TranslationsPath));
 app.installTranslator(&qtTranslator);

 /* load our custom translations for this application */
 QTranslator myappTranslator;
 myappTranslator.load("myapp_" + QLocale::system().name());
 app.installTranslator(&myappTranslator);

这样,Qt将翻译它已经知道的内容(就像它自己的小部件一样),并将使用随应用程序提供的自定义翻译。

答案 1 :(得分:1)

“打开”字符串是硬编码的,但在QFileDialog

中翻译
void QFileDialogPrivate::_q_updateOkButton()
{
// ...
    if (acceptMode == QFileDialog::AcceptSave)
        button->setText(isOpenDirectory ? QFileDialog::tr("&Open") : acceptLabel);

您需要安装一个QTranslator,将&Open上下文中的QFileDialog翻译为您想要的内容。

另请参阅Internationalization in Qt docs了解详情。

答案 2 :(得分:0)

您可以使用QFileDialog中的static functions之一。那些使用来自操作系统的本机文件对话框,它将使用正确的语言环境和翻译。