Traduzione intera dell'applicazione da un QDialog



  • Buonasera a tutti,
    mi chiamo Francesco e sono nuovo di qua. Sto realizzando un programma per la Raspberry e volevo farlo in versione inglese e italiano. Ho creato le due finestre che mi servono, ovvero quella principale (QMainWindow) e quella per settare le opzioni tra cui la lingua (QDialog), e volevo capire come fare la traduzione dell'intera applicazione (quindi della QMainWindow e della QDialog) quando clicco ok nella finestra delle opzioni dopo aver settato la lingua che mi interessa. Ho provato a cercare online ma ho trovato solo come cambiare lingua dal menù, ma niente che si riferisse al cambio della lingua di tutto il programma.

    Grazie per l'aiuto



  • Qt ha un sistema di traduzioni integrato. Se tutte le tue stringhe sono parte di un QObject (QMainWindow e QDialog sono QObject) basta mettere tr() intorno a tutte ad esempio:
    label->setText("Ciao"); deve diventare label->setText(tr("Ciao"));

    Una volta fatto questo usa lupdate (e' nella stessa cartella di qmake) per creare il file di traduzione. Copialo tante volte quante lingue vuoi (2 nel tuo caso) e aprirlo con Qt Linguist. Una volta tradotto tutto basta usare lrelease per generare i file di traduzione usabili con QTranslator
    Per cambiare linqua ti bastera' chiamare QCoreApplication::removeTranslator() e QCoreApplication::installTranslator()

    Il manuale delle traduzioni e' disponibile qui: http://doc.qt.io/qt-5/qtlinguist-index.html



  • Grazie VRonin, ho già provato a fare ciò, ma l'applicazione non cambia lingua, devo riavviare l'applicazione per vedere cambiata la lingua.
    Non c'è un comando che faccia un refresh di tutte le finestre in modo che cambi lingua a tutte?



  • se hai creato le finestre con l'editor grafico di Qt Creator (files .ui) è relativamente facile. basta che in ogni widget reimplementi il changeevnt così:

    void changeEvent(QEvent* event)
    if (event->type() == QEvent::LanguageChange)
    ui->retranslateUi(this);
    QWidget::changeEvent(event);
    }
    


  • Dopo un paio d'ore a smanettarci ci sono riuscito a metà, ovvero da italiano a inglese le finestre cambiano lingua (e già questo è un grosso passo avanti e ti ringrazio dell'aiuto), ma da inglese a italiano non ne vuole sapere di ritornare alla lingua originaria, devo chiudere e riaprire l'applicazione. Penso sia un problema di load del file per la lingua italiana, però la scrittura del codice è uguale per entrambe le lingue quindi non so da cosa possa dipendere (magari sto sbagliando proprio nel scrivere il codice)



  • Puoi postare come carichi/scarichi il translator e come refreshi le stringhe?



  • Ho trovato l'errore, QTranslator non mi caricava il file qm, non so per quale motivo ma l'ho rifatto e adesso funziona.
    Grazie ancora per l'aiuto ;)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.