QTranslator 類提供用於文本輸齣的國際化支持。 更多...
| 頭: |
#include <QTranslator>
|
| CMake: |
find_package(Qt6 REQUIRED COMPONENTS Core)
target_link_libraries(mytarget PRIVATE Qt6::Core)
|
| qmake: |
QT += core
|
| 繼承: | QObject |
| QTranslator (QObject * parent = nullptr) | |
| virtual | ~QTranslator () |
| QString | filePath () const |
| virtual bool | isEmpty () const |
| QString | language () const |
| bool | load (const QString & filename , const QString & directory = QString(), const QString & search_delimiters = QString(), const QString & suffix = QString()) |
| bool | load (const QLocale & locale , const QString & filename , const QString & prefix = QString(), const QString & directory = QString(), const QString & suffix = QString()) |
| bool | load (const uchar * data , int len , const QString & directory = QString()) |
| virtual QString | translate (const char * context , const char * sourceText , const char * disambiguation = nullptr, int n = -1) const |
此類的對象包含一組從源語言到目標語言的翻譯。QTranslator 提供在翻譯文件中查找翻譯的功能。翻譯文件的創建是使用 Qt Linguist .
QTranslator 的最常見用法:加載翻譯文件,並安裝它使用 QCoreApplication::installTranslator ().
這裏是範例
main()
函數在使用 QTranslator:
// Required for using the '_L1' string literal. using namespace Qt::StringLiterals; int main(int argc, char *argv[]) { QApplication app(argc, argv); QTranslator translator; // look up e.g. :/i18n/myapp_de.qm if (translator.load(QLocale(), "myapp"_L1, "_"_L1, ":/i18n"_L1)) QCoreApplication::installTranslator(&translator); QPushButton hello(QCoreApplication::translate("main", "Hello world!")); hello.resize(100, 30); hello.show(); return app.exec(); }
注意:翻譯器必須被創建 before 應用程序的 Widget。
大多數應用程序從不需要對此類做任何其它事情。由此類提供的其它函數對工作於翻譯文件的應用程序很有用。
它是可能的,查找翻譯使用 translate () (作為 tr () 和 QCoreApplication::translate () 做的)。 translate () 函數最多接受 3 參數:
例如,對話框中的 Cancel 可能為 Anuluj (在此情況下,source text 將是 Cancel),當以波蘭語運行程序時。context (通常) 是對話框類名;通常沒有注釋,翻譯文本將是 Anuluj。
但並不總是那麼簡單。帶 two-sided printing (雙麵打印) 和 binding (裝訂) 設置的西班牙語版打印機對話框,可能要求將 Enabled 翻譯成 Activado 和 Activada 兩者。在此情況下,2 案例中的 source text 將是 Enabled,而 context 將是對話框類名,但這 2 項將消除歧義,譬如一個是 two-sided printing,另一個是 binding。disambiguation (消除歧義) 使 translator (翻譯器) 能夠為西班牙語版選擇適當語性,並使 Qt 能夠區分翻譯。
應用程序可以安裝多個翻譯文件。翻譯搜索次序與其安裝次序相反,因此,首先搜索最近安裝的翻譯文件,最後搜索最早安裝的翻譯文件。一旦找到包含匹配字符串的翻譯,就停止搜索。
此機製使 selected 的特定翻譯,或優先於其它翻譯成為可能;隻需從應用程序卸載 translator (翻譯器),通過將它傳遞給 QCoreApplication::removeTranslator () 函數並重新安裝它采用 QCoreApplication::installTranslator ()。那麼,它將是搜索匹配字符串的第一翻譯。
Only install translation files from trusted sources.
Translation files are binary files that are generated from text-based translation source files. The format of these binary files is strictly defined by Qt and any manipulation of the data in the binary file may crash the application when the file is loaded. Furthermore, even well-formed translation files may contain misleading or malicious translations.
另請參閱 QCoreApplication::installTranslator (), QCoreApplication::removeTranslator (), QObject::tr (), QCoreApplication::translate (), I18N 範例 , Hello tr() 範例 , Arrow Pad 範例 ,和 Troll Print 範例 .
[explicit]
QTranslator::
QTranslator
(
QObject
*
parent
= nullptr)
構造空的消息文件對象采用父級 parent 未連接到任何文件。
[virtual noexcept]
QTranslator::
~QTranslator
()
銷毀對象並釋放任何分配資源。
返迴加載的翻譯文件路徑。
文件路徑為空,若尚未加載翻譯 (或加載失敗,若未從文件加載翻譯)。
[virtual]
bool
QTranslator::
isEmpty
() const
返迴
true
若此翻譯器為空,否則返迴
false
。此函數處理剝離和未剝離翻譯文件。
返迴存儲在翻譯文件中的目標語言。
加載
filename
+
suffix
(.qm 若
suffix
未指定),可能是絕對文件名或相對於
directory
。返迴
true
若成功加載翻譯;否則返迴
false
.
若 directory 未指定,使用當前目錄 (即 currentPath ()).
將丟棄此翻譯器對象的先前內容。
若文件名不存在,按以下次序嘗試其它文件名:
例如,以 fr_CA 區域設置 (講法語的加拿大) 運行的應用程序可能調用 load("foo.fr_ca", "/opt/folib")。那麼,Load() 將試著打開來自該列錶的首個現有可讀文件:
/opt/foolib/foo.fr_ca.qm
/opt/foolib/foo.fr_ca
/opt/foolib/foo.fr.qm
/opt/foolib/foo.fr
/opt/foolib/foo.qm
/opt/foolib/foo
通常,最好是使用 QTranslator::load(const QLocale &, const QString &, const QString &, const QString &, const QString &) 函數代替,因為它使用 QLocale::uiLanguages () 而不僅僅是區域設置名稱,指的是日期和數字格式,而不必是 UI 語言。
加載
filename
+
prefix
+
ui language name
+
suffix
(.qm 若
suffix
未指定),可能是絕對文件名或相對於
directory
。返迴
true
若成功加載翻譯;否則返迴
false
.
將丟棄此翻譯器對象的先前內容。
若文件名不存在,按以下次序嘗試其它文件名:
例如,應用程序運行在 locale 采用下列 UI 語言 -es、fr-CA、de 可以調用 load(QLocale(), "foo", ".", "/opt/foolib", ".qm")。load() 將替換 - (短劃綫) 采用 _ (下劃綫) 按 UI 語言,然後試著打開來自此列錶的首個現有可讀文件:
/opt/foolib/foo.es.qm
/opt/foolib/foo.es
/opt/foolib/foo.fr_CA.qm
/opt/foolib/foo.fr_CA
/opt/foolib/foo.fr.qm
/opt/foolib/foo.fr
/opt/foolib/foo.de.qm
/opt/foolib/foo.de
/opt/foolib/foo.qm
/opt/foolib/foo
.
/opt/foolib/foo
在文件係統區分大小寫的操作係統, QTranslator 還會試著加載區域設置名稱的小寫版本。
此函數重載 load()。
加載 QM 文件數據 data 的長度 len 進翻譯器。
不拷貝數據。調用者必須能夠保證 data 不會被刪除 (或修改)。
directory 僅用於指定基目錄,當加載 QM 文件的依賴時。若文件沒有依賴,忽略此自變量。
[virtual]
QString
QTranslator::
translate
(const
char
*
context
, const
char
*
sourceText
, const
char
*
disambiguation
= nullptr,
int
n
= -1) const
返迴翻譯對於鍵 ( context , sourceText , disambiguation )。若未找到,還會嘗試 ( context , sourceText , "")。若仍失敗,返迴 null 字符串。
注意: 不完整翻譯可能導緻意外行為:若沒有翻譯對於 ( context , sourceText , "") 的提供,在此情況下,方法可能實際返迴翻譯對於不同 disambiguation .
若 n 不是 -1,用於選擇閤適翻譯形式 (如 "%n file found" vs. "%n files found")。
若需要以編程方式將翻譯插入進 QTranslator ,可以重實現此函數。
另請參閱 load ().