2010-10-27 11 views
6

J'essaie d'utiliser des fichiers de traduction. Je suis allé à travers toutes les procédures: créé ts fichier, traduit, mais quand je lance l'application, la langue est toujours la même que précédemment.Chargement du fichier qm à l'aide de QTranslator

J'ai travaillé sur l'exemple Nokia, comme dans les instructions.

Quel pourrait être mon problème?

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

    QTranslator* translator=new QTranslator(0); 

    if(QFile::exists("hellotr_la.qm")) 
     qWarning("failed-no file"); 

    if(! translator->load("hellotr_la.qm")) 
     qWarning("failed loading"); //the warning appears **** 

    app.installTranslator(translator); 
} 
+0

Pourriez-vous s'il vous plaît écrire le code d'une manière plus lisible s'il vous plaît? Je trouve cela un peu difficile à lire comme ça :) –

+0

je l'ai réparé. désolé – sara

+6

Est-ce votre code exact? Ce premier "if" indiquera seulement l'échec si votre fichier existe :) Il devrait être if (! ...). Donc, votre fichier n'existe pas dans le répertoire de l'exécutable ou le nom est incorrect. –

Répondre

19

Où se trouvent les fichiers .qm? Votre code tente de charger le fichier à partir du répertoire de travail en cours, ce qui peut être n'importe quoi pendant l'exécution. Spécifiez un chemin de répertoire dans l'appel à QTranslator::load:

QTranslator* translator = new QTranslator(); 
if (translator->load("hellotr_la", "/path/to/folder/with/qm/files")) { 
    app.installTranslator(translator); 
} 

Les traductions peuvent être chargés à partir Qt resources, il est donc une bonne idée de les regrouper dans vos executables. Ensuite, vous chargez un peu comme ceci:

QTranslator* translator = new QTranslator(); 
if (translator->load("hellotr_la", ":/resources/translations")) { 
    app.installTranslator(translator); 
} 
0

Sur la base de l'exemple, vous pouvez essayer simplement ceci:

QTranslator translator; 
translator.load("hellotr_la"); 
app.installTranslator(&translator); 

espère que ça va résoudre votre problème!

Note 1: Pas de pointeur ici.
Note 2: Aucune extension dans votre nom de fichier.

+1

Votre "Note 1" est sans importance. En fait, cela peut être une source de problèmes si l'objet QTranslator n'est pas créé dans la méthode main(). – chalup

+1

"Note 2" n'est pas pertinent non plus. QTranslator :: load fera toutes sortes de magie pour trouver un fichier de traduction approprié. Cela inclut de ne pas tenir compte du suffixe (par défaut, ".qm") lors de la recherche du fichier. – andref

+0

@andref, d'accord, n'était pas sûr à ce sujet :) –

-1

étapes de base de la façon d'obtenir la localisation dans Qt est fourni dans ce link

espère qu'il serait utile pour vous.

3

La réponse a déjà été donnée dans un commentaire, mais je veux le souligner clairement.

Le premier avertissement utilise un mauvais état:

if(QFile::exists("hellotr_la.qm")) 
    qWarning("failed-no file"); 

Il devrait être:

if(!QFile::exists("hellotr_la.qm")) 
    qWarning("failed-no file"); 

Puisque vous ne avez vu le deuxième avertissement, mais pas le premier, le problème est en effet que la le fichier n'a pas été trouvé. Assurez-vous que le répertoire de travail est ce que vous attendez ou (mieux) utilisez le système de ressources comme expliqué par andref.