Экспресс-маршрутизация - перенаправление на основе локали

1

Я пытаюсь настроить маршрутизацию для своего многоязычного веб-сайта. Моя цель - перенаправить пользователя на основе его языка (который уже обнаружен).

Это мой текущий незавершенный код:

app.get('/(:lang)?', (req, res, next) => {
    const urlLang = req.params.lang || 'en'; // English is default
    const userLang = 'nl'; // Will be detected

    if (urlLang !== userLang) {
        // Wrong URL
        res.redirect(userLang + req.url);
    } else next();
});

В этом примере я пытаюсь вычесть запрошенный язык из url (urlLang). Если этот язык не соответствует языку пользователей, он должен перенаправить на правильный URL.

Несколько примеров того, что я пытаюсь достичь:

  • Пользователь с языком en запросов /: Нет редирект
  • Пользователь с языком nl запросов /: Перенаправление на /nl
  • Пользователь с en языка en /foo/bar: нет перенаправления
  • Пользователь с языком nl request /foo/bar: перенаправление на /nl/foo/bar

Мой текущий код работает только в том случае, если запрошенный путь / или /:lang, но не для таких маршрутов, как /home или /nl/home. Я не вижу, как это может быть достигнуто с помощью выражения. Любая помощь будет высоко ценится!


Обратите внимание, что я уже настроил все остальное, например, определение языка, логику перевода, представления и т.д. Я только спрашиваю о маршрутизации.

Теги:
express
localization
routing

1 ответ

1

Если вы знаете все языковые идентификаторы, которые необходимо заранее поддерживать, это должно работать:

api.get('/(:lang(en|nl)/)?*', ( req, res, next ) => {

Ещё вопросы

Сообщество Overcoder
Наверх
Меню