全球化应用程序

Qt 为应用程序国际化提供工具和方法。 有关完整信息,请参阅 Qt Quick 的国际化和本地化

常规步骤如下:

  1. 确保在 QML 文件(包括文本字符串的使用、相同文本去除歧义和参数与区域设置的使用)中将国际化考虑在内。
  2. 使用命令行工具 lupdate.exe 生成基本翻译文件,并针对所需的每种语言复制基本翻译文件并为其命名。
  3. 使用 Qt Linguist 打开上述文件并提供译文。
  4. 在 Qt Linguist 中,选择文件 > 发布,或者使用命令行工具 lrelease.exe 生成翻译文件。
  5. 将这些翻译文件包括到将要加入独立应用程序的工程中。

QML 进行国际化

The Qt Company 建议对 QML 进行国际化时遵循以下步骤:

  1. qsTr() 用于所有文字用户界面字符串。
  2. 添加上下文。 使用注释行描述使用字符串的位置,使用特定的语法。 //: 是提供给翻译人员的注释,而 //~ 是可选的额外信息。
  3. 为相同的文本消除歧义。 如果一个术语可以有多种含义,那么请添加第二个参数以进行区分,例如 text: qsTr("back", "not front"); text: qsTr("back", "go backward").
  4. 使用 %x 将参数插入字符串中,例如 text: qsTr("File %1 of %2").arg(counter).arg(total)
  5. 使用 %Lx 以本地化数字,例如 text: qsTr("%L1").arg(total)
  6. 将日期、时间和货币进行国际化,例如 text: qsTr("Date %1").arg(Date().toLocaleString(Qt.locale()))
  7. QT_TR_NOOP() 用于可翻译的数据文本字符串。
  8. 在可能的情况下,使用区域设置扩展本地化功能。

有关每个步骤的详细信息,请参阅 Qt Quick 的国际化和本地化

将图像包含到应用程序中时也应该考虑国际化。 显示的图像可能因为所选语言的不同而不同。 以下示例显示如何检测当前使用的语言是否为从右到左 (RTL) 语言,并设置名为 mirror 的用户定义属性。 然后可使用该属性确定将显示的图像。

    property var localeForRTL:["ar", "he", "he-IL"]
    property bool mirror: localeForRTL.indexOf(Qt.locale().uiLanguages[0]) > -1 

    Image{
        source: mirror ? "./RTLimage.png" : "./Image.png"
    }

lupdate

lupdate 是 AppStudio 安装文件夹中的 Qt 命令行工具。

要运行该工具,在项目目录中打开 cmd 窗口并运行以下命令。 请记住,以下每个示例中使用的完整句段表示当前目录,该目录是包含 .qml 文件的应用程序文件夹。

Windows 中:

C:\Users\UserName\ArcGIS\AppStudio\Apps\MyApp>"C:\Users\Username\Applications\ArcGIS\AppStudio\bin\lupdate.exe" . -extensions qml -ts languages/MyApp_en.ts

macOS 中:

/Users/UserName/applications/ArcGIS/AppStudio/tools/lupdate . -extensions qml -ts languages/MyApp_en.ts

Ubuntu 中:

~/Applications/ArcGIS/AppStudio/bin/lupdate . -extensions qml -ts languages/MyApp_en.ts

随即创建名为 MyApp_en.ts 的新文件。

可通过分别复制并重命名每种所需语言的 MyApp_en.ts 文件来创建新语言的译文,然后用每种所需语言的语言代码替换 en。 随后可通过 Qt Linguist 编辑 .ts 文件。

有关更多详细信息,请参阅使用 lupdate

Qt Linguist

Linguist 是 AppStudio 安装文件夹中的 GUI 工具。 打开在 Linguist 中通过 lupdate 创建的 .ts 文件,并为所有列出的字符串添加译文。 仅标记为完成的字符串会通过 lrelease 工具进行处理。

有关更多详细信息,请参阅 Qt Linguist 手册

lrelease

可通过以下方法生成发布文件:

  • 在 Linguist 中打开完成的 .ts 文件,并从文件菜单中选择发布。 随即创建一个 .qm 文件与 .ts 文件相对应。
  • 使用命令行工具。lrelease 是 AppStudio 安装文件夹中的 Qt 命令工具。 要生成运行时翻译文件,请运行以下命令并列出要生成的每个语言文件:

    lrelease.exe languages\MyApp_ar.ts languages\MyApp_fr.ts

  • -help 选项传递到 lrelease 以查看支持的选项。

有关详细信息,请参阅使用 lrelease

使用应用程序部署本地化文件

使用“构建”工具创建安装文件之前,请确保项目中已包括 .qm 文件。 建议的文件夹命名约定如下:

MyApp > languages > qml_localecode.qm

例如,如果应用程序包含德语、法语和中文的本地化版本,您将包含下列文件:

  • MyApp > languages > qml_de.qm
  • MyApp > languages > qml_fr.qm
  • MyApp > languages > qml_zh.qm

还必须为应用程序指定这些文件所在的位置。 此信息已在 appinfo.json 文件中定义。 在文本编辑器中打开 appinfo.json,并添加下列属性:

    "translations": {
        "fileName": "qml",
        "path": "languages"
    },

在上面的示例中,文件名为 qml。 不必包括下划线和语言代码。 代码示例中的文件夹名称为 languages,也与上述示例相匹配。 可以选择您自己的文件夹和文件名称,只是要确保在 appinfo.json 文件中推荐上述名称。

如果设备的系统区域设置与您所提供翻译文件的语言相匹配,则在该设备上运行您的应用程序时,应用程序会自动显示相应文件中的字符串。 另一个用于测试目的的命令行参数为 --locale,该参数可以使用您已包含于参数中的区域代码覆盖系统区域。 例如,将 --locale fr 追加到命令行将会启动使用法语本地化文件的应用程序。 在 AppStudio 中运行您的应用程序时,也可以使用这些命令行参数,方法是在 Qt Creator工程选项卡中的命令行参数:字段中设置这些参数。

在使用提供了翻译文件并已设置的应用程序时,可以使用 AppFramework 组件中的 loadTranslator 方法在应用程序内加载不同的翻译文件。

本地化存储列表

如果选择通过存储分发应用程序,并且已尽可能对应用程序进行全球化,那么,您还应该考虑本地化存储列表。 App StoreGoogle Play 均可提供对存储列表进行本地化的功能。 在这两种情况下,您都有机会在单一应用程序提交中提供各存储语言的本地化描述和屏幕截图。

有关详细信息,请参阅以下内容: