Node.js has many features that make it easier to write internationalized programs. Some of them are:

    • Locale-sensitive or Unicode-aware functions in the [ECMAScript Language Specification][ECMA-262]:
      • [String.prototype.normalize()][]
      • [String.prototype.toLowerCase()][]
      • [String.prototype.toUpperCase()][]
    • All functionality described in the [ECMAScript Internationalization API Specification][ECMA-402] (aka ECMA-402):
      • [Intl][] object
      • Locale-sensitive methods like [String.prototype.localeCompare()][] and [Date.prototype.toLocaleString()][]
    • The [WHATWG URL parser][]’s [internationalized domain names][] (IDNs) support
    • [require('buffer').transcode()][]
    • More accurate [REPL][] line editing
    • [require('util').TextDecoder][]
    • [RegExp Unicode Property Escapes][]

    Node.js (and its underlying V8 engine) uses [ICU][] to implement these features in native C/C++ code. The full ICU data set is provided by Node.js by default. However, due to the size of the ICU data file, several options are provided for customizing the ICU data set either when building or running Node.js.