Barra laterale

programmazione:qt:tradurre_le_applicazioni

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 <QApplication>
#include <QTranslator> //per la traduzione
#include <QLocale>     //per la traduzione
#include <QDebug>      // 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();
}

programmazione/qt/tradurre_le_applicazioni.txt · Ultima modifica: 18/04/2018 - 15:48 (modifica esterna)