====== Tradurre le le applicazioni Qt ====== Autore: **//Fabio Di Matteo//** \\ Ultima revisione: **//21/06/2013//** \\ \\ Qt dispone di un ottimo sistema per internazionalizzare le applicazioni.Vedremo in questa guida come funziona. In linea di principio possiamo dire che con qt le traduzioni avengono mediante 2 fasi distinte, la scrittura del file sorgente delle traduzioni **(.ts)** e la sua successiva "compilazione" in una ltro formato **(.qm)**. \\ Per essere tradotte le nostre qstring all'interno del codice devono essere contenute nella funzione **tr("mia stringa")**, se invece usiamo qtcreator questa operazione verra' gia eseguita dal disegnatore dell'interfaccia. ===== Configurazione del progetto ===== Come prima cosa elenchiamo nel nostro file progetto l'elento delle traduzioni ts che poi verranno compilate in .qm (in questo caso solo quella italiana) aggiungendo la seguente riga al file del progetto: TRANSLATIONS = logout-it_IT.ts Per completezza mostro tutto il file del progetto: QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = logout TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui TRANSLATIONS = logout-it_IT.ts ===== Generare il file ts ===== Per generare il file .ts lanciamo il seguente comando dalla cartella del progetto: lupdate Verra' generato il file ''logout-it_IT.ts'' che potremmo editare con Linguist (l'editor delle traduzioni). Il nome (o i nomi) del file viene preso dal file di configurazione del progetto grazie alla riga ''TRANSLATIONS = logout-it_IT.ts'' . ===== Generare il file .qm ===== Possiamo generare il file .qm direttamente da Linguist (File->Release) oppure lanciare il seguente comando dalla cartella del progetto: lrelease ===== Il codice per caricare automaticamente la traduzione ===== Con questo codice viene caricata automaticamente la traduzione in base alla Locale del nostro sistema (in questo caso it_IT). In pratica carico un file .qm formato dal prefisso "logout-" al cui aggiungo la locale del sistema (in questo caso it_IT). Non e' necessario aggiungere l'estensione .qm al file della traduzione da caricare. \\ Con ''a.applicationDirPath()'' prelevo il nome della cartella dove ho deciso di mettere le traduzioni, ovvero la cartella stessa dell'eseguibile. #include "mainwindow.h" //l'header della mia finestra (non importante ai fini della guida) #include #include //per la traduzione #include //per la traduzione #include // per scrivere sullo stdo int main(int argc, char *argv[]) { QApplication a(argc, argv); //Prelevo la "locale" (ex: it_IT) QString locale = QLocale::system().name(); //Carico la traduzione in base alla locale QTranslator* translator = new QTranslator(); //Si deve caricare il file della traduzione italiana 'logout-it_it.qm' // che si trova nella cartella dell'eseguibile. L'estenzione del file .qm si omette if (translator->load("logout-"+locale, a.applicationDirPath() )) { a.installTranslator(translator); }else{ qDebug()<< "No traslations."; } //Mostra la finestra principale dell'applicazione MainWindow w; w.show(); return a.exec(); }