2015-07-03 35 views
0

沒有顯示這是我的QML代碼:工程英語的UI

Text { 
    id: helloText 
    //: Hello World text 
    //% "Hello World" 
    //~ Context No specific context 
    text: qsTrId("hello-world-id"); 
    anchors.top: parent.top 
} 

從Qt文檔here摘錄:

您在用戶界面開發中看到的「輪機英語」的文字構建用//%註釋表示。如果您不包含此內容,則文本ID將顯示在用戶界面中。

當我運行該應用程序時,我看到hello-world-id而不是Hello World,如文檔中所述。我在這裏錯過了什麼嗎?

在此先感謝。

+0

你加載生成的翻譯文件? – peppe

+0

@peppe我認爲我們不會爲開發構建翻譯文件。我錯了嗎? – ramtheconqueror

回答

2

首先,你必須創建.ts文件與翻譯的字符串。例如,如果我想創建翻譯爲俄語語言環境,我做的:

lupdate main.qml -ts your_project_ru_RU.ts

如果你有幾個QML文件,您可以在.pro文件中指定:

lupdate_only { 
    SOURCES = main.qml \ 
       foo.qml 
} 

和這麼寫:

lupdate your_project.pro -ts您_project_ru_RU.ts

該命令將爲俄語語言環境創建非翻譯文件,您必須使用QT語言學家翻譯來打開該翻譯文件。

可以在.pro文件中指定.ts文件:

TRANSLATIONS += your_project_ru_RU.ts 

所有你所編譯的文件(文件/在Qt語言編譯)之後。這將創建your_project_ru_RU.qm

最後,你必須在main.cpp加載.qm文件,例如:

QTranslator translator;  
translator.load("your_project_" + QLocale::system().name()); 
app.installTranslator(&translator); 

更新:

如果你需要Qt的國際化引擎的一些外表,但不提供qm文件:

foo.qml

import QtQuick 2.4 
import QtQuick.Window 2.2 
import "i18n.js" as I18n 

Window { 
    Text { 
     text: I18n.myTr("text-id"); 
     anchors.centerIn: parent 
    } 
} 

i18n.js

var texts = { 
    "text-id": "Hello, World!", 
    "another-text-id": "Goodbye, World!" 
} 

function myTr(textid) { 
    return texts[textid] ? texts[textid] : ""; 
} 
+0

感謝您的回答。這是爲了實現完整的本地化。我的問題是「如何查看工程文本而不是字符串ID」?例如:如果你使用'button-> setText(tr(「Hello World」));'它會在按鈕上顯示'Hello World'。但是使用'button-> setText(qtrId(「hello-world-id」));'顯示'hello-world-id'而不是'Hello World',這是工程英語(添加了'//%「Hello世界「''。謝謝。 – ramtheconqueror

+0

好的,我看到你有點誤解了。從Qt的幫助:'使用文本ID進行本地化的過程與純文本的過程基本相同',上面提供的所有註釋都是爲了簡化Qt Lunguist。 ''%'是文本模式,但不是文本本身,您仍然必須按照上面所述創建'ts'文件,將其翻譯幷包含到您的應用程序。註釋的含義是您不能在'qtrId )',例如在'qsTr(「Hello,%1」)''中,你只能傳遞一個'id'。 – folibis