angular-translate - Исходный язык для определенияPreferredLanguage()

Я использую angular-translate в своем приложении. Как я могу зарегистрировать резервный язык, если determinePreferredLanguage() возвращает языковой ключ, который мой код не знает?

Я хочу вернуться на английский, если кто-то из Швеции посещает мой сайт (языковой ключ: sv). Но так как я не перечислял sv в моей функции registerAvailableLanguageKeys, он терпит неудачу, а языковые ключи отображаются пользователю вместо перевода.

$translateProvider
    .registerAvailableLanguageKeys(['da-dk','en-us'], {
        'en_US': 'en-us',
        'en_UK': 'en-us',
        'da': 'da-dk',
    })
    .determinePreferredLanguage();

Ответ 1

Использование подстановочных знаков - лучшее решение, вы можете просто установить en_ * следующим образом:

    $translateProvider.useStaticFilesLoader({
       prefix: 'locales/locale-',
       suffix: '.json'
    })   

    .registerAvailableLanguageKeys(['en','fr','pt'], {
       'en_*': 'en',
       'fr_*': 'fr',
       'pt_*': 'pt',
       '*': 'en'
    })

    .determinePreferredLanguage()

    .fallbackLanguage('en');

для файлов:

locales/locale-en.json
locales/locale-fr.json
locales/locale-pt.json

Ответ 2

Эй, у меня была аналогичная проблема с твоей, как я ее решил:

Я добавил это в свой app.config

  $translateProvider.useStaticFilesLoader({
      prefix: 'the/directory/locale-',
      suffix: '.json'
    })

  .registerAvailableLanguageKeys(['en'])

  .determinePreferredLanguage()

  .fallbackLanguage('en');

и это к моему app.run:

$rootScope.changeLanguage = function() {
  if(/[a-z]{2}_[A-Z]{2}/.test($translate.use())) {
    $translate.fallbackLanguage($translate.use().split('_')[0]);
  }
}

таким образом, если браузер обнаруживает такой язык, как fr_BE, он попытается вернуться к fr, а затем снова en, в вашем случае вы захотите sv. Также наличие registerAvailableLanguageKeys, кажется, останавливает definePreferredLanguage(), вызывая ошибку с несуществующей проблемой файла. Я надеюсь, что это помогает кому-то.

Ответ 3

Вы можете использовать $translateProvider.fallbackLanguage(['en-us']) чтобы определить ваш запасной язык, и $translateProvider.preferredLanguage(langKey) чтобы указать предпочтительный язык.

Также обратите внимание, что fallbackLanguage() может иметь массив языков в качестве параметра, что означает, что вы можете иметь несколько упорядоченных резервных языков.