Многоязычное экспресс-приложение
Интересно, какой был бы лучший способ реализовать несколько версий/языков одного и того же контента в одном и том же макете в express.
Должен ли я просто сделать это?
app.get("/", function(req, res) {
res.render(language + "/index");
});
Или есть более умный/лучший способ?
Ответы
Ответ 1
Я бы предложил оставить только один шаблон, как если бы вы использовали один шаблон для каждого языка, он быстро выйдет из-под контроля, не говоря уже о дублировании большого количества контента (и небольшого количества "логики", которые вы бы вложили в шаблон). Многие приложения используют инструмент, называемый gettext, для выполнения операции интернационализации. Для него есть node.js библиотека https://github.com/DanielBaulig/node-gettext
В качестве альтернативы существует также i18n-node. Похоже, что он немного интегрирован с express js.
Ответ 2
i18n-node - это самый простой и самый большой модуль, который вы должны использовать. Вы можете использовать непосредственно в Javascript-коде или с помощью шаблонов Jade/Handlebar с выражением js.
Почему вы должны использовать i18n?
- Автоматическое определение локали из браузера по заголовку, файлу cookie или параметру запроса в зависимости от вашей настройки.
- Он также содержит примеры.
- Он автоматически генерирует
en.json
по умолчанию внутри ./locales/
. Это действует как основной файл для начала создания новых переводов.
- Поддерживает особые и множественные формы
- Поддержка параметров:
__('Hello %s', 'Marcus')
возвращает Hallo Marcus
Ответ 3
Я думал, что мы можем определить json-объекты в lang-папке, например, en.js, fr.js, и эти json файлы содержат пары ключевых значений, чем рендеринг шаблона в соответствии с настройкой языка пользователя, настройки lang могут быть в базе данных.
И мы можем сохранить этот fr.js или что-нибудь еще в res.locals для вызова каждого шаблона.
Это подходит?