Seite 1 von 1

Kein Sprachenwechsel der QMessageBox Buttons

Verfasst: 23. August 2006 13:40
von Rondor
Habe das Problem das ich mein Sprachemenü dynamisch aufgebaut habe,
so das ein Sprachewechsel während der Laufzeit möglich sein soll.

Code: Alles auswählen

void mainWindow::createLanguageMenu()
{
    QDir dir( qmPath );
    QStringList fileNames = dir.entryList("cras_*.qm");	
    
    for(int i = 0; i < (int)fileNames.size(); i++) {
        QTranslator translator;
        translator.load(fileNames[i], qmPath);	
 
        speach = fileNames[i];
        speach = speach.mid(speach.find('_') + 1);  
        speach.truncate(speach.find('.'));	 
	
        int id = Language->insertItem(tr("&%1 %2").arg(i + 1).arg(speach),
                                          this, SLOT(switchToLanguage(int)));
        Language->setItemParameter(id, i);
    
        if (speach == "English") {
           Language->setItemChecked(id, true);	 
        }
        locales.push_back(speach);			
    }
}
Allerdings werden beim öffnen von einer QMessageBox
die Buttons immer nur die Sprache angezeigt, die die lokale Variable hat.
Der Messagetext wird aber einwandfrei übersetzt.

Code: Alles auswählen

//laden der Übersetzungsdateien
void mainWindow::switchToLanguage( int param )
{
    //qApp->removeTranslator(qtTranslator);
    appTranslator->load("cras_" + locales[param], qmPath);
    qtTranslator->load("qt_" + locales[param], qmPath);

    for(int i = 0; i < (int) Language->count(); ++i) {
        Language->setItemChecked(Language->idAt(i), i == param);
    }
    languageChange();
    
    //qApp->installTranslator(appTranslator);		//Einbinden eigener Übersetzungsdateien
    //qApp->installTranslator(qtTranslator);
}
int ret = QMessageBox::warning( this, "CRAS",
tr( "The document has changed.\n"
"Would you like to save it?"),
QMessageBox::Yes,
QMessageBox::No,
QMessageBox::Cancel);

Verfasst: 23. August 2006 14:12
von Emperor_L0ser
du gehst bei der MessageBox auch über die systemvariablen (QMessageBox::Yes, QMessageBox::No, QMessageBox::Cancel), du kannst es umgehen, indem du:

Code: Alles auswählen

int warning ( QWidget * parent, const QString & caption, const QString & text, const QString & button0Text = QString(), const QString & button1Text = QString(), const QString & button2Text = QString(), int defaultButtonNumber = 0, int escapeButtonNumber = -1 )
benutzt und dort über tr(...); die buttons beschreibst