浅析 AngularJS 全球化最优方案(六)

本节是最后一节关于AngularJS的国际化和本地化方案讨论,具体会和大家聊下目前有哪些第三方库,以及优缺点。

首先谈谈国际化,AngularJS自带国际化支持,提供了一些语言的国际化资源文件文件,具体的覆盖面,大家可以去官网查询。

下面聊聊怎么使用这些资源文件,一般来说会分静态加载和动态加载,静态加载可以使用预绑定、单独加载。预绑定是将国际化资源文件和 AngularJS 库文件进行合成,比如在Linux 里面可以使用:

cat angular.js i18n/angular-locale_de-ge.js > angular_de-ge.js

也可以单独加载,在index.html里面添加引用:

<html ng-app>

<head>

  ….

   <script src="angular.js"></script>

   <script src="i18n/angular-locale_de-ge.js"></script>

   ….

</head>

</html>

除静态加载,当然也可以使用 grunt 做模板渲染。但是通常情况下,会使用动态加载方式:

    <!-- i18n -->
    <script type="text/javascript"
            src="lib/angular/i18n/<%= (new com.hero.admin.ui.i18n.JSResourceResolver("lib/angular/i18n","angular-locale_")).geti18NFile(request) %>">
    </script>

引入AngularJS提供的资源文件后,在具体的实现中可以使用过滤器对原始数据进行国际化处理:

<!document html>
<html ng-app>
  <head>
    <meta charset="utf-8">
    <title>locale test</title>
    <script src="../../build/angular.js"></script>
    <script src="../../build/i18n/angular-locale_de.js"></script>
    <script>
      function AppCntl($scope){
        $scope.input = 234234443432;
      }
    </script>
  </head>
  <body ng-controller="AppCntl">
    <input type="text" ng-model="input"><br>
    date: {{input | date:"medium"}}<br>
    date: {{input | date:"longDate"}}<br>
    number: {{input | number}}<br>
    currency: {{input | currency }}
  </body>
</html>
以上是国际化部分,基本的国际化点这样实现是没有问题的,如果有一些特殊的国际化点,AngularJS 国际化资源文件没有提供,可以参考包含IBM cldr的相关JS库。

AngularJS 在本地化的支持中,常用的第三方库有angular i18n, angular-translate 和angular-gettext。这几个库的特点如下:

Angular i18n:

  • 在项目设计的时候就需要考虑到国际化。
  • 此库是绝对的 “angular way”,100%的国际化处理都是在前端完成。
  • 使用i18n的过滤器和指令。
  • 使用内联替换
  • 支持单复数
  • 支持性别区分的替换
  • 有第三方翻译流程处理工具:grunt-angular-localization
参考资料:
  • https://docs.angularjs.org/guide/i18n
  • https://www.youtube.com/watch?v=6I_rONDvHq0

Angular-translate:

  • 基于key-value模式的本地化方式
  • 使用国际化的过滤器和指令
  • 插值服务,Non-angular style,使用变量替换
  • 支持单复数
  • 可以独立获取浏览器 Locale,但存在Bug
  • 支持异步加载和同步加载
参考资料:
  • https://angular-translate.github.io/
  • https://www.youtube.com/watch?v=9CWifOK_Wi8
Angular-gettext
  • 自动使用value当做字符串的key
  • 提供脚本自动采取需要翻译的字符串
  • 插值服务,使用angular style
  • 支持指令和过滤器以及直接使用JS调用服务
  • 支持单复数
  • 支持上下文翻译
  • 支持添加注释
  • 第三方工具较多
参考资料:
  • https://angular-gettext.rocketeer.be/
第3种方案有其独特的优点,但是在实际使用过程中也发现有一些问题:
  • source 中有换行的情况,抽取后使用了grunt 的脚本htmlmin压缩了html文件,这样会导致调用时key匹配不上的问题,解决方案是尽量使用规范的html书写格式,删除不必要的换行。
  • "&gt; &lt;"等字符包含在文本中时,提取到po文件时会自动转成明文“<>”,这样是翻译完后,会导致key无法匹配的问题,解决方案是做升级,在高版本中已经有相应的机制,会在替换函数里面加转义机制,如果是老版本只能重写此函数,但是建议升级,不要本地维护这个库。
至此,AngularJS 的国际化和本地化就告一段落,接下来会给大家分享Unicode Bidi Algorithm的一些知识。






 




  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值