Qt QFileDialog本地化

Qt QFileDialog本地化,qt,Qt,QFileDialog在我的代码中使用,如下所示: QFileDialog fileDlg; fileDlg.setFileMode(QFileDialog::AnyFile); fileDlg.setViewMode(QFileDialog::List); fileDlg.setNameFilter("Excel Files(*.csv)"); fileDlg.setDefaultSuffix("csv"); fileDlg.setAcceptMode(QFileDialog::AcceptS

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
提供本地化字符串?

打开的字符串是硬编码的,但在
QFileDialog
中翻译为:

void QFileDialogPrivate::_q_updateOkButton()
{
// ...
    if (acceptMode == QFileDialog::AcceptSave)
        button->setText(isOpenDirectory ? QFileDialog::tr("&Open") : acceptLabel);
您需要安装一个将
QFileDialog
上下文中的
&Open
转换为所需内容的程序


有关更多信息,请参见。

您可以使用
QFileDialog
中的一个。这些对话框使用操作系统中的本机文件对话框,该对话框将位于正确的区域设置和翻译中。

我知道这已经得到了回答和接受,但正确的方法不是手动翻译Qt已经提供的内容,而是翻译到l加载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将转换它已经知道的内容(就像它自己的小部件一样)其余部分将使用应用程序提供的自定义翻译。

选择要保存的文件并选择目录时,您希望它是什么?您不能用文件覆盖目录。是的,但当我单击目录时,保存按钮的文本将更改为系统语言,如“打开”。在我的项目中,语言必须统一。例如:我的项目中的语言为中文,保存按钮的文本为保存".同时,单击目录时,它应该是“打开“不是“打开的”。永远不要在堆栈上使用QObject(及其子类),否则会发生灾难。始终使用
new
,即
QFileDialog*fileDlg=new QFileDialog()
.UmNyobe:这不是真的。它是一个模式对话框,在超出范围之前会关闭。它没有问题。有其他解决方案吗?我是一个Qter,--但是,它的工作方式与以下方式不同:QApplication a(argc,argv);QFileDialog filedialog(NULL,Qt::dialog);QTranslator QTranslator;QTranslator.load(“Qt”)_“+QLocale::system().name(),QLibraryInfo::location(QLibraryInfo::TranslationPath));这通常是个好建议。虽然我不知道这会如何改变我答案的“已接受”状态——如果系统翻译的Open版本是可接受的,那么最好使用Qt的翻译。如果您想用不同的自定义标签替换它,那么您需要提供自己的翻译。一般回答“您需要安装一个在QFileDialog上下文中翻译和打开的QTranslator”对这两种情况都有效。@mac.ma-您的示例适合我(例如,使用LC_ALL=“de_de.”/qtTest启动会生成一个德语本地化的对话框)。您确定系统上正确安装了qt*.qm文件吗?必须确保转换器没有超出范围。在这种情况下,不应用翻译。我犯了那个错误,一时想知道为什么没有正确的翻译:)