如果我們在tr()中包裝字符串,我們可以使用語言學家翻譯qt應用程序。下面的例子是動態加載語言的一種方式:動態Qt字符串轉換
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();
}
我想要做的是根據用戶偏好來轉換不同的語言。原因是我有一臺服務器需要處理具有不同語言的客戶端請求。讓整個服務器/進程通過每個請求事件改變語言並不合適。因此,我對dynamic translation對的反應不感興趣。我感興趣從而
有一件事是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);
}
如果我必須使用一些自定義宏的,那麼它微塵是!
編輯:基本上我想從翻譯者那裏得到一個特定的翻譯字符串。
處理語言更改事件有什麼問題? – 2011-04-09 15:31:53
這是處理多個請求的服務器進程。如果我真的想強迫一個藉口,我可以說我正在使用多個線程;)。從技術上講,當只需要翻譯一段字符串時,通過所有對象傳播一個QEvent似乎是一種矯枉過正的行爲。想象一下,如果我想在'OnHandleRequest'中將兩個字符串翻譯成兩種不同的語言 – 2011-04-09 15:40:41