Projet

Général

Profil

Développement multilingue

(Note: documentation à détailler par le prochain à utiliser cette doc, merci)

Pour que nos logiciels soient traduisibles QT apporte toute une boite à outils. Voici quelques pistes pour les utiliser.

Sources d'informations:

Notes pour les traductions des fichiers conf ou autre:

Dans votre application.cpp (qmainwindow, appli principale appelée juste après le main.cpp)

Il faut ajouter ceci dans le constructeur (exemple avec raconte-moi)

raconte::raconte(QWidget *parent)
    : AbulEduExerciceV0(parent), ui(new Ui::raconteClass)
{
    //Langue
    QString locale = QLocale::system().name().section('_', 0, 0);

    //Un 1er qtranslator pour prendre les traductions QT Systeme
    //c'est d'ailleur grace a ca qu'on est en RTL
    qtTranslator.load("qt_" + locale,
            QLibraryInfo::location(QLibraryInfo::TranslationsPath));
    qApp->installTranslator(&qtTranslator);

    //Et un second qtranslator pour les traductions specifiques du
    //logiciel
    myappTranslator.load("raconte-moi_" + locale, "lang");
    qApp->installTranslator(&myappTranslator);

    ui->setupUi(this);

Avec bien entendu dans raconte.h les déclarations ad-hoc

private:
    QTranslator qtTranslator;
    QTranslator myappTranslator;

Et dans la fonction qui permet de changer de langue

/**
* Changer la langue de l'interface
*/
void raconte::on_actionLanguage_triggered()
{
    bool ok;
    QStringList availableLanguages;
    availableLanguages << "ar_AR.UTF-8:" + trUtf8("Arabe")
                       << "en_EN.UTF-8:" + trUtf8("Anglais")
                       << "fr_FR.UTF-8:" + trUtf8("Français");
    availableLanguages.sort();
    QString lang = QInputDialog::getItem(this,trUtf8("Choix de la langue de l'interface"),
                                         trUtf8("Langue"), availableLanguages,0,false, &ok);
    if (ok && !lang.isNull())
    {
        qApp->removeTranslator(&qtTranslator);
        qApp->removeTranslator(&myappTranslator);

        //Un 1er qtranslator pour prendre les traductions QT Systeme
        //c'est d'ailleur grace a ca qu'on est en RTL
        qtTranslator.load("qt_" + lang, QLibraryInfo::location(QLibraryInfo::TranslationsPath));
        qApp->installTranslator(&qtTranslator);

        //foreach (QWidget *widget, QApplication::allWidgets()) widget->setLayoutDirection(Qt::RightToLeft);
        //Et un second qtranslator pour les traductions specifiques du
        //logiciel
        myappTranslator.load("raconte-moi_" + lang, "lang");
        qApp->installTranslator(&myappTranslator);
        ui->retranslateUi(this);
    }
}

Dans les outils de dessin de l'interface (.ui)

Il faut penser à cocher les cases "translatable" sur les différents objets de l'interface (menu, étiquettes etc.).

Dans le code source on utilise trUtf8("texte traduisible")

Toute la documentation existe sur la fonction trUtf8 à vous de chercher !

Dans le code source de l'application on peut donner des indices grâce aux commentaires (utilisation du signe ':')

//commentaire normal
//: pour qtlinguist
/* ou commentaire long */
/*: commentaire long pour traducteur */

Extraire les chaines à traduire

Il faut aussi penser à modifier le fichier.pro pour ajouter les entrées pour les langues à traduire :

TRANSLATIONS = lang/calc_oc.ts \
    lang/calc_en.ts

Puis, on extrait les chaines

lupdate-qt4 fichier.pro

C'est l'appel de cette fonction qui crée les fichiers .ts déclarés dans le fichier.pro s'ils n'existent pas encore

Traduire à l'aide de qt-linguist

ici les fichiers de langues occitan et anglais sont prêts à traduire, ils se trouvent dans le répertoire langues/

linguist-qt4

Compiler les fichiers de traduction

lrelease-qt4 fichier.pro
Redmine Appliance - Powered by TurnKey Linux