Angularjs之国际化

王子腾
• 阅读 3581

Angularjs国际化

公司需要开发一个供应商后台系统,从github上找了一套模板INSPINIA,前端UI用Bootstrap,框架用的Angularjs。使用Angular是因为Angularjs是一个完善的前端MVC框架,包含带有丰富指令的模板,数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能。而且github上有很多成熟的基于angular的库,便于项目快速迭代。

项目中有外国供应商接入,所以有国际化需求,angular在国际化这块已经有成熟的插件支持Angular-translate,总结下项目中实现国际化的过程:

  • 语言

//初始化加载的模块
$translatePartialLoaderProvider.addPart('XXX');

//不同模块加载不同语言翻译数据
$translateProvider.useLoader('$translatePartialLoader', {
  urlTemplate: 'js/languages/{part}/{lang}.json'
});

//默认选择使用语言
$translateProvider.preferredLanguage('zh');
//存储上次选择语言
$translateProvider.useCookieStorage();

//当前view下调用对应的语言模块
$translatePartialLoader.addPart('orderlist');
$translate.refresh();

// 切换语言
if (store.get("language")) {
    $scope.language = store.get("language");
} else {
    $scope.language = "zh";
}
$scope.changeLanguage = function(langkey) {
   $translate.use(langkey);
   store.set('language', langkey);
};

//插值表达式使用变量
{{'ORDER_INFO' | translate}}
  • 时间

//localtime转化成utc 时间
$scope.toUTCDate = function(date) {
    var _utc = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours() + 8, date.getUTCMinutes(), date.getUTCSeconds());
    return _utc;
};

$scope.millisToUTCDate = function(millis) {
    return toUTCDate(new Date(millis));
};

{{millisToUTCDate(orders.createTime) | date : 'yyyy-MM-dd HH:mm:ss'}}

//如果使用angular 1.4.X版本
{{‘unix date’ | date : 'yyyy-MM-dd HH:mm:ss':'+0800'}}

下面是看一些比较好的Angularjs文章收集的栗子

ng-repeat

//当数组中有重复数据时,ng-repeat不起作用(Angular默认需要在数组中使用唯一索引)
$scope.arr2 = [1, 1, 3];
<ul>
    <li ng-repeat="item in arr2 track by $index">{{item}}</li>
</ul>

ng-if/ng-show


ng-if条件值为true时,才会动态创建一个dom节点;ng-show则是无论条件值为true或者false都创建这个dom节点,依靠css display属性来隐藏dom节点。

格式化函数

$scope.changeOrderState = function(orderState) {
        var stateMap = {
            'WAIT_STOCKOUT': '待发货',
            'STOCKOUTING': '发货中'
        };
        return stateMap[orderState];
    };
view:
{{changeOrderState(orders.state)}}

不会改变数据模型。

单向数据绑定

参考资料

Angular-translate
Angularjs简介
Angularjs中文指南
民工叔博客

点赞
收藏
评论区
推荐文章
Johnny21 Johnny21
4年前
30行代码实现Javascript中的 MVC
从09年左右开始,MVC逐渐在前端领域大放异彩,并终于在刚刚过去的2015年随着ReactNative的推出而迎来大爆发:AngularJS、EmberJS、Backbone、ReactJS、RiotJS、VueJS……一连串的名字走马观花式的出现
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
Angular.js 相关记录
1.AngularJS作用域文档:http://docs.angularjs.org/api/ng.$rootScope.Scope(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fdocs.angularjs.org%2Fapi%2Fng.%24rootScope.Scope)2.
Stella981 Stella981
3年前
Grunt学习笔记【8】
本文主要讲如何用Grunt打包AngularJS的模板HTML。一说明AngularJS中使用单独HTML模板文件的地方非常多,例如:自定义指令、nginclude、templateUrl等。通常这些文件都是独立的html文件,AngularJS中使用这些文件都是通过文件路径地址引用的。当用Grunt打包压缩整个项目时,如何处理这些
Stella981 Stella981
3年前
AngularJS 常用指令
AngularJS指令AngularJS有一套完整的、可扩展的、用来帮助web应用开发的指令集,它使得HTML可以转变成“特定领域语言(DSL)”,是用来扩展浏览器能力的技术之一,在DOM编译期间,和HTML关联着的指令会被检测到,并且被执行,这使得指令可以为DOM指定行为,或者改变它。AngularJS指令带有前
Stella981 Stella981
3年前
AngularJs初探
  最近着手开发一个后台系统,前端采用的是AngularJs来与后台交互,对于我们这群jquery疯狂的铁粉,遇到了不少转不过弯的问题,为了更高效的开发应用,在私下的时间收集和改造了一下AngularJS的$http服务,特此分享。$http的post.请求默认的contentTypeapplication/json.提交
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
AngularJS 指令实践
指令(Directives)是所有AngularJS应用最重要的部分。尽管AngularJS已经提供了非常丰富的指令,但还是经常需要创建应用特定的指令。这篇教程会为你讲述如何自定义指令,以及介绍如何在实际项目中使用。在这篇文章的最后,我会指导你如何使用Angular指令来创建一个简单的记事本应用。概述一个指令用来引入新的HTML语法。指令是DO
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Easter79 Easter79
3年前
SwiftUI 跨组件数据传递
作者:Cyandev,iOS和MacOS开发者,目前就职于字节跳动0x00前言众所周知,SwiftUI的开发模式与React、Flutter非常相似,即都是声明式UI,由数据驱动(产生)视图,视图也会与数据自动保持同步,框架层会帮你处理“绑定”的问题。在声明式UI中不存在命令式地让一个视图变成xxx
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(