Skip to content

Commit 6d2191c

Browse files
committed
refactor: use negotiator and intl-localematcher to get the preferred language
1 parent 17d2d40 commit 6d2191c

File tree

3 files changed

+58
-19
lines changed

3 files changed

+58
-19
lines changed

package-lock.json

+44-10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@
66
"url": "https://github.com/jsonwebtoken/jsonwebtoken.github.io"
77
},
88
"dependencies": {
9+
"@formatjs/intl-localematcher": "^0.5.10",
910
"@octokit/rest": "^18.0.12",
1011
"dotenv": "^8.2.0",
1112
"express": "^4.17.1",
1213
"express-sslify": "^1.2.0",
1314
"jstransformer-markdown": "^1.2.1",
1415
"jstransformer-markdown-it": "^2.1.0",
1516
"lodash.debounce": "^4.0.8",
17+
"negotiator": "^1.0.0",
1618
"pug": "^2.0.4",
1719
"querystring": "^0.2.0"
1820
},
@@ -83,4 +85,4 @@
8385
"build:libraries": "node libraries.js"
8486
},
8587
"heroku-run-build-script": true
86-
}
88+
}

server.js

+11-8
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ const express = require("express");
22
const enforce = require("express-sslify");
33
const languages = require("./libraries.json");
44
const dotenv = require("dotenv").config();
5+
const Negotiator = require("negotiator");
6+
const localeMatcher = require("@formatjs/intl-localematcher");
57

68
const app = express();
79

@@ -19,16 +21,17 @@ if (process.env.NODE_ENV === "production") {
1921
}
2022

2123
app.use((req, res, next) => {
22-
const acceptLanguage = req.headers['accept-language'];
24+
const languagesFromRequestHeaders = new Negotiator(req).languages();
25+
const LANGUAGE_CODES = ["en", "ja"]
26+
const DEFAULT_LANGUAGE_CODE = ["en"]
2327

24-
if(acceptLanguage){
25-
const preferredLanguage = acceptLanguage.split(",")[0].split("-")[0];
26-
27-
req.preferredLanguage = preferredLanguage;
28-
}else{
29-
req.preferredLanguage = 'en';
30-
}
28+
const languageFromRequestHeader = localeMatcher.match(
29+
languagesFromRequestHeaders,
30+
LANGUAGE_CODES,
31+
DEFAULT_LANGUAGE_CODE,
32+
);
3133

34+
req.preferredLanguage = languageFromRequestHeader;
3235
next();
3336
})
3437

0 commit comments

Comments
 (0)