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

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)


Cia*_*rge 5

嘿我和你有类似的问题,我解决它的方式是:

我把它添加到我的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(),导致出现不存在的文件错误.我希望这可以帮助别人.

  • .determinePreferredLanguage()和.fallbackLanguage('en')的顺序至关重要.我反过来让它们无法正常工作. (3认同)