你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将应用程序中的 UI 库本地化

本地化是制造可由世界各地说不同语言的人使用的产品的关键。 Azure 通信服务 UI 库为某些语言和功能(例如从右到左 (RTL))提供现成的支持。 开发人员可以为 UI 库提供自己的本地化文件。

在本文中,了解如何在应用程序中使用 UI 库正确设置本地化。

先决条件

设置本地化

有关 Web UI 库的详细文档和快速入门,请参阅 Web UI 库 Storybook

若要了解详细信息,请参阅 Web UI 库中的本地化

有关详细信息,请参阅开源 Android UI 库示例应用程序代码

可用语言

下表列出了现用翻译的 CallCompositeSupportedLocale ID。 如果要本地化复合项,请将 Locale 对象从 CallCompositeSupportedLocale 传递到 CallCompositeLocalizationOptions 用作 CallComposite 的选项。

语言 CallCompositeSupportedLocale
阿拉伯语(沙特阿拉伯) CallCompositeSupportedLocale.AR_SA
德语(德国) CallCompositeSupportedLocale.DE_DE
英语(美国) CallCompositeSupportedLocale.EN_US
英语(英国) CallCompositeSupportedLocale.EN_UK
西班牙语(西班牙) CallCompositeSupportedLocale.ES_ES
西班牙语 CallCompositeSupportedLocale.ES
芬兰语(芬兰) CallCompositeSupportedLocale.FI_FI
法语(法国) CallCompositeSupportedLocale.FR_FR
法语 CallCompositeSupportedLocale.FR
希伯来语(以色列) CallCompositeSupportedLocale.IW_IL
意大利语(意大利) CallCompositeSupportedLocale.IT_IT
意大利语 CallCompositeSupportedLocale.IT
日语(日本) CallCompositeSupportedLocale.JA_JP
日语 CallCompositeSupportedLocale.JA
韩语(韩国) CallCompositeSupportedLocale.KO_KR
韩语 CallCompositeSupportedLocale.KO
荷兰语(荷兰) CallCompositeSupportedLocale.NL_NL
荷兰语 CallCompositeSupportedLocale.NL
挪威语(博克马尔语) CallCompositeSupportedLocale.NB_NO
波兰语(波兰) CallCompositeSupportedLocale.PL_PL
波兰语 CallCompositeSupportedLocale.PL
葡萄牙语(巴西) CallCompositeSupportedLocale.PT_BR
葡萄牙语 CallCompositeSupportedLocale.PT
俄语(俄罗斯) CallCompositeSupportedLocale.RU_RU
俄语 CallCompositeSupportedLocale.RU
瑞典语(瑞典) CallCompositeSupportedLocale.SV_SE
土耳其语(土耳其) CallCompositeSupportedLocale.TR_TR
土耳其语 CallCompositeSupportedLocale.TR
中文(简体) CallCompositeSupportedLocale.ZH_CN
繁体中文 CallCompositeSupportedLocale.ZH_TW
中文 CallCompositeSupportedLocale.ZH

本地化提供程序

CallCompositeLocalizationOptions 是一个选项包装器,它使用 CallCompositeSupportedLocale 设置 Android UI 库组件的所有字符串。 默认情况下,所有文本标签都使用英文字符串。 可使用 CallCompositeLocalizationOptions 通过从 CallCompositeSupportedLocale 中传递 Locale 对象来设置其他语言。 现成的 UI 库包含一组可用于 UI 组件和复合项的 Locale 对象。

还可以使用静态函数 CallCompositeSupportedLocale.getSupportedLocales() 获取 Locale 对象的列表。

显示 Android 本地化的屏幕截图。

若要使用 CallCompositeLocalizationOptions,请指定 CallCompositeSupportedLocale 并将其传递给 CallCompositeBuilder。 以下示例将复合项本地化为法语。

import com.azure.android.communication.ui.calling.models.CallCompositeLocalizationOptions
import com.azure.android.communication.ui.calling.models.CallCompositeSupportedLocale

// CallCompositeSupportedLocale provides a list of supported locales
val callComposite: CallComposite =
            CallCompositeBuilder().localization(
                CallCompositeLocalizationOptions(CallCompositeSupportedLocale.FR)
            ).build()

布局方向

某些区域性(例如阿拉伯语和希伯来语)可能需要本地化才能具有从右到左的布局。 可以将 layoutDirection 指定为 CallCompositeLocalizationOptions 的一部分。 复合项的布局将被镜像,但文本将保留在字符串的方向。

import com.azure.android.communication.ui.calling.models.CallCompositeLocalizationOptions
import com.azure.android.communication.ui.calling.models.CallCompositeSupportedLocale

// CallCompositeSupportedLocale provides a list of supported locales
val callComposite: CallComposite =
            CallCompositeBuilder().localization(
                CallCompositeLocalizationOptions(CallCompositeSupportedLocale.FR, LayoutDirection.LTR)
            ).build()
LayoutDirection.RTL LayoutDirection.LTR
Android 从右到左布局的屏幕截图。 Android 从左到右布局的屏幕截图。

自定义翻译

有两个选项可用于自定义我们提供的语言翻译。 若要替代键/值对的特定字符串,可使用本地化键的列表。 可以将区域设置指定为受支持的语言之一。 如果未提供键,它将回退到受支持的翻译字符串。 如果指定了不受支持的语言,则应为该语言的所有键提供翻译(使用 string.xml 文件),然后在未提供键时回退到英语字符串。

例如,你希望控件条使用英语(美国)区域设置中的字符串,但希望在设置视图中将“加入通话”按钮的标签更改为“开始会议”。 使用要替代的选定键的键/值对创建一个 string.xml 文件(或其他文件名)。 以下示例替代了键 azure_communication_ui_calling_setup_view_button_join_call

显示 Android 本地化设置项目的屏幕截图。

显示 Android 示例自定义标签的屏幕截图。

有关详细信息,请参阅开源 iOS UI 库示例应用程序代码

语言检测

如果应用程序支持本地化,则 UI 库将基于用户系统的首选语言显示(前提是该语言是下述部分中所列的可用语言之一)。 否则,语言默认为预定义的英语 (en) 字符串。

可用语言

下表列出了 locale 的现用翻译。 如果要本地化复合项,请将 locale 传递到 LocalizationOptions 用作 CallComposite 的选项。

语言 SupportedLocale Identifier
简体中文 zh zh
简体中文 zhHans zh-Hans
简体中文(中国大陆) zhHansCN zh-Hans-CN
中文,繁体 zhHant zh-Hant
繁体中文(中国台湾) zhHantTW zh-Hant-TW
荷兰语 nl nl
荷兰语(荷兰) nlNL nl-NL
英语 en en
英语(英国) enGB en-GB
英语(美国) enUS en-US
法语 fr fr
法语(法国) frFR fr-FR
德语 de de
德语(德国) deDE de-DE
意大利语 it it
意大利语(意大利) itIT it-IT
日语 ja ja
日语(日本) jaJP ja-JP
韩语 ko ko
韩语(韩国) koKR ko-KR
葡萄牙语 pt pt
葡萄牙语(巴西) ptBR pt-BR
俄语 ru ru
俄语(俄罗斯) ruRU ru-RU
西班牙语 es es
西班牙语(西班牙) esES es-ES
土耳其语 tr tr
土耳其语 (Türkiye) trTR tr-TR

还可以使用静态函数 SupportedLocale.values 获取 locale 结构的列表。

let locales: [Locale] = SupportedLocale.values.map{ $0.identifier }
print(locales)

// ["de", "de-DE", "en", "en-GB", "en-US", "es", "es-ES", "fr", "fr-FR", "it", "it-IT", "ja", "ja-JP", "ko", "ko-KR", "nl", "nl-NL", "pt", "pt-BR", "ru", "ru-RU", "tr", "tr-TR", "zh", "zh-Hans", "zh-Hans-CN", "zh-Hant", "zh-Hant-TW"]

LocalizationOptions

LocalizationOptions 是一个选项包装器,它使用 locale 设置 UI 库组件的所有字符串。 默认情况下,所有文本标签都使用英文 (en) 字符串。 可以使用 LocalizationOptions 来设置不同的 locale 结构。 现成的 UI 库包含一组可用于 UI 组件和复合项的 locale 结构。

若要使用 LocalizationOptions,请指定 Swift locale 结构(具有或不具有区域代码),并将其传递给 CallCompositeOptions。 以下示例将复合项本地化为法语(法国)(fr-FR)。

// Creating a Swift locale structure
var localizationOptions = LocalizationOptions(locale: Locale(identifier: "fr-FR"))

// Use IntelliSense SupportedLocale to get supported locale structures
localizationOptions = LocalizationOptions(locale: SupportedLocale.frFR)

let callCompositeOptions = CallCompositeOptions(localization: localizationOptions)
let callComposite = CallComposite(withOptions: callCompositeOptions)

显示 iOS 本地化的屏幕截图。

布局方向

某些区域性(例如阿拉伯语和希伯来语)可能需要本地化才能具有从右到左的布局。 可以将 layoutDirection 指定为 LocalizationOptions 的一部分。 复合项的布局将被镜像,但文本将保留在字符串的方向。

var localizationOptions: LocalizationOptions

// Initializer with locale and layoutDirection
localizationOptions = LocalizationOptions(locale: Locale(identifier: "en"),
                                          layoutDirection: .rightToLeft)

// Initializer with locale, localizableFilename, and layoutDirection
localizationOptions = LocalizationOptions(locale: Locale(identifier: "en"),
                                          localizableFilename: "Localizable",
                                          layoutDirection: .rightToLeft)

// Add localizationOptions as an option
let callCompositeOptions = CallCompositeOptions(localization: localizationOptions)
let callComposite = CallComposite(withOptions: callCompositeOptions)

以下示例显示了从右到左的布局镜像。 如果未指定 layoutDirection,则默认为 false(从左到右布局)。

layoutDirection = .leftToRight(默认值) layoutDirection = .rightToLeft
显示 iOS 从左到右布局方向的屏幕截图。 显示 iOS 从右到左布局方向的屏幕截图。

自定义翻译

有两个选项可用于自定义我们提供的语言翻译。 若要替代特定字符串,可以为键/值对使用本地化键的列表。 可以将 locale 指定为受支持的语言之一。 如果未提供键,它会回退到受支持的翻译字符串。 如果指定了不受支持的语言,则应为该语言的所有键提供翻译(使用 Localizable.strings 文件),然后在未提供键时回退到英语字符串。

例如,你希望控件条使用英语(美国)区域设置中的字符串,但希望在设置视图中将“加入通话”按钮的标签更改为“开始会议”。 对于要替代的 locale 实例,请在项目中启用本地化。 使用要替代的选定键的键/值对创建一个 Localizable.strings 文件(或者其他扩展名为 .strings 的文件名)。 以下示例替代了键 AzureCommunicationUI.SetupView.Button.JoinCall

显示 iOS 设置项目的屏幕截图。

显示 iOS 自定义字符串的屏幕截图。

若要指定使用 Localizable.strings 进行替代,请创建一个 LocalizationOptions 对象来指定 localelocalizationFilename。 或者,使用 locale 初始值设定项时,它会在 locale.collatorIdentifierLocalizable.strings 中查找键作为项目中的语言。

let localizationOptions = LocalizationOptions(locale: Locale(identifier: "fr"),
                                              localizableFilename: "Localizable")
let callCompositeOptions = CallCompositeOptions(localization: localizationOptions)
let callComposite = CallComposite(withOptions: callCompositeOptions)

用于本地化的辅助功能 VoiceOver

若要使 VoiceOver 能够正常进行本地化,请确保将语言添加到应用的本地化中。 然后,VoiceOver 检测到应用支持 localeLocalizationOptions 中指定的语言。 它通过在设备上的“设置”>“辅助功能”>“语音”中找到的语音来选择语言的语音。 可以验证语言是否已添加到项目中,如下例所示。

显示 iOS Xcode 项目本地化的屏幕截图。

后续步骤