swe*_*edo 16 angularjs angular-translate
我在我的应用程序中使用angular-translate.如果determinePreferredLanguage()返回我的代码不知道的语言密钥,如何注册后备语言?
如果瑞典的某个人访问我的网站(语言密钥:sv),我想回到英语.但由于我没有在我的函数中列出svregisterAvailableLanguageKeys,它失败了,语言键显示给用户而不是翻译.
$translateProvider
.registerAvailableLanguageKeys(['da-dk','en-us'], {
'en_US': 'en-us',
'en_UK': 'en-us',
'da': 'da-dk',
})
.determinePreferredLanguage();
Run Code Online (Sandbox Code Playgroud)
Adr*_*oni 18
使用通配符是最佳解决方案,您可以按如下方式设置en_*:
$translateProvider.useStaticFilesLoader({
prefix: 'locales/locale-',
suffix: '.json'
})
.registerAvailableLanguageKeys(['en','fr','pt'], {
'en_*': 'en',
'fr_*': 'fr',
'pt_*': 'pt',
'*': 'en'
})
.determinePreferredLanguage()
.fallbackLanguage('en');
Run Code Online (Sandbox Code Playgroud)
对于文件:
locales/locale-en.json
locales/locale-fr.json
locales/locale-pt.json
Run Code Online (Sandbox Code Playgroud)
嘿我和你有类似的问题,我解决它的方式是:
我把它添加到我的app.config中
$translateProvider.useStaticFilesLoader({
prefix: 'the/directory/locale-',
suffix: '.json'
})
.registerAvailableLanguageKeys(['en'])
.determinePreferredLanguage()
.fallbackLanguage('en');
Run Code Online (Sandbox Code Playgroud)
这到我的app.run:
$rootScope.changeLanguage = function() {
if(/[a-z]{2}_[A-Z]{2}/.test($translate.use())) {
$translate.fallbackLanguage($translate.use().split('_')[0]);
}
}
Run Code Online (Sandbox Code Playgroud)
这样,如果浏览器检测到像fr_BE这样的语言,它将尝试回退到fr然后再次en,在你的情况下你会想要sv.同时拥有registerAvailableLanguageKeys似乎会停止confirmPreferredLanguage(),导致出现不存在的文件错误.我希望这可以帮助别人.