2010-10-27 15 views
6

Sto cercando di utilizzare i file di traduzione. Ho esaminato tutte le procedure: creato file ts, tradotto, ma quando eseguo l'applicazione, la lingua è sempre la stessa di prima.caricamento del file qm con QTranslator

Ho lavorato all'esempio Nokia, proprio come nelle istruzioni.

Quale potrebbe essere il mio problema?

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

Potresti scrivere il codice in un modo più leggibile per favore? Lo trovo un po 'difficile da leggere in questo modo :) –

+0

l'ho risolto. scusa – sara

+6

È il tuo codice esatto? Quel primo "se" indicherà solo il fallimento se il tuo file esiste :) Dovrebbe essere se (! ...). Quindi il tuo file non esiste nella directory eseguibile o il nome non è corretto. –

risposta

19

Dove si trovano i file .qm? Il tuo codice sta tentando di caricare il file dalla directory di lavoro corrente, che può essere qualsiasi cosa durante il runtime. Specificare un percorso di directory nella chiamata a QTranslator::load:

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

traduzioni possono essere caricati da Qt resources, quindi è una buona idea di raggruppare al loro interno i vostri eseguibili. Poi si dovrebbe caricare un po 'come questo:

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

Sulla base di questo esempio, si può semplicemente provare questo:

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

auguriamo che possa risolvere il problema!

Nota 1: nessun puntatore qui.
Nota 2: Nessuna estensione nel nome file.

+1

La "Nota 1" è irrilevante. In effetti può essere una fonte di problemi se l'oggetto QTranslator non viene creato nel metodo main(). – chalup

+1

Anche "Nota 2" è irrilevante. QTranslator :: load eseguirà tutti i tipi di magia per individuare un file di traduzione appropriato. Ciò include la disconoscimento del suffisso (di default, ".qm") durante la ricerca del file. – andref

+0

@andref, d'accordo, non ne ero sicuro :) –

-1

passi di base di come ottenere una localizzazione in Qt sono fornite in questo link

speranza che sarebbe utile per voi.

3

La risposta è stata data in un commento, ma voglio farlo notare chiaramente.

Il primo avviso utilizza una condizione sbagliata:

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

dovrebbe essere:

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

Dal momento che si è visto solo il secondo avvertimento, ma non il primo, il problema è, infatti, che il il file non è stato trovato. Assicurati che la directory di lavoro sia quella che ti aspetti o (meglio) usa il sistema di risorse come spiegato da andref.