@s_katala

Что означает ошибка req.setLocale is not a function?

Пытаюсь сделать мультиязычность на i18n
получаю ошибку если перехожу на domains.dev/en или ru
ошибка
TypeError: req.setLocale is not a function
    at init (B:/OSPanel/domains/domains.dev/frontend/server/locales/services/i18n_urls.js:24:13)

в app.js (взял отсюда Github)
services.i18nUrls.configure(app, i18n, {
  locales: ['ru', 'en'],
  defaultLocale: 'ru',
  cookie: process.env.npm_package_name + '_i18n_cookie',
  indent: ' '
});

services
module.exports = {
  configure: function(app, i18n, config) {
    app.locals.i18n = config;
    i18n.configure(config);
  },
  init: function(req, res, next) {
    var rxLocale = /^\/(\w\w)/i;
    if (rxLocale.test(req.url)){
      var locale = rxLocale.exec(req.url)[1];
      if (req.app.locals.i18n.locales.indexOf(locale) >= 0)
        req.setLocale(locale);
    }
    //else // no need to set the already default
    next();
  },
  url: function(app, url) {
    var locales = app.locals.i18n.locales;
    var urls = [];
    for (var i = 0; i < locales.length; i++)
      urls[i] = '/' + locales[i] + url;
    urls[i] = url;
    return urls;
  }
};
  • Вопрос задан
  • 54 просмотра
Решения вопроса 2
@levchak0910
answer.correct ? press({correct: true}) : next()
Посмотрите в сторону i18n-2. Может будет удобней для Вас.
Ответ написан
@s_katala
Решил так:
i18n.expressBind(app, {
  locales: ['ru', 'en'],
  directory: __dirname + '/locales',
  extension: '.js',
  defaultLocale: 'ru',
  cookieName: 'lang',
});
app.use(function(req, res, next) {
  if(req.query.lang) {
    req.i18n.setLocaleFromQuery();
    res.cookie('lang', req.i18n.getLocale());
  } else {
    req.i18n.setLocaleFromCookie();
  }
  next();
});
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
BP Mobile Москва
До 250 000 руб.
GOR Санкт-Петербург
от 110 000 до 150 000 руб.
21 июля 2018, в 01:45
800 руб./в час
20 июля 2018, в 23:46
800 руб./за проект