检测国际化支持


\Detecting internationalization support

要验证是否启用了 ICU(system-icusmall-icufull-icu),只需检查 Intl 是否存在就足够了:

\To verify that ICU is enabled at all (system-icu, small-icu, or full-icu), simply checking the existence of Intl should suffice:

const hasICU = typeof Intl === 'object'; 

或者,检查 process.versions.icu,一个仅在启用 ICU 时定义的属性,也可以工作:

\Alternatively, checking for process.versions.icu, a property defined only when ICU is enabled, works too:

const hasICU = typeof process.versions.icu === 'string'; 

要检查对非英语语言环境(即 full-icusystem-icu)的支持,Intl.DateTimeFormat 可能是一个很好的区分因素:

\To check for support for a non-English locale (i.e. full-icu or system-icu), Intl.DateTimeFormat can be a good distinguishing factor:

const hasFullICU = (() => {
 try {
 const january = new Date(9e8);
 const spanish = new Intl.DateTimeFormat('es', { month: 'long' });
 return spanish.format(january) === 'enero';
 } catch (err) {
 return false;
 }
})(); 

有关 Intl 支持的更详细的测试,以下资源可能会有所帮助:

\For more verbose tests for Intl support, the following resources may be found to be helpful:

  • btest402:一般用于检查是否正确地构建了支持 Intl 的 Node.js。

    \btest402: Generally used to check whether Node.js with Intl support is built correctly.

  • Test262:ECMAScript 的官方一致性测试套件包括一个专门针对 ECMA-402 的部分。

    \Test262: ECMAScript's official conformance test suite includes a section dedicated to ECMA-402.

AltStyle によって変換されたページ (->オリジナル) /