我在我的应用中使用angular-translate。如果determinePreferredLanguage()
返回我的代码不知道的语言密钥,我该如何注册后备语言?
如果有人来自我,我想回归英语瑞典访问我的网站(语言密钥: sv )。但由于我没有在我的registerAvailableLanguageKeys
函数中列出 sv ,因此它失败了,语言键会显示给用户而不是翻译。
$translateProvider
.registerAvailableLanguageKeys(['da-dk','en-us'], {
'en_US': 'en-us',
'en_UK': 'en-us',
'da': 'da-dk',
})
.determinePreferredLanguage();
答案 0 :(得分:18)
使用通配符是最佳解决方案,您可以按如下方式设置 en _ * :
$translateProvider.useStaticFilesLoader({
prefix: 'locales/locale-',
suffix: '.json'
})
.registerAvailableLanguageKeys(['en','fr','pt'], {
'en_*': 'en',
'fr_*': 'fr',
'pt_*': 'pt',
'*': 'en'
})
.determinePreferredLanguage()
.fallbackLanguage('en');
for files:
locales/locale-en.json
locales/locale-fr.json
locales/locale-pt.json
答案 1 :(得分:5)
嘿我和你有类似的问题,我解决它的方式是:
我将此添加到我的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(),导致出现不存在的文件错误。我希望这有助于某人。
答案 2 :(得分:1)
您可以使用$translateProvider.fallbackLanguage(['en-us'])
来确定您的后备语言,并使用$translateProvider.preferredLanguage(langKey)
来设置首选语言。
另请注意,fallbackLanguage()可以将一组语言作为参数,这意味着您可以使用多种有序的后备语言。