File tree 3 files changed +72
-0
lines changed
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.
637
637
console .log (` This process is running on ${ navigator .hardwareConcurrency } logical processors` );
638
638
```
639
639
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
+
640
675
### ` navigator.userAgent `
641
676
642
677
<!-- YAML
Original file line number Diff line number Diff line change 2
2
3
3
const {
4
4
ObjectDefineProperties,
5
+ ObjectFreeze,
5
6
Symbol,
6
7
} = primordials ;
7
8
@@ -24,6 +25,8 @@ class Navigator {
24
25
// Private properties are used to avoid brand validations.
25
26
#availableParallelism;
26
27
#userAgent = `Node.js/${ nodeVersion . slice ( 1 , nodeVersion . indexOf ( '.' ) ) } ` ;
28
+ #language = 'en-US' ;
29
+ #languages = ObjectFreeze ( [ 'en-US' ] ) ;
27
30
28
31
constructor ( ) {
29
32
if ( arguments [ 0 ] === kInitialize ) {
@@ -40,6 +43,20 @@ class Navigator {
40
43
return this . #availableParallelism;
41
44
}
42
45
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
+
43
60
/**
44
61
* @return {string }
45
62
*/
@@ -50,6 +67,8 @@ class Navigator {
50
67
51
68
ObjectDefineProperties ( Navigator . prototype , {
52
69
hardwareConcurrency : kEnumerableProperty ,
70
+ language : kEnumerableProperty ,
71
+ languages : kEnumerableProperty ,
53
72
userAgent : kEnumerableProperty ,
54
73
} ) ;
55
74
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