Экспресс, используя одни и те же маршруты с различным импортом - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь сделать многоязычный сайт.Я решил пойти с объектами данных, чтобы заполнить весь необходимый текст.Маршруты, которые я использую для двух языков, абсолютно одинаковы, только с разницей в импорте.Есть ли способ сделать это без дублирования кода?

Движок шаблонов - Express Handlebars, поэтому, если есть другое решение для создания многоязычного веб-сайта, я открыт для его реализации :) Спасибо взаранее, что нашли время, чтобы прочитать это.

Код в моих маршрутах для языка Sl:

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;

И английская версия

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;

1 Ответ

1 голос
/ 02 июля 2019

Вы можете использовать локаль с помощью параметров url, нет?

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...