File tree Expand file tree Collapse file tree 3 files changed +72
-0
lines changed Expand file tree Collapse file tree 3 files changed +72
-0
lines changed Original file line number Diff line number Diff line change @@ -637,6 +637,41 @@ logical processors available to the current Node.js instance.
637637console .log (` This process is running on ${ navigator .hardwareConcurrency } logical processors` );
638638```
639639
640+
641+ ### ` navigator.language `
642+
643+ <!-- YAML
644+ added: REPLACEME
645+ -->
646+
647+ * {string}
648+
649+ The ` navigator.language ` read-only property returns a string representing the
650+ preferred language of the Node.js instance.
651+
652+ The value is representing the language version as defined in RFC <5646>.
653+ The default value is ` 'en-US' ` .
654+
655+ ``` js
656+ console .log (` The preferred language of the Node.js instance has the tag '${ navigator .language } '` );
657+ ```
658+
659+ ### ` navigator.languages `
660+
661+ <!-- YAML
662+ added: REPLACEME
663+ -->
664+
665+ * {Array<string >}
666+
667+ The ` navigator.languages ` read-only property returns an array of strings
668+ representing the preferred languages of the Node.js instance.
669+ The default value is ` ['en-US'] ` .
670+
671+ ``` js
672+ console .log (` The preferred languages are '${ navigator .language } '` );
673+ ```
674+
640675### ` navigator.userAgent `
641676
642677<!-- YAML
Original file line number Diff line number Diff line change 22
33const {
44 ObjectDefineProperties,
5+ ObjectFreeze,
56 Symbol,
67} = primordials ;
78
@@ -24,6 +25,8 @@ class Navigator {
2425 // Private properties are used to avoid brand validations.
2526 #availableParallelism;
2627 #userAgent = `Node.js/${ nodeVersion . slice ( 1 , nodeVersion . indexOf ( '.' ) ) } ` ;
28+ #language = 'en-US' ;
29+ #languages = ObjectFreeze ( [ 'en-US' ] ) ;
2730
2831 constructor ( ) {
2932 if ( arguments [ 0 ] === kInitialize ) {
@@ -40,6 +43,20 @@ class Navigator {
4043 return this . #availableParallelism;
4144 }
4245
46+ /**
47+ * @return {string }
48+ */
49+ get language ( ) {
50+ return this . #language;
51+ }
52+
53+ /**
54+ * @return {Array<string> }
55+ */
56+ get languages ( ) {
57+ return this . #languages;
58+ }
59+
4360 /**
4461 * @return {string }
4562 */
@@ -50,6 +67,8 @@ class Navigator {
5067
5168ObjectDefineProperties ( Navigator . prototype , {
5269 hardwareConcurrency : kEnumerableProperty ,
70+ language : kEnumerableProperty ,
71+ languages : kEnumerableProperty ,
5372 userAgent : kEnumerableProperty ,
5473} ) ;
5574
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