2025年1月6日 星期一

Qt 中實現多國語言

在 Qt 中實現多國語言支持(即國際化和本地化,通常簡稱 i18n 和 l10n)是通過使用 tr() 函數來標記可翻譯的文本,以及使用翻譯文件(.ts)和翻譯工具來處理不同語言版本的應用程序。這樣可以讓應用程序在不同的語言環境中運行時顯示適當的文本。

以下是如何在 Qt 程式中處理多國語言的步驟:

1. 使用 tr() 函數標記可翻譯的文本

tr() 是 Qt 提供的函數,用來標記應該被翻譯的字符串。這些字符串將被提取並放入翻譯文件中。

例如:

QLabel *label = new QLabel(tr("Hello, world!"));

在這裡,tr("Hello, world!") 標記了字符串 "Hello, world!" 為可翻譯的文本。

2. 使用 lupdate 提取可翻譯文本

當您編寫了程序並且標記了所有可翻譯的文本後,需要使用 Qt 的工具 lupdate 來提取這些文本並生成翻譯文件。

在 Qt 的項目根目錄中運行以下命令:

lupdate your_project.pro

這將掃描您的源代碼並提取出所有使用 tr() 函數標記的字符串。然後它會生成一個 .ts 文件,該文件將包含所有需要翻譯的字符串。

3. 翻譯文件 .ts

翻譯文件 .ts 是 XML 格式的,包含原始文本和翻譯文本。這些文件通常是根據語言生成的。例如,en_US.ts 是英文的翻譯文件,zh_CN.ts 是簡體中文的翻譯文件。

可以使用 Qt 的 Linguist 工具來打開 .ts 文件,進行翻譯。

  • 打開 Linguist(通常安裝了 Qt 的開發工具後可以找到)。
  • 載入 .ts 文件。
  • 為每個原始字符串添加翻譯。

翻譯文件的一個例子可能如下所示:

<!DOCTYPE TS><TS version="2.1" language="en_US">
<context> <name>MainWindow</name> <message> <location filename="main.cpp" line="23"/> <source>Hello, world!</source> <translation>Hello, world!</translation> </message> </context> </TS>

在這個例子中,<source> 標籤包含原始文本,而 <translation> 標籤包含翻譯文本。

4. 編譯翻譯文件

當您完成翻譯後,需要將 .ts 文件編譯為二進制的 .qm 文件,這是 Qt 應用程序運行時加載的翻譯文件。

使用 lrelease 工具編譯 .ts 文件:

lrelease your_project.pro

這將生成 .qm 文件。每個 .ts 文件都會對應一個 .qm 文件,並且 .qm 文件是應用程序運行時加載的翻譯文件。

5. 加載翻譯文件

在您的 Qt 程式中,需要加載相應語言的翻譯文件。這是通過 QTranslator 類來完成的。

例如,若要加載簡體中文的翻譯,可以這麼做:

QTranslator translator;
if (translator.load("zh_CN.qm", ":/translations")) { QApplication::installTranslator(&translator); }

這樣,Qt 就會加載 "zh_CN.qm" 這個翻譯文件並應用它。如果用戶的語言設置為簡體中文,則界面將顯示中文文本。

6. 根據語言環境動態切換語言

您可以在運行時根據用戶的選擇動態切換語言。這通常會在應用程序的設置界面中實現,當用戶選擇不同語言時,程序會重新加載相應的翻譯文件。

例如:

void MainWindow::changeLanguage(const QString &language)
{ QTranslator translator; if (translator.load(language + ".qm", ":/translations")) { QApplication::installTranslator(&translator); ui->retranslateUi(this); // 重新翻譯 UI 元件 } }

這樣,您可以根據用戶的選擇(例如 "zh_CN""en_US")來加載對應的翻譯文件。

7. 設置語言

您可以根據系統語言或者用戶設置來決定加載哪個翻譯文件。例如,您可以根據操作系統的語言設置自動加載翻譯:

QString language = QLocale::system().name();
QTranslator translator; if (translator.load(language, ":/translations")) { QApplication::installTranslator(&translator); }

這樣會根據系統的語言來選擇適當的翻譯文件。

8. 測試和維護

  • 測試您的多國語言功能,確保翻譯的文本顯示正確,並且不會有任何錯誤或遺漏。
  • 隨著應用程序的發展,您可能會添加新的文本。每次更新源代碼後,都需要使用 lupdate 來提取新的字符串,並在翻譯文件中進行翻譯。

小結

在 Qt 中處理多國語言支持的基本步驟:

  1. 使用 tr() 函數標記可翻譯的文本。
  2. 使用 lupdate 提取翻譯字符串並生成 .ts 文件。
  3. 使用 Linguist 工具翻譯字符串。
  4. 使用 lrelease 編譯翻譯文件生成 .qm 文件。
  5. 在應用中加載翻譯文件並應用於界面。
  6. 根據需要動態切換語言。

沒有留言:

張貼留言