angular tanslate

參考:https://angular-translate.github.io/

引用

    <script src="path/to/angular.js"></script>
    <script src="path/to/angular-translate.js"></script>
    <script >
       var app = angular.module('myApp', ['pascalprecht.translate']);
    </script>
 

服務(wù)商

app.config(['$translateProvider',function($translateProvider){
    //配置英文 key為en
    $translateProvider.translations('en', {
    GREETING: 'Hello world!'
    });
    // 配置中文  key 為cn
    $translateProvider.translations('cn', {
    GREETING: '你好'
    });
    //設(shè)置默認(rèn)語(yǔ)言為中文,手動(dòng)設(shè)置
    $translateProvider.preferredLanguage('cn');



    //統(tǒng)一語(yǔ)言標(biāo)簽,作用于determinePreferredLanguage方法之前(必要的,要么就不要設(shè)置)
    //$translateProvider.uniformLanguageTag('bcp47')
    //從下面地址自動(dòng)獲取首選語(yǔ)言,并設(shè)置成默認(rèn)語(yǔ)言
    // navigator.languages[0]
    // navigator.language
    // navigator.browserLanguage
    // navigator.systemLanguage
    // navigator.userLanguage
    // $translateProvider.determinePreferredLanguage();  





}])

服務(wù)

app.controller('Ctrl', ['$translate,$scope', function ($translate,$scope) {
    //運(yùn)行時(shí)修改語(yǔ)言
 $scope.changeLanguage=function(languageKey){
     $translate.use(languageKey)
 }
}]);

過(guò)濾器

<ANY>{{'TRANSLATION_ID' | translate}}</ANY>

指令

//字符串
<ANY translate>TRANSLATION_ID</ANY>  
<ANY translate="TRANSLATION_ID"></ANY>  
//變量
<ANY translate="{{toBeInterpolated}}"></ANY>  
<ANY translate>{{toBeInterpolated}}</ANY>   
//attribute
<ANY translate-attr="{ ATTRIBUTE_NAME: 'TRANSLATION_ID' }"></ANY>
//attribute 變量
$scope.attrTranslations = { alt: 'LOGO', title: 'TITLE' };
<ANY translate-attr="::attrTranslations"></ANY>
//attribute 新版寫(xiě)法
<ANY translate-attr-ATTRIBUTE_NAME="TRANSLATION_ID"></ANY>

變量替換

{
  "TRANSLATION_ID": "{{username}} is logged in."
}
//service
$translate('TRANSLATION_ID', { username: 'PascalPrecht' });
//filter
{{ 'TRANSLATION_ID' | translate:'{ username: "PascalPrecht" }' }}
//指令
<ANY translate="TRANSLATION_ID"
     translate-values='{ username: "PascalPrect"}'></ANY>
//or

<ANY translate="TRANSLATION_ID"
     translate-values="{ username: someScopeObject.username }"></ANY>
//or

<ANY translate="TRANSLATION_ID"
     translate-values="{{translationData}}"></ANY>

設(shè)置備用語(yǔ)言

比如中文,簡(jiǎn)體沒(méi)有設(shè)置key,把繁體設(shè)置成備用的

$scope.changeLanguage = function (langKey) {
  if (langKey === 'zh-cn') {
    $translate.fallbackLanguage(['zh-hk','zh-mk']);
  } else if (langKey == 'en-us') {
    $translate.fallbackLanguage('en-uk');
  }
  $translate.use(langKey);
};
//這樣設(shè)置 假如langKey是en  de就會(huì)被忽略,fr的話 de en被忽略
$scope.changeLanguage = function (langKey) {
    $translate.fallbackLanguage(['de', 'en', 'fr']);
    $translate.useFallbackLanguage(langKey);
}

類似的語(yǔ)言進(jìn)行歸類

$translateProvider
  .translations('en', { /* ... */ })
  .translations('de', { /* ... */ })
  .registerAvailableLanguageKeys(['en', 'de'], {
    'en_US': 'en',
    'en_UK': 'en',
    'de_DE': 'de',
    'de_CH': 'de',
    //批量設(shè)置
    'en_*': 'en',
    'de_*': 'de',
    'en-*': 'en',
    'de-*': 'de',
  
  })
  .determinePreferredLanguage();

持久化(應(yīng)對(duì)F5刷新頁(yè)面)

有兩種配套方案cookie 和 H5的localStorage,既然用了angularjs 估計(jì)就是為了兼容低版本瀏覽器,還是用cookie的方案吧,雖然h5沒(méi)毛病

    // $ bower install angular-translate-storage-cookie 
    $translateProvider.useCookieStorage();
    // $ bower install angular-translate-storage-local
    $translateProvider.useLocalStorage();

不使用配套方案,自己寫(xiě)一個(gè)

app.factory('customStorage', function () {
  return {
    put: function (name, value) {
      // store `value` under `name` somehow
      window.localStorage.setItem(name,value)
    },
    get: function (name) {
      // request value of `name` somehow
      return window.localStorage.getItem(name)||''
    }
  };
});

$translateProvider.useStorage('customStorage');

異步讀取語(yǔ)言文件

可以使用requirejs,參考tiny-UI 的多語(yǔ)言使用方法

配套的方式 Using urlLoader

$ bower install angular-translate-loader-url

$translateProvider.useUrlLoader('foo/bar.json');
$translateProvider.preferredLanguage('en');

實(shí)際上的請(qǐng)求 foo/bar.json?lang=en

配套的方式 Using staticFilesLoader

$ bower install angular-translate-loader-static-files

//文件名 locale-en.json
 $translateProvider.useStaticFilesLoader({
    prefix: 'locale-',
    suffix: '.json'
});
$translateProvider.preferredLanguage('en');

部分加載

應(yīng)用有很多模塊modules,為了優(yōu)化性能,我們不需要每次去加載全部的翻譯文件

/i18n/home/en.json
/i18n/home/de.json
/i18n/contact/en.json
/i18n/contact/de.json

$ bower install angular-translate-loader-partial

angular.module('home')
//錯(cuò)誤處理
.factory('MyErrorHandler', function ($q, $log) {
  return function (part, lang, response) {
    $log.error('The "' + part + '/' + lang + '" part was not loaded.');
    return $q.when({});
  };
})
.config(function ($translateProvider, $translatePartialLoaderProvider) {
    $translatePartialLoaderProvider.addPart('home');
    $translateProvider.useLoader('$translatePartialLoader', {
        urlTemplate: '/i18n/{part}/{lang}.json',
        loadFailureHandler: 'MyErrorHandler'//配置錯(cuò)誤處理
    });
    $translateProvider.preferredLanguage('en');
});

//加載另一個(gè)模塊,配合ui-router懶加載使用,體驗(yàn)更佳
angular.module('contact')
.controller('ContactCtrl', function ($scope, $translatePartialLoader, $translate) {
  $translatePartialLoader.addPart('contact');
  $translate.refresh();
});
//這樣也可以
angular.module('contact').run(function ($rootScope, $translate) {
  $rootScope.$on('$translatePartialLoaderStructureChanged', function () {
    $translate.refresh();
  });
});

運(yùn)行時(shí)懶加載

配置一個(gè)loader

$translateProvider.useLoader('customLoader', {
  settingA: 'foobar'
});
$translateProvider.useStaticFilesLoader({
  $http: {
    method: 'POST'
  }
});

使用緩存

$translateProvider.useLoaderCache(true); // default is false which means disable

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容