const port = 9001; const browserSyncPort = 3000; const distPath = "www"; const fs = require("fs"); const path = require("path"); // express server const { join } = require("path"); const express = require("express"); const app = express(); let cookieParser = require("cookie-parser"); //By defaut the language should be english. const default_lang = "en"; /** * Get the languages of the user's navigator and covert it in a array of exploitable datas. * @param {string} stringData */ function parseLanguageData(stringData) { var arrayData = stringData .split(",") .map(element => element.split(/[-;]/).shift()); arrayData.push(default_lang); return arrayData; } /** * Get the language we can display. */ function getAvailableLanguage() { const langs = fs .readdirSync(distPath) .filter(f => path.basename(f, ".yml").match(/^index-[a-z]{2}\.html/)) .map(f => f.match(/^index-([a-z]{2})\.html/)[1]); return langs; } /** * Compare the languages possibles with the languages avalaible and return the matched language. * @param {array} availableLanguages * @param {array} userLanguages */ function matchLanguage(availableLanguages, userLanguages) { for (let index = 0; index < userLanguages.length; index++) { const userLanguage = userLanguages[index]; for (let index = 0; index < availableLanguages.length; index++) { const availableLanguage = availableLanguages[index]; if (userLanguage === availableLanguage) { return userLanguage; } } } } //JSON object to be added to language's cookie let langAsked = { langIndice: null }; app .use(cookieParser()) .use(express.static(distPath)) // .use('/src', express.static(join(__dirname, 'src'))) //Route for adding lang's cookie // res.cookie("langData", langAsked); .get(/^[^.]*$/, (req, rep) => { if (langAsked.langIndice == null) { var langRequired = matchLanguage( getAvailableLanguage(), parseLanguageData(req.headers["accept-language"]) ); langAsked = { langIndice: langRequired }; rep.cookie("langData", langAsked); console.log("langAsked", langAsked) } else { var langRequired = langAsked.langIndice; } rep.sendFile(join(__dirname, distPath, `/index-${langRequired}.html`)); }) .listen(port); // browser sync const bs = require("browser-sync").create(); bs.init({ files: [distPath + "/**/*"], proxy: `http://localhost:${port}`, open: false, notify: false, port: browserSyncPort // tunnel: true, });