pyqt多國語言

來源:互聯網
上載者:User

qt在設計的時候就考慮到了多國語言應該如何處理, 原理以及使用方法很簡單. 如下:

第一步: 寫代碼的時候, 對於需要翻譯的詞語, 用tr()包起來, 比如:

QPushButton hello(QPushButton::tr("Hello world!"));

這樣qt就知道這些詞語是需要翻譯的了. 然後qt需要把這些詞語取出來, 放到一個檔案裡面去, 好進行下一步的翻譯工作.

在你的pro檔案裡面說明這個檔案的名稱:

TRANSLATIONS    = clabel_zh_CN.ts

這樣就可以利用lupdate這個工具來把需要翻譯的詞語取出來:

lupdate-qt4 clabel.pro

然後, 我們就可以開始翻譯工作了. qt提供了一個配套的翻譯工具: linguist:

linguist-qt4 clabel_zh_CN.ts

其實ts檔案是xml的格式, 你想直接編輯文本也是可以的.

當做完翻譯工作之後, 我們需要把ts檔案編譯一下, 方便程式使用:

lrelease-qt4 clabel_zh_CN.ts

這樣就會產生clabel_zh_CN.qm. 最後, 在代碼裡面加上選擇語言的代碼:

QTranslator trans;trans.load("clabel_zh_CN");app.installTranslator(&trans);QPushButton hello(QPushButton::tr("Hello world!"));hello.show();app.exec();

qt多國語言更詳細的介紹在: http://doc.qt.nokia.com/4.6/i18n-source-translation.html pyqt下面如何?多國語言

pyqt裡面實現的過程和qt裡面的類似, 只是因為第一步需要掃描的不是c++代碼, 所以需要利用一個pyqt的工具: pylupdate4, 用法和lupdate一樣.

首先寫程式

trans = QTranslator()trans.load('plabel_zh_CN')app.installTranslator(trans)button = QPushButton(tr("hello world!"))button.show()

等等, 裡面的tr是什麼?

def tr(msg):    return QCoreApplication.translate("@default", msg)

qt翻譯是根據類的名稱來走的, 調用了什麼類的tr, 就取這個類裡面設定的翻譯.

qt裡面是可以利用QObject::tr來翻譯, 但是pyqt裡面不能,pylupdate4隻是做字串尋找, 看有什麼字串是在tr後面的, 然後根據tr調用者來把這個詞語歸類, 如果沒有調用者, 就把它歸類到 "@default" 裡面. 於是我就只好利用上面的方法來做一個規避..有點噁心, 看看以後是否會有更好的方法來處理.

對於類裡面的翻譯, 不需要那麼麻煩:

class Input(QWidget):    def __init__(self):        super(Input, self).__init__()        label = QLabel(self.tr("input:"))

這裡面的tr, 就可以被正確翻譯出來.

然後運行pylupdate, 因為我們是python程式, 沒有pro, 就只能手動指定檔案了

pylupdate4 main.py -ts plabel_zh_CN.ts

好了, 下面的步驟和c++的方法一樣

linguist-qt4 clabel_zh_CN.tslrelease-qt4 plabel_zh_CN.ts

然後執行代碼, 程式按照我們期望的方式翻譯過來了, 是不是很簡單?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.