2010-10-27 13 views
6

Estoy tratando de usar archivos de traducción. Revisé todos los procedimientos: creé el archivo ts, lo traduje, pero cuando ejecuto la aplicación, el idioma sigue siendo el mismo que antes.cargando el archivo qm usando QTranslator

He trabajado en el ejemplo de Nokia, al igual que en las instrucciones.

¿Cuál podría ser mi 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

¿Podría escribir el código de una manera más legible, por favor? Me parece un poco difícil de leer así :) –

+0

Lo arreglé. lo siento – sara

+6

¿Es ese su código exacto? Ese primer "si" solo indicará falla si su archivo existe :) Debería ser si (! ...). Entonces su archivo no existe en el directorio ejecutable o el nombre es incorrecto. –

Respuesta

19

¿Dónde se encuentran los archivos .qm? Su código está intentando cargar el archivo desde el directorio de trabajo actual, que puede ser cualquier cosa durante el tiempo de ejecución. Especificar una ruta de directorio en la llamada a QTranslator::load:

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

Las traducciones se pueden cargar desde Qt resources, por lo que es una buena idea para unirlos dentro de los ejecutables. De allí tendría que cargar algo como esto:

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

Basado en el ejemplo, puede que simplemente puede hacer esto:

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

Esperamos que se puede arreglar el problema!

Nota 1: Ningún puntero aquí.
Nota 2: No hay extensión en su nombre de archivo.

+1

Su "Nota 1" es irrelevante. De hecho, puede ser una fuente de problemas si el objeto QTranslator no se crea en el método main(). – chalup

+1

"Nota 2" es irrelevante también. QTranslator :: load hará todo tipo de magia para localizar un archivo de traducción apropiado. Eso incluye desconocer el sufijo (de forma predeterminada, ".qm") al buscar el archivo. – andref

+0

@andref, bueno, no estaba seguro :) –

-1

pasos básicos de cómo conseguir la localización en Qt se proporciona en este link

espero que sería de gran ayuda para usted.

3

La respuesta ya fue dada en un comentario, pero quiero señalarlo claramente.

El primer aviso utiliza una condición equivocada:

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

que debe ser:

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

Dado que sólo vio la segunda advertencia, pero no el primero, el problema es de hecho que la archivo no fue encontrado Asegúrese de que el directorio de trabajo sea lo que espera que sea o (mejor) use el sistema de recursos como lo explica andref.

Cuestiones relacionadas