Reputation: 119
I'm trying to make the a multi-language website. I've decided to go with data objects, to fill in all the text necessary. The routes I'm using for the 2 languages are exactly the same with only a difference in the import. Is there any way to make this happen without code duplication?
The templating engine is Express Handlebars, so if there is another solution for making a website multi-language, I'm open to implementing it :) Thanks in advance for taking the time to read this.
The code in my routes for Sl language:
const express = require("express"),
router = express.Router(),
data = require("../Views/res/lang/sl");
router.get("/", (req, res) => {
data.Home = setupDataObject(data.Home, req.originalUrl, "Home");
res.render("homepage", data.Home);
});
router.get("/About", (req, res) => {
data.About = setupDataObject(data.About, req.originalUrl, "About");
res.render("About", data.About);
});
function setupDataObject(data, url, active) {
data.current = url.substring(4);
data.active = { [active]: true };
return data;
}
module.exports = router;
And the English version
const express = require("express"),
router = express.Router(),
data = require("../Views/res/lang/en");
router.get("/", (req, res) => {
data.Home = setupDataObject(data.Home, req.originalUrl, "Home");
res.render("homepage", data.Home);
});
router.get("/About", (req, res) => {
data.About = setupDataObject(data.About, req.originalUrl, "About");
res.render("About", data.About);
});
function setupDataObject(data, url, active) {
data.current = url.substring(4);
data.active = { [active]: true };
return data;
}
module.exports = router;
Upvotes: 1
Views: 85
Reputation: 30975
You can handle the locale in using with the url params, no ?
const express = require("express"),
router = express.Router();
router.get("/:locale/", (req, res) => {
const data = require("../Views/res/lang/" + locale);
data.Home = setupDataObject(data.Home, req.originalUrl, "Home");
res.render("homepage", data.Home);
});
router.get("/:locale/About", (req, res) => {
const data = require("../Views/res/lang/" + locale);
data.About = setupDataObject(data.About, req.originalUrl, "About");
res.render("About", data.About);
});
function setupDataObject(data, url, active) {
data.current = url.substring(4);
data.active = { [active]: true };
return data;
}
module.exports = router;
Upvotes: 1