diff --git a/fab.config.json5 b/fab.config.json5 index c3fe13b..0f04ad1 100644 --- a/fab.config.json5 +++ b/fab.config.json5 @@ -1,6 +1,7 @@ // For more information, see https://fab.dev/kb/configuration { plugins: { + './src/server/languageRedirect.js': {}, '@fab/input-static': { dir: 'public' }, diff --git a/package-lock.json b/package-lock.json index ae43695..bfa6006 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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", diff --git a/package.json b/package.json index 48438a7..6b0b334 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/src/server/languageRedirect.js b/src/server/languageRedirect.js new file mode 100644 index 0000000..70f0d34 --- /dev/null +++ b/src/server/languageRedirect.js @@ -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); + } + \ No newline at end of file