AngularJS开发指南7:AngularJS本地化,国际化,以及(2)

在这个例子中,你需要通过自己指定钱币过滤器来替换默认的钱币符。这个过滤器要有一个你自己指定的钱币符,比如USD$1,000.00。这样,AngularJS就总是会显示'USD$1000'并且忽略掉地区的转换。

还有一点要记住,译文的长度可能和原文有很大区别。比如说,June 3, 1977在西班牙会被翻译成3 de junio de 1977。而且还有更多极端的情况,所以,在对你的应用进行国际化时,你需要好好的写CSS规则并且做好测试。

最后要注意的是,AngularJS使用的是浏览器的时区设置。所以一个相同的应用会根据不同的设备显示不同的时间格式。Javascript和AngularJS都不能支持使用统一的开发者制定的时区。

兼容IE低版本浏览器

如果你要让你的AngularJS应用兼容IE8和IE8以下版本的话,你需要仔细阅读下面的知识点。

要让你的AngularJS应用在IE中正常运行你必须:

确保JSON字符串能被正常解析(IE7需要),你可以使用JSON2或者JSON3(这两个东西是第三方库,可以在github上下载)来实现。

你不能使用自定义的元素标签,如<ng:view>(你只能使用属性的形式,如<div ng-view>),或者,

如果你用了自定义的标签名,那你必须按照以下步骤做才能保证IE正常运行:

<html xmlns:ng="http://angularjs.org"> <head> <!--[if lte IE 8]> <script> document.createElement('ng-include'); document.createElement('ng-pluralize'); document.createElement('ng-view'); // Optionally these for CSS document.createElement('ng:include'); document.createElement('ng:pluralize'); document.createElement('ng:view'); </script> <![endif]--> </head> <body> ... </body> </html>

上面的代码需要知道的是:

xmlns:ng - 命名空间 - 你需要为你使用或者准备使用的每一个自定义标签准备一个命名空间。

document.createElement(你的标签名) - 自定义标签的创建 - 因为这只是老版本IE的一个问题,所以你需要根据情况使用。对于每一个你没有使用命名空间或者HTML中没有定义的标签,你需要预先声明它才能使老版本IE正常工作。

还有一些细节需要注意:

IE处理非标准标签名会产生问题。问题可以分为两类,每类都有自己的解决方法。

如果标签名是以my:前缀开始的: 这会被当成是一个XML的命名空间,并且必须使用一个命名空间来声明。

如果标签没有:符号,但它又不是一个标准的HTML标签。那么就必须预先使用document.createElement('my-tag')来创��它。

如果你准备使用css选择器来对自定义标签添加样式,那么你就必须先用document.createElement('my-tag')来创建一下,不管有没有XML命名空间。

值得庆幸的是,IE的这种限制只存在标签名上,标签属性名没有限制。所以,当在IE上使用<div my-tag your:tag> </div>.这样的形式时,没有特殊要求。

如果我没按上面说的做会怎么样?

假设你用了一个非HTML标准的标签,暂时称为mytag(称为my:tag 或者 my-tag都可以):

<html> <body> <mytag>some text</mytag> </body> </html>

它本该被解析成下面这样的DOM:

#document +- HTML +- BODY +- mytag +- #text: some text

期望的结果是BODY元素包含一个叫做mytag的子元素。这个子元素同时包含文本"some text"。

但是IE不会这样解析(如果没有按之前修复IE的步骤做的话):

#document +- HTML +- BODY +- mytag +- #text: some text +- /mytag

在IE中,BODY元素有了三个子元素:

(1)一个自闭合的标签mytag。和自闭合标签一样。最后的关闭符/是可选的,但是标签并不允许包含子元素。所以浏览器会将some text解析成兄弟节点。

(2)一个纯文字的节点。这本来应该是上面的mytag的子节点,而不是兄弟节点。

(3)一个不合法的自闭合标签/mytag。 因为标签名不允许含有/,所以说它是非法的。另外这个关闭标签不应该是DOM的一部分,因为它是用来描述标签的结尾位置的。

AngularJS权威教程 清晰PDF版 

希望你喜欢,并分享我的工作~带你走近AngularJS系列

带你走近AngularJS - 基本功能介绍

带你走近AngularJS - 体验指令实例

带你走近AngularJS - 创建自定义指令

如何在 AngularJS 中对控制器进行单元测试

在 AngularJS 应用中通过 JSON 文件来设置状态

AngularJS 之 Factory vs Service vs Provider

AngularJS —— 使用 ngResource、RESTful APIs 和 Spring MVC 框架提交数据

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c35833a922a4859b2586de61a08b3bd8.html