File tree Expand file tree Collapse file tree 3 files changed +76
-0
lines changed Expand file tree Collapse file tree 3 files changed +76
-0
lines changed Original file line number Diff line number Diff line change @@ -637,6 +637,40 @@ logical processors available to the current Node.js instance.
637637console .log (` This process is running on ${ navigator .hardwareConcurrency } logical processors` );
638638```
639639
640+ ### ` navigator.language `
641+
642+ <!-- YAML
643+ added: REPLACEME
644+ -->
645+
646+ * {string}
647+
648+ The ` navigator.language ` read-only property returns a string representing the
649+ preferred language of the Node.js instance.
650+
651+ The value is representing the language version as defined in RFC <5646>.
652+ The default value is ` 'en-US' ` .
653+
654+ ``` js
655+ console .log (` The preferred language of the Node.js instance has the tag '${ navigator .language } '` );
656+ ```
657+
658+ ### ` navigator.languages `
659+
660+ <!-- YAML
661+ added: REPLACEME
662+ -->
663+
664+ * {Array<string >}
665+
666+ The ` navigator.languages ` read-only property returns an array of strings
667+ representing the preferred languages of the Node.js instance.
668+ The default value is ` ['en-US'] ` .
669+
670+ ``` js
671+ console .log (` The preferred languages are '${ navigator .language } '` );
672+ ```
673+
640674### ` navigator.userAgent `
641675
642676<!-- YAML
Original file line number Diff line number Diff line change 22
33const {
44 ObjectDefineProperties,
5+ ObjectFreeze,
6+ globalThis,
57 Symbol,
68} = primordials ;
79
10+ const {
11+ Intl,
12+ } = globalThis ;
13+
814const {
915 ERR_ILLEGAL_CONSTRUCTOR ,
1016} = require ( 'internal/errors' ) . codes ;
@@ -24,6 +30,8 @@ class Navigator {
2430 // Private properties are used to avoid brand validations.
2531 #availableParallelism;
2632 #userAgent = `Node.js/${ nodeVersion . slice ( 1 , nodeVersion . indexOf ( '.' ) ) } ` ;
33+ #language = Intl ?. Collator ( ) . resolvedOptions ( ) . locale || 'en-US' ;
34+ #languages = ObjectFreeze ( [ this . #language] ) ;
2735
2836 constructor ( ) {
2937 if ( arguments [ 0 ] === kInitialize ) {
@@ -40,6 +48,20 @@ class Navigator {
4048 return this . #availableParallelism;
4149 }
4250
51+ /**
52+ * @return {string }
53+ */
54+ get language ( ) {
55+ return this . #language;
56+ }
57+
58+ /**
59+ * @return {Array<string> }
60+ */
61+ get languages ( ) {
62+ return this . #languages;
63+ }
64+
4365 /**
4466 * @return {string }
4567 */
@@ -50,6 +72,8 @@ class Navigator {
5072
5173ObjectDefineProperties ( Navigator . prototype , {
5274 hardwareConcurrency : kEnumerableProperty ,
75+ language : kEnumerableProperty ,
76+ languages : kEnumerableProperty ,
5377 userAgent : kEnumerableProperty ,
5478} ) ;
5579
Original file line number Diff line number Diff line change @@ -15,3 +15,21 @@ is.number(navigator.hardwareConcurrency, 'hardwareConcurrency');
1515assert . ok ( navigator . hardwareConcurrency > 0 ) ;
1616assert . strictEqual ( typeof navigator . userAgent , 'string' ) ;
1717assert . match ( navigator . userAgent , / ^ N o d e \. j s \/ \d + $ / ) ;
18+
19+ assert . strictEqual ( typeof navigator . language , 'string' ) ;
20+ assert . strictEqual ( navigator . language , 'en-US' ) ;
21+
22+ assert . ok ( Array . isArray ( navigator . languages ) ) ;
23+ assert . strictEqual ( navigator . languages . length , 1 ) ;
24+ assert . strictEqual ( typeof navigator . languages [ 0 ] , 'string' ) ;
25+
26+ assert . throws ( ( ) => {
27+ navigator . languages [ 0 ] = 'foo' ;
28+ } , new TypeError ( "Cannot assign to read only property '0' of object '[object Array]'" ) ) ;
29+ assert . notStrictEqual ( navigator . languages [ 0 ] , 'foo' ) ;
30+ assert . strictEqual ( navigator . languages [ 0 ] , 'en-US' ) ;
31+
32+ Object . defineProperty ( navigator , 'language' , { value : 'de-DE' } ) ;
33+ assert . strictEqual ( navigator . language , 'de-DE' ) ;
34+ assert . strictEqual ( navigator . languages . length , 1 ) ;
35+ assert . strictEqual ( navigator . languages [ 0 ] , 'en-US' ) ;
You can’t perform that action at this time.
0 commit comments