【问题标题】:angular-translate - Fallback language for determinePreferredLanguage()angular-translate - determinePreferredLanguage() 的后备语言
【发布时间】:2017-03-15 18:15:15
【问题描述】:

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

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

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

【问题讨论】:

  • $translateProvider.fallbackLanguage(['en-us'])? angular-translate.github.io/docs/#/api/…
  • @Philipp fallbackLanguage() 解决了另一个问题。如果翻译表没有特定键,则将使用备用语言的翻译。我的问题是,如果具有未知语言环境的用户访问我的网站,我希望有一个后备,应该选择英语作为首选语言。
  • 嗨@swenedo,你能接受我的回答吗? 2 年后,我相信这是正确的。
  • @Drix 当然 :-) 谢谢!

标签: angularjs angular-translate


【解决方案1】:

使用通配符是最好的解决方案,你可以设置 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

【讨论】:

  • 太棒了!我还有一个“*”通配符可以返回“en”
【解决方案2】:

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

我将此添加到我的 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() 导致不存在文件问题的错误。我希望这对某人有所帮助。

【讨论】:

  • .determinePreferredLanguage() 和 .fallbackLanguage('en') 的顺序很重要。我把它们反过来了,但没有用。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多