Проблемы с определением языка браузера и его использованием с i18next

Я работаю над веб-приложением. Я использую i18next, и он не определяет язык, пока я не укажу "lng" в параметрах. Если я использую "navigator.language || navigator.userLanguage" и все в порядке с Chrome. Возвращает что-то вроде "en". Но, например, Firefox возвращает «en-GB». Я не использую региональный перевод, и i18next не перенаправляет "en-GB" на "en". Итак, система не работает.

Вот мой код:

$(document).ready(function(){
      i18next.use(i18nextXHRBackend);
      i18next.init({
          'debug': true,
          'lng': navigator.language || navigator.userLanguage,
          'fallbackLng': 'en',
          'load': 'currentOnly',
          'backend': {
            loadPath: 'locales/{{lng}}/{{ns}}.json'
          }
      }, function() {
          jqueryI18next.init(i18next, $);
          $('body').localize();
      });
    });


person mutlucan96    schedule 22.07.2016    source источник
comment
Вероятно, это не очень хорошо поддерживаемая функция… Достаточно ли navigator.language.substr(0, 2)? Таким образом, en-GB превращается в en… Это действительно зависит от списка значений, которые i18next принимает для lng.   -  person Aurel Bílý    schedule 22.07.2016
comment
@ AurelBílý Это работает. Спасибо. Итак, с моим кодом все в порядке?   -  person mutlucan96    schedule 22.07.2016


Ответы (1)


i18next поддерживает региональные языки ... вот в чем суть локализации.

если вы хотите поддерживать только языки без набора регионов load: 'languageOnly':

$(document).ready(function(){
  i18next.use(i18nextXHRBackend);
  i18next.init({
      'debug': true,
      'load': 'languageOnly',
      'lng': navigator.language || navigator.userLanguage,
      'fallbackLng': 'en',
      'load': 'currentOnly',
      'backend': {
        loadPath: 'locales/{{lng}}/{{ns}}.json'
      }
  }, function() {
      jqueryI18next.init(i18next, $);
      $('body').localize();
  });
});

это позволит избежать приема en-GB для поиска и использовать только en. Без установки этого i18next все равно будет выводить тот же результат, но также попытается загрузить переводы en-GB.

person jamuhl    schedule 09.05.2017
comment
если вы хотите получить короткую версию позже? как мне позвонить? - person a.barbieri; 13.03.2018