Skip to content

Commit 5bdd487

Browse files
committed
lib: add navigator.language & navigator.languages
1 parent 14af167 commit 5bdd487

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

doc/api/globals.md

+35
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,41 @@ logical processors available to the current Node.js instance.
637637
console.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

lib/internal/navigator.js

+15
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
const {
44
ObjectDefineProperties,
5+
ObjectFreeze,
56
Symbol,
67
} = primordials;
78

@@ -40,6 +41,20 @@ class Navigator {
4041
return this.#availableParallelism;
4142
}
4243

44+
/**
45+
* @return {string}
46+
*/
47+
get language() {
48+
return 'en-US';
49+
}
50+
51+
/**
52+
* @return {Array<string>}
53+
*/
54+
get languages() {
55+
return ObjectFreeze([this.language]);
56+
}
57+
4358
/**
4459
* @return {string}
4560
*/

test/parallel/test-navigator.js

+16
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,19 @@ is.number(navigator.hardwareConcurrency, 'hardwareConcurrency');
1515
assert.ok(navigator.hardwareConcurrency > 0);
1616
assert.strictEqual(typeof navigator.userAgent, 'string');
1717
assert.match(navigator.userAgent, /^Node\.js\/\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(() => {navigator.languages[0] = 'foo'}, new TypeError("Cannot assign to read only property '0' of object '[object Array]'"));
27+
assert.notStrictEqual(navigator.languages[0], 'foo');
28+
assert.strictEqual(navigator.languages[0], 'en-US');
29+
30+
Object.defineProperty(navigator, 'language', {value: 'de-DE'});
31+
assert.strictEqual(navigator.language, 'de-DE');
32+
assert.strictEqual(navigator.languages.length, 1);
33+
assert.strictEqual(navigator.languages[0], 'de-DE');

0 commit comments

Comments
 (0)