Skip to content

Commit 4b55fae

Browse files
authored
Merge pull request #729 from jsonwebtoken/localize-ttb-ja
Feat: localize jwt.io banner Japanese
2 parents a8dcaad + 6d2191c commit 4b55fae

File tree

4 files changed

+79
-17
lines changed

4 files changed

+79
-17
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

+26-4
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

@@ -18,22 +20,42 @@ if (process.env.NODE_ENV === "production") {
1820
);
1921
}
2022

23+
app.use((req, res, next) => {
24+
const languagesFromRequestHeaders = new Negotiator(req).languages();
25+
const LANGUAGE_CODES = ["en", "ja"]
26+
const DEFAULT_LANGUAGE_CODE = ["en"]
27+
28+
const languageFromRequestHeader = localeMatcher.match(
29+
languagesFromRequestHeaders,
30+
LANGUAGE_CODES,
31+
DEFAULT_LANGUAGE_CODE,
32+
);
33+
34+
req.preferredLanguage = languageFromRequestHeader;
35+
next();
36+
})
37+
2138
app.use((req, res, next) => {
2239
res.locals.COOKIE_CONSENT_DOMAIN_ID = process.env.COOKIE_CONSENT_DOMAIN_ID;
2340
next();
2441
});
2542
app.use(express.static("dist/website"));
2643
app.get("/", function(req, res) {
27-
res.render("index");
44+
res.render("index", {
45+
preferredLanguage: req.preferredLanguage,
46+
});
2847
});
2948

3049
app.get("/introduction", function(req, res) {
31-
res.render("introduction");
50+
res.render("introduction", {
51+
preferredLanguage: req.preferredLanguage,
52+
});
3253
});
3354

3455
app.get("/libraries", function(req, res) {
3556
res.render("libraries", {
36-
languages: languages
57+
languages: languages,
58+
preferredLanguage: req.preferredLanguage,
3759
});
3860
});
3961

@@ -44,4 +66,4 @@ app.get("/home", function(req, res) {
4466

4567
app.listen(process.env.PORT || 3000, function() {
4668
console.log("Started.");
47-
});
69+
});

views/website/navigation.pug

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
.top-banner-bg.closed
22
.top-banner.closed
33
.top-banner-container
4-
a(href="https://a0.to/jwt-io-feedback" target="_blank") Get an exclusive look at jwt.io v2 and help us shape its final form with your feedback.
5-
span(aria-hiden="true")
4+
if preferredLanguage === 'ja'
5+
a(href="https://a0.to/jwt-io-feedback-ja" target="_blank") jwt.io v2ベータバージョン: フィードバックをお寄せください。
6+
span(aria-hiden="true")
7+
else
8+
a(href="https://a0.to/jwt-io-feedback" target="_blank") Get an exclusive look at jwt.io v2 and help us shape its final form with your feedback.
9+
span(aria-hiden="true")
610
button.close-top-banner +
711

812
nav.navbar

0 commit comments

Comments
 (0)