Si envolvemos cadenas en tr() podemos usar el lingüista para traducir aplicaciones qt. El siguiente ejemplo es una manera de cargar dinámicamente un idioma:Traducción de cadenas Qt dinámicas
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTranslator translator;
translator.load("hellotr_la");
app.installTranslator(&translator);
QPushButton hello(QPushButton::tr("Hello world!"));
hello.resize(100, 30);
hello.show();
return app.exec();
}
Lo que me gustaría hacer es es traducir a diferentes idiomas basados en por ejemplo una preferencia del usuario. La razón es que tengo un servidor que necesita manejar solicitudes de clientes que tienen diferentes idiomas. Tener todo el servidor/proceso cambiando el idioma a través de eventos por solicitud no se siente bien. Por lo tanto, no estoy interesado en el dynamic translation reaccionando a .
Una cosa que me interesó de este modo es la siguiente documentación para QCoreApplication::installTranslator()
archivos de traducción pueden instalar múltiples. Las traducciones se buscan en el orden inverso en el que se instalaron, por lo que el archivo de traducción instalado más recientemente se busca primero y el último archivo de traducción instalado se busca por última vez. La búsqueda se detiene tan pronto como se encuentra una traducción que contiene una cadena coincidente.
Por lo tanto, parece posible cargar varios idiomas, pero mi preocupación es que si tengo varios idiomas no puedo especificar cuál será el idioma preferido. Si tengo que expresar en el código de lo que quiero es algo como esto:
QString MyApplicationServer::OnHandleRequest(MyRequest &r)
{
//Get the language for this specific request
//For example language can be “hellotr_la” or “hellotr_fr”
// Or another way: "lat", "fra", "enu", "esn" ...
QString language = getLanguageForRequest(r);
//How do I dynamically use language or translate to language?
// This would be the preferred solution.
return tr("Not Implemented", language);
}
si tengo que utilizar algunas macros personalizadas, entonces así sea!
Edit: Básicamente me gustaría tener en mis manos una cadena traducida específica de los traductores.
¿Qué pasa con el manejo del evento de cambio de idioma? –
Es un proceso de servidor que maneja múltiples solicitudes. Si realmente quiero forzar una excusa, puedo decir que estoy usando varios hilos;). Técnicamente parece una exageración propagar un QEvent a través de todos los objetos cuando solo se necesita traducir una secuencia. Imagine si quisiera traducir dos cadenas a dos idiomas diferentes en 'OnHandleRequest' –