簡體   English   中英

angular-translate - determinePreferredLanguage()的后備語言

[英]angular-translate - Fallback language for determinePreferredLanguage()

我在我的應用程序中使用angular-translate 如果determinePreferredLanguage()返回我的代碼不知道的語言密鑰,我如何注冊后備語言?

如果瑞典的某個人訪問我的網站(語言密鑰: sv ),我想回到英語。 但是由於我沒有在registerAvailableLanguageKeys函數中列出sv ,它失敗了,語言鍵顯示給用戶而不是翻譯。

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

使用通配符是最佳解決方案,您可以按如下方式設置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

嘿我和你有類似的問題,我解決它的方式是:

我把它添加到我的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(),導致出現不存在的文件錯誤。 我希望這可以幫助別人。

您可以使用$translateProvider.fallbackLanguage(['en-us'])來確定您的后備語言,並使用$translateProvider.preferredLanguage(langKey)來設置您的首選語言。

另請注意,fallbackLanguage()可以將一組語言作為參數,這意味着您可以使用多種有序的后備語言。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM