angular-translate - determinePreferredLanguage()的后备语言

时间:2014-08-29 10:57:36

标签: angularjs angular-translate

我在我的应用中使用angular-translate。如果determinePreferredLanguage()返回我的代码不知道的语言密钥,我该如何注册后备语言?

如果有人来自我,我想回归英语瑞典访问我的网站(语言密钥: sv )。但由于我没有在我的registerAvailableLanguageKeys函数中列出 sv ,因此它失败了,语言键会显示给用户而不是翻译。

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

3 个答案:

答案 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()可以将一组语言作为参数,这意味着您可以使用多种有序的后备语言。