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(); 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 } } } } app .use(express.static(distPath)) // .use('/src', express.static(join(__dirname, 'src'))) .get(/^[^.]*$/, (req, rep) => { var langRequired = matchLanguage(getAvailableLanguage(), parseLanguageData(req.headers["accept-language"])) 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, });