2010-10-27 81 views
6

我正在嘗試使用翻譯文件。我經歷了所有的程序: 創建ts文件,翻譯它,但是當我運行應用程序時,語言仍然和以前一樣。使用QTranslator加載qm文件

我使用諾基亞示例,就像在說明中一樣。

可能是我的問題?

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

請問您能否以更易讀的方式編寫代碼?我覺得有點難以閱讀:) – 2010-10-27 14:11:10

+0

我修正了它。對不起 – sara 2010-10-27 14:33:49

+6

是你的確切代碼嗎?如果你的文件存在,那麼第一個「if」只會表示失敗:)應該是if(!...)。因此,您的文件或者不存在於可執行文件目錄中,或者名稱不正確。 – 2010-10-27 15:54:21

回答

19

.qm文件位於何處?你的代碼試圖從當前工作目錄加載文件,在運行時可以是任何東西。指定調用的目錄路徑QTranslator::load

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

翻譯可以從Qt resources被加載,所以它是捆紮在一起的可執行文件中是一個好主意。然後你會像這樣加載它們:

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

基礎上的例子,可你只要試試這個:

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

希望這將解決您的問題!

注1:此處沒有指針。
注2:文件名中沒有擴展名。

+1

你的「注1」無關緊要。事實上,如果QTranslator對象不是在main()方法中創建的,它可能是一個問題的來源。 – chalup 2010-10-28 05:14:27

+1

「注2」也無關緊要。 QTranslator :: load會做各種魔術來找到合適的翻譯文件。這包括在搜索文件時忽略後綴(默認爲「.qm」)。 – andref 2010-10-28 19:41:20

+0

@andref,好吧,不知道:) – 2010-10-28 20:15:53

-1

如何實現本地化Qt的基本步驟在此link

提供希望這將是對你有幫助。

3

答案已在評論中給出,但我想清楚地指出。

的第一個警告使用錯誤的條件:

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

它應該是:

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

既然你只看到第二個警告,但不是第一位的,問題是確實的文件未找到。確保工作目錄是您期望的工作目錄,或者(更好地)使用資源系統,詳情請參閱andref。