Add automatic language redirector

This commit is contained in:
Kevin Kandlbinder 2020-12-22 17:38:02 +01:00
parent 186ebe2caa
commit 29456aa1b6
4 changed files with 44 additions and 0 deletions

View file

@ -1,6 +1,7 @@
// For more information, see https://fab.dev/kb/configuration
{
plugins: {
'./src/server/languageRedirect.js': {},
'@fab/input-static': {
dir: 'public'
},

5
package-lock.json generated
View file

@ -13447,6 +13447,11 @@
}
}
},
"locale": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/locale/-/locale-0.1.0.tgz",
"integrity": "sha1-O1v3BhT9q0isPj+8ZIFHy2VEO94="
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",

View file

@ -35,6 +35,7 @@
"gatsby-transformer-json": "^2.8.0",
"i18next": "^19.8.4",
"jquery": "^3.5.1",
"locale": "^0.1.0",
"node-sass": "^4.14.1",
"react": "^16.13.1",
"react-dom": "^16.13.1",

View file

@ -0,0 +1,37 @@
const config = require("../../config"), locale = require("locale");
let supported = new locale.Locales(conifg.languages);
let defaultLang = "en";
export default ({ Router }) => {
Router.on("*", checkLang);
};
async function checkLang({ request }) {
const { url } = request
let requestURL = new URL(url);
config.languages.forEach((language) => {
if(requestURL.pathname.startsWith("/"+language+"/")) {
return;
}
});
let headers = request.headers;
let selectedLanguage = defaultLang;
if(headers.has("Accept-Language")) {
let languageHeader = headers.get("Accept-Language");
let requestLocales = new locale.Locales(languageHeader);
selectedLanguage = requestLocales.best(supported);
}
requestURL.pathname = "/"+selectedLanguage+requestURL.pathname;
return Response.redirect(requestURL.toString(), 302);
}