Newer
Older
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
}
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,
});