[英]angular-translate - Using determinePreferredLanguage with user language setting?
[英]angular-translate - Fallback language for determinePreferredLanguage()
我在我的應用程序中使用angular-translate 。 如果determinePreferredLanguage()
返回我的代碼不知道的語言密鑰,我如何注冊后備語言?
如果瑞典的某個人訪問我的網站(語言密鑰: sv ),我想回到英語。 但是由於我沒有在registerAvailableLanguageKeys
函數中列出sv ,它失敗了,語言鍵顯示給用戶而不是翻譯。
$translateProvider
.registerAvailableLanguageKeys(['da-dk','en-us'], {
'en_US': 'en-us',
'en_UK': 'en-us',
'da': 'da-dk',
})
.determinePreferredLanguage();
使用通配符是最佳解決方案,您可以按如下方式設置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
嘿我和你有類似的問題,我解決它的方式是:
我把它添加到我的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似乎會停止confirmPreferredLanguage(),導致出現不存在的文件錯誤。 我希望這可以幫助別人。
您可以使用$translateProvider.fallbackLanguage(['en-us'])
來確定您的后備語言,並使用$translateProvider.preferredLanguage(langKey)
來設置您的首選語言。
另請注意,fallbackLanguage()可以將一組語言作為參數,這意味着您可以使用多種有序的后備語言。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.