@@ -2,6 +2,8 @@ const express = require("express");
22const enforce = require ( "express-sslify" ) ;
33const languages = require ( "./libraries.json" ) ;
44const dotenv = require ( "dotenv" ) . config ( ) ;
5+ const Negotiator = require ( "negotiator" ) ;
6+ const localeMatcher = require ( "@formatjs/intl-localematcher" ) ;
57
68const 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+
2138app . use ( ( req , res , next ) => {
2239 res . locals . COOKIE_CONSENT_DOMAIN_ID = process . env . COOKIE_CONSENT_DOMAIN_ID ;
2340 next ( ) ;
2441} ) ;
2542app . use ( express . static ( "dist/website" ) ) ;
2643app . get ( "/" , function ( req , res ) {
27- res . render ( "index" ) ;
44+ res . render ( "index" , {
45+ preferredLanguage : req . preferredLanguage ,
46+ } ) ;
2847} ) ;
2948
3049app . get ( "/introduction" , function ( req , res ) {
31- res . render ( "introduction" ) ;
50+ res . render ( "introduction" , {
51+ preferredLanguage : req . preferredLanguage ,
52+ } ) ;
3253} ) ;
3354
3455app . 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
4567app . listen ( process . env . PORT || 3000 , function ( ) {
4668 console . log ( "Started." ) ;
47- } ) ;
69+ } ) ;
0 commit comments