File tree 3 files changed +76
-0
lines changed
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.
637
637
console .log (` This process is running on ${ navigator .hardwareConcurrency } logical processors` );
638
638
```
639
639
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
+
640
674
### ` navigator.userAgent `
641
675
642
676
<!-- YAML
Original file line number Diff line number Diff line change 2
2
3
3
const {
4
4
ObjectDefineProperties,
5
+ ObjectFreeze,
6
+ globalThis,
5
7
Symbol,
6
8
} = primordials ;
7
9
10
+ const {
11
+ Intl,
12
+ } = globalThis ;
13
+
8
14
const {
9
15
ERR_ILLEGAL_CONSTRUCTOR ,
10
16
} = require ( 'internal/errors' ) . codes ;
@@ -24,6 +30,8 @@ class Navigator {
24
30
// Private properties are used to avoid brand validations.
25
31
#availableParallelism;
26
32
#userAgent = `Node.js/${ nodeVersion . slice ( 1 , nodeVersion . indexOf ( '.' ) ) } ` ;
33
+ #language = Intl ?. Collator ( ) . resolvedOptions ( ) . locale || 'en-US' ;
34
+ #languages = ObjectFreeze ( [ this . #language] ) ;
27
35
28
36
constructor ( ) {
29
37
if ( arguments [ 0 ] === kInitialize ) {
@@ -40,6 +48,20 @@ class Navigator {
40
48
return this . #availableParallelism;
41
49
}
42
50
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
+
43
65
/**
44
66
* @return {string }
45
67
*/
@@ -50,6 +72,8 @@ class Navigator {
50
72
51
73
ObjectDefineProperties ( Navigator . prototype , {
52
74
hardwareConcurrency : kEnumerableProperty ,
75
+ language : kEnumerableProperty ,
76
+ languages : kEnumerableProperty ,
53
77
userAgent : kEnumerableProperty ,
54
78
} ) ;
55
79
Original file line number Diff line number Diff line change @@ -15,3 +15,21 @@ is.number(navigator.hardwareConcurrency, 'hardwareConcurrency');
15
15
assert . ok ( navigator . hardwareConcurrency > 0 ) ;
16
16
assert . strictEqual ( typeof navigator . userAgent , 'string' ) ;
17
17
assert . 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