17

我在我的应用程序中使用角度翻译determinePreferredLanguage()如果返回我的代码不知道的语言键,我如何注册后备语言?

如果来自瑞典的人访问我的网站(语言键: sv),我想回退到英语。但是由于我没有在我的函数中列出svregisterAvailableLanguageKeys,所以它失败了,并且向用户显示了语言键而不是翻译。

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

3 回答 3

20

使用通配符是最好的解决方案,你可以设置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
于 2015-05-27T20:15:43.357 回答
6

嘿,我遇到了和你类似的问题,我解决的方法是:

我将此添加到我的 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 似乎停止了 determinePreferredLanguage() 导致不存在文件问题的错误。我希望这可以帮助别人。

于 2015-02-13T16:40:02.380 回答
1

您可以使用它$translateProvider.fallbackLanguage(['en-us'])来确定您的后备语言,并$translateProvider.preferredLanguage(langKey)设置您的首选语言。

另请注意,fallbackLanguage() 可以有一个语言数组作为参数,这意味着您可以有几种有序的后备语言。

于 2015-01-16T19:30:48.180 回答