2012-02-10 7 views
11
#include<QApplication> 
#include<QTranslator> 
#include<QObject> 
#include<QTextCodec> 
#include<QWidget> 

int main(int argc, char* argv[]) 
{ 
    QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale()); 
    QApplication app(argc, argv); 

    QTranslator translator; 
    translator.load("app_zh_CN.qm"); 
    app.installTranslator(&translator); 

    QWidget widget; 
    widget.setWindowTitle(QObject::tr("Hello World!")); 
    widget.show(); 
    return app.exec(); 
} 

QTranslator non funziona

SOURCES += \ 
    main.cpp 

TRANSLATIONS += app_zh_CN.ts 

L'interfaccia GUI è "Ciao Mondo!" anche .. Ma nel mio file.qm è traduci in "你好!" (cinese) ... dov'è l'anteprima? chi può aiutarmi ..

+2

'translator.load()' restituisce un bool. Restituisce vero o falso per te? –

+0

@Arnold Spence: Grazie .. il valore restituito è falso ... Cosa c'è che non va? –

+0

Prova a seguire le istruzioni fornite da @Dave Mateer nella sua risposta :) –

risposta

19

L'esempio funziona per me se inserisco il file .qm nel punto "corretto". (Vedi sotto). Assicurarsi che si sta facendo tutti i passaggi:

  1. Run lupdate per creare il file .ts.
  2. Esegui la tua traduzione in linguista e salva il file .ts.
  3. Eseguire lrelease per compilare il file .ts in un file .qm.
  4. Copiare il file .qm nella posizione corretta.

La mia ipotesi è che il # 4 stia andando male. La documentazione per QTranslator::load afferma:

Se directory non è specificato, la directory del eseguibile dell'applicazione viene usato (vale a dire, come applicationDirPath()).

Tuttavia, ho dovuto mettere il file nella cartella .qm sopra l'eseguibile per farlo funzionare così com'è. A meno che non abbia frainteso i documenti, questo è un bug di Qt, ma è semplice da risolvere. Se ho dato esplicitamente la directory come app.applicationDirPath, ha funzionato nella cartella eseguibile. Puoi anche specificare una directory separata. Per esempio:

translator.load("app_zh_CN.qm"); opere con:

[MyApp] 
    app_zh_CN.qm 
    [debug] 
    MyApp.exe 

translator.load("app_zh_CN.qm", app.applicationDirPath()); funziona con:

[MyApp] 
    [debug] 
    app_zh_CN.qm 
    MyApp.exe 
+0

Grazie per avermi aiutato ... –