对于一个用户群面向全球的的应用来说,不得不考虑国际化的问题。当然,即便是刚刚起步的小应用,如果有心搞大,也应该提前设计国际化的方案。

本篇讲述使用AngularJS构建的应用的简单国际化方案,准确的说,是国际化服务....

i18n与l10n

i18n是Internationalization得缩写,取第一个字母和最后一个字母,以及中间省略的字母数目,即i18n,类似的l10n是Localization得意思。

通常i18n是国际化的意思,就是在不改变源码的情况下,通过某些简单的配置就能适应不同的语言环境。

l10n,则是本地化的意思,是针对某一些语言进行定制化。

一般一个成熟的产品都要考虑国际化的方案,这样未来的市场容易扩展,代码也容易维护,因此大多也会考虑国际化的方案。

Angular-translate

angular-translate是一款应用简单、上手容易的国际化服务。它提供了很多的特性:

1 以组件化的方式形成国际化

2 异步加载国际化数据

3 使用messageFormat支持多元化

4 使用接口提高可扩展性

上面就是Angular-translate的抽象图,可以看到它的最上面是指令,然后是过滤器,最下面是服务....

也就是说,transalte中指令其实是通过过滤器实现的,过滤器其实是通过服务实现的。

右边的interpolator是修改器,即会根据国际化的数据修改展示的值。最下面是几种异步加载器,可以异步加载国际化数据,提升应用的性能。最左边提供了几种持久化方案,如果应用需要记住用户的选择或者默认设定语言环境,则可以使用这种这种服务,需要额外安装需要的包。

实践

1 下载

鉴于国内的网络环境,还是推荐直接去官网下载zip压缩包吧。当然如果网络允许,也可以直接用bower下载。

官方下载地址

2 引入

由于angular-translate需要使用angular,因此需要在引入angular-translate之前先引入angular。

如果直接使用<script>标签,那么很简单,只要保证angular在angular-translate之前引入即可:

<head><script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script><script src="bower-angular-translate-2.8.1/angular-translate.js"></script>
</head>

如果使用了requireJS这种异步加载服务,那么需要声明angular-translate与angular的依赖关系,例如:

  shim: {
....angular_translate:{deps: ['angular'],exports: 'angular_translate'},
....

3 注入

var app = angular.module("MyApp",['pascalprecht.translate']);

这样angular后续加载的模块都会注入一个translate服务,而不需要每个文件都声明。

4 配置国际化方案

app.config(['$translateProvider',function($translateProvider){$translateProvider.translations('en',{'TITLE':'Hello','FOO':'This is a paragraph'});$translateProvider.translations('zh',{'TITLE':'你好','FOO':'这是一幅图'});$translateProvider.preferredLanguage('zh');}]);

使用服务$translateProvider,配置多种语言方案,可以设置默认的语言。

当然,一般国际化都不会直接写在上面的函数中,可以通过angular声明一个模块或者通过require引入一个自执行的方法,方法返回国际化的JSON对象,这样直接引入:

$translateProvider.translations('en',i18n_en);
$translateProvider.translations('zh',i18n_zh);

5 使用国际化

<h1>{{ 'TITLE' | translate }}</h1>
<span translate="FOO"></span>

第一种是以过滤器的方式使用;第二种是指令的方式使用。

6 全部代码

<!DOCTYPE html>
<html ng-app="MyApp">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script src="http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"></script><script src="bower-angular-translate-2.8.1/angular-translate.js"></script>
</head>
<body><div><h1>{{ 'TITLE' | translate }}</h1><span translate="FOO"></span></div><script type="text/javascript">var app = angular.module("MyApp",['pascalprecht.translate']);app.config(['$translateProvider',function($translateProvider){$translateProvider.translations('en',{'TITLE':'Hello','FOO':'This is a paragraph'});$translateProvider.translations('zh',{'TITLE':'你好','FOO':'这是一幅图'});$translateProvider.preferredLanguage('zh');}]);</script>
</body>
</html>

参考

【1】AngularTranslate:https://angular-translate.github.io/

AngularJS 国际化——Angular-translate相关推荐

  1. AngularJS 国际化 支持记录语言刷新后语言不变

    AngularJS 国际化 支持记录语言刷新后语言不变 <!DOCTYPE html> <html ng-app='app'> <head><meta cha ...

  2. AngularJS国际化配置

    2019独角兽企业重金招聘Python工程师标准>>> AngularJS国际化配置 下载angular-translate 下载zip包:https://github.com/an ...

  3. [Angularjs]国际化

    写在前面 在项目中,有用到国际化,跟着就了解了下使用angularjs实现的国际化,这里做一下记录. 系列文章 [Angularjs]ng-select和ng-options [Angularjs]n ...

  4. l10n php download,AngularJs 国际化(I18n/L10n)详解

    一.I18n and L10n in AngularJS 1. 什么是I18n和L10n? 国际化(Internationalization),简称I18n,是让产品开发在一个他们可以简单地对产品进行 ...

  5. AngularJS与Angular的区别

    指同一事物,版本的区别,叫法不同 Angular2.0之前的版本(1.x)叫做AngularJS 1.x的使用是引入AngularJS的js文件到网页. 2.0之后,就是完全不同了. Angular2 ...

  6. 【AngularJs】Angular双向数据绑定

    1.什么是双向数据绑定 双向数据绑定: Angular实现了双向绑定机制.所谓的双向绑定,无非是从界面的操作能实时反映到数据,数据的变更能实时展现到界面.即数据模型(Module)和视图(View)之 ...

  7. 利用angular结合translate为项目实现国际化

    前言 利用H5项目第一版本已经上线,话说有了第一期就有了第二期,这不要为第二期做准备了,老大发话第一件事就要利用Angular JS实现项目的国际化以及后续要借助这个框架来实现其他功能,好吧我表示没怎 ...

  8. [Angularjs]angular ng-repeat与js特效加载先后导致的问题

    写在前面 最近在项目中遇到这样的一个前端的bug,在ng-repeat中绑定的图片,有一个晃动的特效,在手机端浏览的时候,图片有时候会正常展示,有时就展示不出来.当时猜测是因为angularjs与特效 ...

  9. angularjs实现国际化

    随着技术的发展,越来越多的项目需要适应市场需求,拓展海外市场必不可少的就是支持多国语言,庆幸的是angularjs提供了实现国际化的功能,那么就让我们来看看angularjs是如何实现国家化的呢? 1 ...

最新文章

  1. NCEPU:线下组队学习周报(008)
  2. python 逻辑回归
  3. iphone7像素_iPhone 7能否再战三年?这几点因素你得考虑到!
  4. android-6.0不支持FloatMath.sqrt(x * x + y * y)
  5. TensorFlow 深度学习中文第二版·翻译完成
  6. 结构型设计模式在公司项目中的运用实践
  7. 视频怎么插入慢动作?
  8. cdoj 1092 韩爷的梦
  9. Jquery 中 $('obj').attr('checked',true)失效的几种解决方案
  10. LVS-Linux服务器集群系统(一)
  11. RDKit|通过Recap和BRICS对分子拆解与合成
  12. spring aop的术语
  13. HighlightPlus物体自发光
  14. 国家标准计算机软件测试文档范文,软件测试相关国家标准.doc
  15. python语句print(0xa+0xb)_Python语句print(0xA+0xB)的输出结果为()
  16. 怎么绕过付费验证获取作文网站上的内容
  17. python之json和dick数据类型
  18. unity3d坑收集
  19. 图像识别算法研究(1)---二值化概述---2011-03-14
  20. oracle exadata x6 -m,Oracle新推Exadata X6数据库云平台

热门文章

  1. 小蓝发布带屏幕的单车,瞄准精准广告媒体平台
  2. ReactiveCocoa
  3. HashMap实现原理
  4. loadruner中加中Java_Script
  5. Gitlab VM安装过程
  6. 【转载】linux环境变量PS1的简介
  7. CF里面的资源载入问题
  8. PyCUDA学习:gpuarray与kernel的抽象原型
  9. python机器学习入门(Day11:ANN)
  10. 阿里巴巴业务平台事业部总负责人墙辉:加速构建国际电商体系