如果我们在字符串中使用tr(),我们就可以使用语言家来翻译qt应用程序。下面的示例是一种动态加载语言的方法:
我想做的是根据用户的喜好翻译成不同的语言。原因是我有一个需要处理不同语言客户请求的服务器。通过每个请求的事件来改变整个服务器/进程的语言感觉不太合适。因此,我对动态翻译对的反应不感兴趣。
其中一件让我感兴趣的事情是QCoreApplication::installTranslator()的以下文档:
多个翻译文件可以被安装。翻译是按照它们被安装的相反顺序搜索的,所以最近安装的翻译文件首先被搜索,第一个安装的翻译文件最后被搜索。一旦找到包含匹配字符串的翻译,搜索就停止了。
因此,似乎可以加载多种语言,但我的担忧是如果我有多种语言,我不能指定哪种语言是首选语言。如果我必须在代码中表达我想要的东西,就像这样:
如果我需要使用一些自定义宏,那就这样吧!
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();
}
我想做的是根据用户的喜好翻译成不同的语言。原因是我有一个需要处理不同语言客户请求的服务器。通过每个请求的事件来改变整个服务器/进程的语言感觉不太合适。因此,我对动态翻译对的反应不感兴趣。
其中一件让我感兴趣的事情是QCoreApplication::installTranslator()的以下文档:
多个翻译文件可以被安装。翻译是按照它们被安装的相反顺序搜索的,所以最近安装的翻译文件首先被搜索,第一个安装的翻译文件最后被搜索。一旦找到包含匹配字符串的翻译,搜索就停止了。
因此,似乎可以加载多种语言,但我的担忧是如果我有多种语言,我不能指定哪种语言是首选语言。如果我必须在代码中表达我想要的东西,就像这样:
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);
}
如果我需要使用一些自定义宏,那就这样吧!
编辑:基本上我想从翻译人员那里得到一个特定的翻译字符串。
OnHandleRequest
中将两个字符串翻译成两种不同的语言。 - Derick Schoonbee