面向全球用户的 Web 应用程序需要以多种语言显示语言、地区、脚本和货币的显示名称。这些名称的翻译需要数据,这些数据可以在 Unicode CLDR 中找到。将数据打包为应用程序的一部分会给开发人员带来时间成本。用户可能更喜欢语言和地区名称的一致翻译,而要保持这些数据与世界地缘政治事件同步,需要不断维护。
幸运的是,大多数 JavaScript 运行时已经发布并保持了这些相同的翻译数据。新的 Intl.DisplayNames
API 使 JavaScript 开发人员可以直接访问这些翻译,从而使应用程序能够更轻松地显示本地化名称。
使用示例 #
以下示例展示了如何创建一个 Intl.DisplayNames
对象,使用 ISO-3166 2 字母国家代码 以英语获取地区名称。
const regionNames = new Intl.DisplayNames(['en'], { type: 'region' });
regionNames.of('US');
// → 'United States'
regionNames.of('BA');
// → 'Bosnia & Herzegovina'
regionNames.of('MM');
// → 'Myanmar (Burma)'
以下示例使用 Unicode 的语言标识符语法 以繁体中文获取语言名称。
const languageNames = new Intl.DisplayNames(['zh-Hant'], { type: 'language' });
languageNames.of('fr');
// → '法文'
languageNames.of('zh');
// → '中文'
languageNames.of('de');
// → '德文'
以下示例使用 ISO-4217 3 字母货币代码 以简体中文获取货币名称。在具有不同单数和复数形式的语言中,货币名称为单数形式。对于复数形式,可以使用 Intl.NumberFormat
。
const currencyNames = new Intl.DisplayNames(['zh-Hans'], {type: 'currency'});
currencyNames.of('USD');
// → '美元'
currencyNames.of('EUR');
// → '欧元'
currencyNames.of('JPY');
// → '日元'
currencyNames.of('CNY');
// → '人民币'
以下示例展示了最后支持的类型,脚本,以英语显示,使用 ISO-15924 4 字母脚本代码。
const scriptNames = new Intl.DisplayNames(['en'], { type: 'script' });
scriptNames.of('Latn');
// → 'Latin'
scriptNames.of('Arab');
// → 'Arabic'
scriptNames.of('Kana');
// → 'Katakana'
对于更高级的使用,第二个 options
参数也支持 style
属性。style
属性对应于显示名称的宽度,可以是 "long"
、"short"
或 "narrow"
。不同样式的值并不总是不同。默认值为 "long"
。
const longLanguageNames = new Intl.DisplayNames(['en'], { type: 'language' });
longLanguageNames.of('en-US');
// → 'American English'
const shortLanguageNames = new Intl.DisplayNames(['en'], { type: 'language', style: 'short' });
shortLanguageNames.of('en-US');
// → 'US English'
const narrowLanguageNames = new Intl.DisplayNames(['en'], { type: 'language', style: 'narrow' });
narrowLanguageNames.of('en-US');
// → 'US English'
完整 API #
Intl.DisplayNames
的完整 API 如下所示。
Intl.DisplayNames(locales, options)
Intl.DisplayNames.prototype.of( code )
构造函数与其他 Intl
API 一致。它的第一个参数是 语言环境列表,它的第二个参数是 options
参数,它接受 localeMatcher
、type
和 style
属性。
"localeMatcher"
属性的处理方式与 其他 Intl
API 中的处理方式相同。type
属性可以是 "region"
、"language"
、"currency"
或 "script"
。style
属性可以是 "long"
、"short"
或 "narrow"
,默认值为 "long"
。
Intl.DisplayNames.prototype.of( code )
期望根据实例构造方式的 type
采用以下格式。
- 当
type
为"region"
时,code
必须是 ISO-3166 2 字母国家代码 或 联合国 M49 3 位地区代码。 - 当
type
为"language"
时,code
必须符合 Unicode 的语言标识符语法。 - 当
type
为"currency"
时,code
必须是 ISO-4217 3 字母货币代码。 - 当
type
为"script"
时,code
必须是 ISO-15924 4 字母脚本代码。
结论 #
与其他 Intl
API 一样,随着 Intl.DisplayNames
的普及,库和应用程序将选择放弃打包和发布自己的翻译数据,转而使用原生功能。