user@linuxtrack:~ $ python -c 'print("Soyez les bienvenus !")'

Vous n'êtes pas identifié(e).

#1 05-02-2014 23:12:56

caymus
Membre

Gestion multilangues de l' application suivant les locales de l' user

Nous allons prendre un exemple tres basique, en creant un nouveau projet, via File->New File or Project->Other Project->Empty Qt Project.

Creation d' un widget avec un boutton se nommant "Fermer" et un autre "Ouvrir" traduit dans plusieurs langues, rien de plus.

Pour se faire nous auront besoin de:

#include <QTranslator>

Le but etant uniquement de comprendre comment faire des application multilangues automatiques suivant la configuration des locales de langues de l' utilisateur.
Nous partiront d' un projet vierge sans interferances avec le .ui du designer graphique

au depart votre projet viege devrait ressembler à ceci:

votre-projet.pro

On va ajouter un "main.cpp" et tou faire dedans (c' est pas la bonne pratique mais vu la taille minuscule du projet, on va pas s' embeter.

Pour ce faire on click droit sur la racine du projet et on selectione "Add New"
Section Files and Classes on choisis C++ -> C++ Source File et on va le nomer betement "main.cpp"

on le selectione:
Il est vide le bougre... C' est normal.

Bon nous allons avoir besoin de plusieurs class:
Vous trouverez de la doc en passant sur chaque class et en appuyant sur F1, Je ne vous les decrirez pas ici

#include <QApplication> // On en a besoin c'est le minimum
#include <QPushButton> // On veut des bouttons
#include <QHBoxLayout> // Il faut une Box pour placer les widgets, nottament des bouttons qui sont aussi des widgets, celle ci place les bouttons horizontalement, d' autres existent verticales ou en grilles notament, et on peut les combiner.

Nous allons creer un widget et 2 bouttons placé un à coté de l' autre nomé respectivement "Fermer" et "Ouvrir" dans main.cpp

votre-projet.pro (le nom de votre projet et diverses options dont on reparlera une autre fois)
main.cpp

#include <QApplication>
#include <QPushButton>
#include <QHBoxLayout>


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);


    QWidget *window = new QWidget;
    window->setWindowTitle("Ma-fenetre");


    QPushButton *close = new QPushButton("Fermer");
    QPushButton *open = new QPushButton("Ouvrir");
 

    QHBoxLayout *horizontal = new QHBoxLayout;
    horizontal->addWidget(close);
    horizontal->addWidget(open);

    window->setLayout(horizontal);
    window->show();

    return a.exec();
}

Voila 2 jolis bouttons ne fesant absolument rien.

Ensuite on va se focaliser sur la translation automatique, L' ideal est de comparer dans un editeur de texte ou mieux un ide, se qui a ete rajouté

votre-projet.pro
main.cpp

#include <QApplication>
#include <QPushButton>
#include <QHBoxLayout>
#include <QTranslator>
#include <QLibraryInfo>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

//DEBUT DE PARTIE AJOUTEE

    QString locale = QLocale::system().name();  //On va transformer en QString les "langues" locales des systems d' exploitation

    QTranslator qtTranslator;
    qtTranslator.load("qt_" + locale,
            QLibraryInfo::location(QLibraryInfo::TranslationsPath));
    app.installTranslator(&qtTranslator);

    QTranslator myappTranslator;
    myappTranslator.load(QString("votre-projet_") + locale);  //on a besoin de ceci car les fichier de translation seront nomé "votre-projet_XX.ts" ou XX represente les locales (fr, de , uk , pl ,nl , es etc etc) (case sensitive)
    app.installTranslator(&myappTranslator);

//FIN DE PARTIE AJOUTEE

    QWidget *window = new QWidget;
    window->setWindowTitle("Ma-fenetre");


    QPushButton *close = new QPushButton("Fermer");
    QPushButton *open = new QPushButton("Ouvrir");
 

    QHBoxLayout *horizontal = new QHBoxLayout;
    horizontal->addWidget(close);
    horizontal->addWidget(open);

    window->setLayout(horizontal);
    window->show();

    return a.exec();
}

il ne reste plus qu' a utiliser "tr" sur vos "QString" c' est à dire par exemple

window->setWindowTitle("Ma-fenetre"); //devient
window->setWindowTitle(tr("Ma-fenetre"));

QPushButton *close = new QPushButton("Fermer"); //devient
QPushButton *close = new QPushButton(tr("Fermer"));

QPushButton *open = new QPushButton("Ouvrir"); //devient
QPushButton *open = new QPushButton(tr("Ouvrir"));

le tr servant de balise pour que "QTranslator" puisse remplacer à la volée les QStrings de l application compilée par ceux present dans les fichiers "votre-projet_nl.ts" par exemple que l on va generer dans la partie qui suit.

à continuer ...

Dernière modification par caymus (06-02-2014 01:23:14)

Hors ligne

Pied de page des forums