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() может иметь массив языков в качестве параметра, что означает, что вы можете иметь несколько упорядоченных резервных языков.