Qt 國際化小結

2021-10-24 19:46:26 字數 3649 閱讀 1323

通過qt linguist翻譯應用程式執行ludata工具,提取要翻譯的文字,生成.ts檔案,這個檔案是xml格式的。

開啟qt linguist進行翻譯。

執行lrelease工具,生成.qm檔案,這個乙個根據.ts生成的檔案,供我們翻譯時使用。這裡的.ts.qm均與平台無關。

.pro

translations +

= cn.ts

translations +

= en.ts

.h

#ifndef mainwindow_h

#define mainwindow_h

#include

#include

namespace ui

class

mainwindow

:public qmainwindow

;#endif

// mainwindow_h

.cpp

#include

"mainwindow.h"

#include

"ui_mainwindow.h"

#include

"qdebug"

mainwindow::

mainwindow

(qwidget *parent)

:qmainwindow

(parent),ui

(new ui::mainwindow)

mainwindow::

~mainwindow()

void mainwindow::

changeevent

(qevent* event)

// qwidget::

changeevent

(event);}

void mainwindow::

on_combobox_activated

(int index)

if(index ==1)

}

主要邏輯如下:

translator.

load

("***.qm");

>

installtranslator

(&translator )

;

ui-

>

retranslateui

(this

);

若存在待翻譯的combox,很快我們就發現,原先選擇的內容在翻譯後又變成了首項。

問題出現在retranslateui()中,上文我們使用的是ui->retranslateui(this);它位於ui_mainwindow.h中,關於combox的翻譯其實現如下:

combobox-

>

clear()

;combobox-

>

insertitems(0

,qstringlist()

translate

("mainwindow"

,"english"

, q_nullptr)

translate

("mainwindow"

,"\344\270\255\346\226\207"

, q_nullptr)

);

原來預設使用的是將combox清空再新增可選項的做法。怪不得每次currindex都會丟失。

解決的方法也很簡單,我們自己實現retranslateui(),增加currentindex變數儲存combox當前選中的狀態。

void mainwindow::

retranslateui()

毫無疑問這必須將語言資訊儲存到本地。本處採用 qsetting。

void mainwindow::

closeevent

(qcloseevent *event)

//讀取語言設定

int index;

qsettings settings

("fsf"

,"test");

settings.

begingroup

("mainwindows");

index = settings.

value

("language",0

).toint()

;settings.

endgroup()

;if(index ==0)

if(index ==1)

題外話也可以根據系統環境來進行語言設定;獲取本地語言環境的方法如下:

qlocale::

system()

.name

()

對於類似ctrl+q之類的加速鍵,如果採用硬編碼qt::ctrl+qt::key_q,那麼翻譯無法將它們覆蓋。正確的習慣用法為:

//建立動作

exitact =

newqaction(tr

("e&xit").

this);

//設定快捷鍵

exitact-

>

setshortcuts

(qkeysequence::quit)

;

對於有些待翻譯的字串,若其中含有變數不需要翻譯則需要使用該方式:

qmessagebox::

information

(null,tr

("path"),

tr("you selected\n%1").

arg(path));

qmessagebox::

information

(null,tr

("path"),

"you selected\n"

+ path)

;

需要在類定義時使用q_declare_tr_functions巨集:

class

myclass

僅需在其他介面中重寫changeevent,呼叫retranslateui更新文字即可。

QT國際化 小結

qt應用程式的國際化問題,應該總的來說還是比較容易的,如果你原始碼中沒有使用漢字,直接使用英文,這個問題就不大,下面我講的是通過在原始碼中直接使用中文 就是本地化了的 然後把中文翻譯成別的文字而言的 例如加密文字 大致分這麼幾個步驟,基本與對英文進行國際化的步驟差不多 這裡是針對windows平台的...

QT國際化支援

為了是我們的qt程式支援如中文等其他語言,通常的做法是在需要翻譯的地方顯示的用tr標記,所以你在閱讀其他人編寫的源程式時會看到很多字串做了tr標記,這樣做是有原因的。1.在hello.pro檔案中增加 translations hello zh cn.ts 2.進入工程目錄,執行 lupdate h...

qt國際化程式設計

下面說一下qt國際化程式設計的操作步驟 1 編寫源 2 在 pro檔案中新增translations ts 有多少中語言就新增多少個ts檔案。3 執行lupdate pro 生成ts檔案。lupdate會根據源 中的內容提取出待翻譯的字段,然後生成ts檔案,ts檔案是xml格式的。4 用qt lin...