Intil.DisplayNames() 在 Safari 版本 < 14.1 中未定义

Intil.DisplayNames() undefined in Safari version < 14.1

Intl.Displaynames() 构造函数启用 Javascript 中的语言、区域和脚本显示名称的翻译。

遗憾的是,< 14.1. 版本的 Safari 不支持此功能(参见 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DisplayNames#browser_compatibility)。

如何在旧版 Safari 中实现此功能?

我们可以使用 polyfill(参见 https://formatjs.io/docs/polyfills/intl-displaynames/)使它在旧的 Safari 版本中工作。

将以下 polyfill 添加到您的代码中以使 Intl.DisplayNames() 构造函数按预期工作:

// the actual polyfills:
require('@formatjs/intl-locale/polyfill');
require('@formatjs/intl-displaynames/polyfill');
// the locale data of the languages that you need to support:
require('@formatjs/intl-displaynames/locale-data/de');
require('@formatjs/intl-displaynames/locale-data/en');

这需要以下依赖项:

"@formatjs/intl-displaynames"
"@formatjs/intl-getcanonicallocales"
"@formatjs/intl-locale"

之后,构造函数应该被 polyfilled 并准备好使用。例如:

const translatedRegionNames = new Intl.DisplayNames(['en'], {type: 'region'});
...
const translatedCountryName = translatedRegionNames.of('US')