Du côté du développeur

Le principe est relativement simple : Qt Creator va générer un fichier .ts que vous modifierez, puis il se chargera de le mettre dans le bon format pour votre application.

Pour commencer, toutes les chaînes de caractères qui devront être traduites doivent être appelées à l'aide de la fonction tr() :

QString texte = "Error while trying to save the configuration file:";
// doit être modifié tel que :
QString texte = tr("Error while trying to save the configuration file:");

tr() (plus d'infos) reçoit un argument obligatoire qui est la phrase ou le mot à traduire. Il est possible d'ajouter un second argument qui servira aux traducteurs pour spécifier le contexte ; par exemple pour expliquer les arguments ou s'il s'agit d'un bouton "Ok" ou du mot "Ok" pour dire "Ouais" ou "Oui" (mauvais exemple mais va falloir faire avec).

Voici quelques exemples concrêts :

tr("Error while trying to save the configuration file:");
tr("Done %1/100 ...").arg(percent);
tr("[%1] Done %2/100 ...", "Percent advancement: [file number] Done xx/100 ...").arg(file_number, percent);

On peut mettre autant de %1, %2, %3 que l'on souhaite, il s'agit de l'ordre des arguments donnés par arg().

Vous aurez remarqué que j'ai mis les phrases en anglais, c'est pour ne pas avoir de surprises avec les accents sur les systèmes casse-couilles. Et puis de toute manière elles seront traduites par la suite :)

Une fois toutes les phrases mises en évidence, il suffit de modifier le fichier .pro de votre projet et d'ajouter cette ligne tout en bas :

TRANSLATIONS = i18n/fr_FR.ts

Ceci veut dire que les fichiers de traduction (ici je n'ai mis que le français pure souche) seront placés dans le dossier i18n. Il est possible de générer plusieurs fichiers de traduction :

TRANSLATIONS = i18n/fr_FR.ts i18n/fr_CA

Passons à la génération des fichiers, dans Qt Creator faîtes « Outils > Externe > Linguist » puis sélectionnez « Mettre à jour les traductions (lupdate) ». Si les fichiers n'existent pas, ils seront créés automatiquement.


Du côté des traducteurs

Le principe est on ne peut plus simple ! Les fichiers .ts sont de simple fichiers XML :

<message>
	<location filename="../mainwindow.ui" line="26"/>
	<source>Error while trying to save the configuration file:</source>
	<translation type="unfinished"></translation>
</message>

Il suffit d'envoyer le fichier .ts au traducteur qui, à l'aide d'un logiciel simplissime tel que Qt Linguist ou d'un simple traitement de texte tel que Sublime Text, Geany ou encore SciTE, n'aura qu'a entrer ses phrases traduites.

Dans la ligne translation (dans le code plus haut), par défaut le type est unfinished, normal la phrase n'a pas été traduite. Il est possible de mettre ignored, comme ça l'application gardera la phrase originale. Lorsque la phrase est traduite, supprimez type="unfinished".

C'est tout, une fois terminé, le traducteur renvoie le fichier .ts au développeur. On y est presque ;)


Phase finale

Dans Qt Creator faîtes « Outils > Externe > Linguist » puis sélectionnez « Publier les traductions (lrelease) ». De nouveaux fichiers sont créés : fr_FR.qm et fr_CA.qm.
Ce sont les fichiers finaux.

La dernière étape consiste à mettre en place le système de traduction :

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("UTF-8"));  // ligne 4

    QTranslator translator;
    translator.load(QString("%1/i18n/%2.qm")
            .arg(app.applicationDirPath())
            .arg(QLocale::system().name()));
    app.installTranslator(&translator);

    MainWindow w;
    w.show();
    return app.exec();
}

load() (plus d'infos) prend en 1er argument la locale du système (du genre fr_FR, fr_CA, en_US) et le 2ème (optionnel) le dossier dans lequel trouver les fichiers de traduction.
Notez la ligne 4 : pour la prise en compte correcte des accent, elle est indispensable.

Voilà ! Exécutez votre application et admirez les jolies fautes d'ortographe :)

Pour plus de détails : Traduire son programme avec Qt Linguist.