惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

B
Blog RSS Feed
Spread Privacy
Spread Privacy
T
Threatpost
C
Cisco Blogs
P
Palo Alto Networks Blog
AI
AI
Cyberwarzone
Cyberwarzone
NISL@THU
NISL@THU
P
Privacy & Cybersecurity Law Blog
G
GRAHAM CLULEY
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
Latest news
Latest news
AWS News Blog
AWS News Blog
D
Docker
S
SegmentFault 最新的问题
博客园 - 聂微东
WordPress大学
WordPress大学
Vercel News
Vercel News
S
Securelist
爱范儿
爱范儿
J
Java Code Geeks
Know Your Adversary
Know Your Adversary
S
Schneier on Security
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
Last Week in AI
Last Week in AI
D
DataBreaches.Net
宝玉的分享
宝玉的分享
D
Darknet – Hacking Tools, Hacker News & Cyber Security
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
K
Kaspersky official blog
美团技术团队
博客园 - 叶小钗
阮一峰的网络日志
阮一峰的网络日志
量子位
博客园_首页
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
Google Online Security Blog
Google Online Security Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
腾讯CDC
T
Threat Research - Cisco Blogs
雷峰网
雷峰网
有赞技术团队
有赞技术团队
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed
S
Security Affairs

张鑫旭-鑫空间-鑫生活

1分钟速度了解text-align match-parent声明 « 张鑫旭-鑫空间-鑫生活 光标的形状也能设置了,就是CSS caret-shape属性 « 张鑫旭-鑫空间-鑫生活 pretext与文字四面环绕效果的实现 « 张鑫旭-鑫空间-鑫生活 JSON.rawJSON方法的作用是什么? « 张鑫旭-鑫空间-鑫生活 如何使用CSS判断鼠标从哪个方向进入元素? « 张鑫旭-鑫空间-鑫生活 借助mediabunny纯JS实现视频水印、剪裁、合成等功能 « 张鑫旭-鑫空间-鑫生活 务必谨慎使用JS WeakRef弱引用 « 张鑫旭-鑫空间-鑫生活 CSS六边形头像的实现与蜂巢布局 « 张鑫旭-鑫空间-鑫生活 CSS corner-shape与背景底纹技术 « 张鑫旭-鑫空间-鑫生活 浅学WebTransport API:下一代Web双向通信技术 « 张鑫旭-鑫空间-鑫生活 HTML dialog元素新支持了closedBy属性 « 张鑫旭-鑫空间-鑫生活 HTML interestfor属性与悬停popover交互效果 « 张鑫旭-鑫空间-鑫生活 CSS3模拟window7炫酷界面效果展示 « 张鑫旭-鑫空间-鑫生活 图片旋转+剪裁js插件(兼容各浏览器) « 张鑫旭-鑫空间-鑫生活 纯js无图片无外链CSS图片幻灯片播放插件 « 张鑫旭-鑫空间-鑫生活 CSS border三角、圆角图形生成技术简介 « 张鑫旭-鑫空间-鑫生活 CSS “渐进增强”在web制作中常见应用举例 « 张鑫旭-鑫空间-鑫生活 让IE6/IE7/IE8浏览器支持CSS3属性 « 张鑫旭-鑫空间-鑫生活 jQuery – 高亮动态显示页面HTML代码插件 « 张鑫旭-鑫空间-鑫生活 翻译 – 逐渐消失的Flash网站 « 张鑫旭-鑫空间-鑫生活 CSS reset的重新审视 – 避免样式重置 « 张鑫旭-鑫空间-鑫生活 新浪微博插入话题后部分文字选中的js实现 « 张鑫旭-鑫空间-鑫生活 JavaScript实现http地址自动检测并添加URL链接 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变背景(gradient)效果 « 张鑫旭-鑫空间-鑫生活 CSS content内容生成技术以及应用 « 张鑫旭-鑫空间-鑫生活 CSS gradient渐变之webkit核心浏览器下的使用 « 张鑫旭-鑫空间-鑫生活 CSS渐变之CSS3 gradient在Firefox3.6下的使用 « 张鑫旭-鑫空间-鑫生活 区分IE8/IE7/IE6及其他浏览器-CSS “\9″hack « 张鑫旭-鑫空间-鑫生活 CSS实现跨浏览器兼容性的盒阴影效果 « 张鑫旭-鑫空间-鑫生活 CSS3&HTML5各浏览器支持情况一览表 « 张鑫旭-鑫空间-鑫生活 翻译 – CSS Sprites:实用技术还是生厌之物? « 张鑫旭-鑫空间-鑫生活 纯CSS实现易拉罐3D滚动效果 « 张鑫旭-鑫空间-鑫生活 纯CSS实现侧边栏/分栏高度自动相等 « 张鑫旭-鑫空间-鑫生活 CSS+JavaScript实现页面不同布局的切换 « 张鑫旭-鑫空间-鑫生活 JavaScript实现最简单的拖拽效果 « 张鑫旭-鑫空间-鑫生活 自己写的无图片版jQuery zxxbox弹出框插件 « 张鑫旭-鑫空间-鑫生活 中国古代道家思想与网页重构的思考 « 张鑫旭-鑫空间-鑫生活 让所有浏览器支持HTML5 video视频标签 « 张鑫旭-鑫空间-鑫生活 纯CSS实现各类气球泡泡对话框效果 « 张鑫旭-鑫空间-鑫生活 JS HEX十六进制与RGB, HSL颜色的相互转换 « 张鑫旭-鑫空间-鑫生活 CSS实现兼容性的渐变、高光等文字效果 « 张鑫旭-鑫空间-鑫生活 去除冗余 – 精简您的CSS样式代码 « 张鑫旭-鑫空间-鑫生活 对overflow与zoom”清除浮动”的一些认识 « 张鑫旭-鑫空间-鑫生活 jQuery Pagination Ajax分页插件中文详解 « 张鑫旭-鑫空间-鑫生活 absolute绝对定位的非绝对定位用法 « 张鑫旭-鑫空间-鑫生活 网页布局思想浅议-淘宝新版首页为实例 « 张鑫旭-鑫空间-鑫生活 回流与重绘:CSS性能让JavaScript变慢? « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(二) « 张鑫旭-鑫空间-鑫生活 CSS float浮动的深入研究、详解及拓展(一) « 张鑫旭-鑫空间-鑫生活 60个极富创造性的震撼的电影海报设计 « 张鑫旭-鑫空间-鑫生活 jQuery Lightbox(balupton版)图片展示插件讲解 « 张鑫旭-鑫空间-鑫生活 博客内嵌flash音乐播放器代码、下载与使用 « 张鑫旭-鑫空间-鑫生活 CSS3 animate实现图片墙3D翻转效果 « 张鑫旭-鑫空间-鑫生活 图片旋转效果的一些研究、jQuery插件及实例 « 张鑫旭-鑫空间-鑫生活 CSS3 border-image详解、应用及jQuery插件 « 张鑫旭-鑫空间-鑫生活 jQuery-两款不同原理的圆角插件讲解 « 张鑫旭-鑫空间-鑫生活 页面可用性之outline轮廓外框的一些研究 « 张鑫旭-鑫空间-鑫生活 CSS3 transition实现超酷图片墙动画效果 « 张鑫旭-鑫空间-鑫生活 HTML CSS列表元素ul,ol,dl的研究与应用 « 张鑫旭-鑫空间-鑫生活 jQuery图片文本滚动切换插件jCarousel中文翻译与详解 « 张鑫旭-鑫空间-鑫生活 酷酷的jQuery鼠标悬停图片放大切换显示效果 « 张鑫旭-鑫空间-鑫生活 IE6下z-index犯癫不起作用bug的初步研究 « 张鑫旭-鑫空间-鑫生活 checkbox复选框的一些深入研究与理解 « 张鑫旭-鑫空间-鑫生活 jQuery之使用slideToggle实现垂直下拉菜单 « 张鑫旭-鑫空间-鑫生活 jQuery-innerfade内部列表自动淡入淡出插件 « 张鑫旭-鑫空间-鑫生活 jQuery-火焰灯效果导航菜单 « 张鑫旭-鑫空间-鑫生活 IE下css bug集合-翻译自haslayout.net « 张鑫旭-鑫空间-鑫生活 翻译-IE7/8@font-face嵌入字体与文字平滑 « 张鑫旭-鑫空间-鑫生活 jQuery-马化腾产品设计与用户体验的一些技术实现 « 张鑫旭-鑫空间-鑫生活 像素的世界及其在web开发制作中的应用 « 张鑫旭-鑫空间-鑫生活 css行高line-height的一些深入理解及应用 « 张鑫旭-鑫空间-鑫生活 CSS实现圆角六色渐变自适应按钮详解 « 张鑫旭-鑫空间-鑫生活 我熟知的三种三栏网页宽度自适应布局方法 « 张鑫旭-鑫空间-鑫生活 jQuery照片图像剪裁插件Jcrop中文翻译详解 « 张鑫旭-鑫空间-鑫生活 Ajax Upload多文件上传插件翻译及中文演示 « 张鑫旭-鑫空间-鑫生活 告别图片—使用字符实现兼容性的圆角尖角效果beta版 « 张鑫旭-鑫空间-鑫生活 大小不固定的图片、多行文字的水平垂直居中 « 张鑫旭-鑫空间-鑫生活 jQuery boxy弹出层对话框插件中文演示及讲解 « 张鑫旭-鑫空间-鑫生活 JavaScript实现新浪微博文字放大显示动画效果 « 张鑫旭-鑫空间-鑫生活 翻译:让网络更快一些——最小化浏览器中的回流(reflow) « 张鑫旭-鑫空间-鑫生活 jQuery之addClasas与removeClass使用实例 « 张鑫旭-鑫空间-鑫生活 关于Google圆角高光高宽自适应按钮及其拓展 « 张鑫旭-鑫空间-鑫生活 JavaScript实现图片幻灯片滚动播放动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery-鼠标经过显示大图并跟随鼠标效果插件 « 张鑫旭-鑫空间-鑫生活 关于gif图片(或png8)杂边锯齿的问题 « 张鑫旭-鑫空间-鑫生活 对html与body的一些研究与理解 « 张鑫旭-鑫空间-鑫生活 鲜为人知的一个解决兼容性问题的利器——小数 « 张鑫旭-鑫空间-鑫生活 搜狐白社会似iphone短信对话框效果的优化 « 张鑫旭-鑫空间-鑫生活 关于文字内容溢出用点点点(…)省略号表示 « 张鑫旭-鑫空间-鑫生活 jquery之append与insertBefore使用实例 « 张鑫旭-鑫空间-鑫生活 jQuery之图片关联伸缩效果 « 张鑫旭-鑫空间-鑫生活 jquery之图片左右切换动画效果 « 张鑫旭-鑫空间-鑫生活 jQuery之replace字符串替换实现不同尺寸图片切换 « 张鑫旭-鑫空间-鑫生活 jQuery-实现图片的放大镜显示效果 « 张鑫旭-鑫空间-鑫生活 jQuery-单击文字或图片内容放大显示效果插件 « 张鑫旭-鑫空间-鑫生活 reflection.js-实现图片投影倒影效果js插件 « 张鑫旭-鑫空间-鑫生活 jQuery-很酷的弹出层效果js插件 « 张鑫旭-鑫空间-鑫生活 复选框单选框与文字对齐问题的研究与解决 « 张鑫旭-鑫空间-鑫生活 css margin的相关属性,问题及应用 « 张鑫旭-鑫空间-鑫生活 IE6下png背景不透明问题的综合拓展 « 张鑫旭-鑫空间-鑫生活
JS Intl对象完整简介及在中文中的应用 « 张鑫旭-鑫空间-鑫生活
张鑫旭,zhangxinxu · 2012-12-12 · via 张鑫旭-鑫空间-鑫生活

by zhangxinxu from https://www.zhangxinxu.com/wordpress/?p=8950
本文欢迎分享与聚合,全文转载就不必了,尊重版权,圈子就这么大,若急用可以联系授权。

JS Intl对象占位图

一、先整体了解Intl对象

Intl对象是ECMAScript国际化API的命名空间,它提供对语言敏感的字符串比较、支持数字格式化以及日期和时间的格式化。

我们在控制台输入Intl,会得到如下图所示的返回值:

Intl对象返回值

如下:

{
    Collator: ƒ Collator()
    DateTimeFormat: ƒ DateTimeFormat()
    ListFormat: ƒ ListFormat()
    NumberFormat: ƒ NumberFormat()
    PluralRules: ƒ PluralRules()
    RelativeTimeFormat: ƒ RelativeTimeFormat()
    getCanonicalLocales: ƒ getCanonicalLocales()
    v8BreakIterator: ƒ v8BreakIterator()
}

Intl对象是从IE11+开始支持的,其中有部分属性方法目前仅Chrome浏览器才支持,例如ListFormat。

我们一个一个了解下(Intl.v8BreakIterator没有相关文档,暂时忽略)。

二、Intl.Collator对象

collator这个单词意思是排序器。Intl.Collator对象是排序器的构造函数,可以支持对语言敏感的字符串比较。

语法如下:

new Intl.Collator([locales[, options]])

其中参数locales是可选参数,值是BCF 47语言标记的字符串(评论有反馈应该是bcf47规范中的tags标签扩展,unicode 格式),或此类字符串的数组。options也是可选参数,支持很多输入值,由于不是本文重点,不展开,有兴趣可以查看这里的文档

Collator实例从其原型继承了compare()resolvedOptions()这两个方法,我们主要关心compare()这个方法,可以用来对字符串进行比对,值相等返回0,前面的值大返回负数,前面的值小返回整数。

此方法可以看成是String.prototype.localeCompare()方法更全新的版本,localesoptions参数两者也都非常类似。

compare()方法主要用在不同语言下的字符串比较,例如,在德语中,ä和a排序一样,但是在瑞典语中,ä是排在字母z的后面的,因此:

// 在德语中,ä和a排序一样
console.log(new Intl.Collator('de').compare('ä', 'z'));
// 返回负值

// 瑞典语中,ä是排在字母z的后面
console.log(new Intl.Collator('sv').compare('ä', 'z'));
// 返回正值

不过,我们都是中国用户,上面场景用不到,那Intl.Collator对象有没有实用价值呢?是有的。

options有个可选参数是numeric,布尔属性,是否按照数值进行比较,默认是false,还记不记得下面经典的数字字符串排序问题:

['15', '2', '100'].sort();    
// 结果是:["100", "15", "2"]

字符串排序

因为数字字符串按照字符串顺序进行排列了。

下面我们使用Intl.Collator对象的数值排序参数进行改造下,则最后字符串按照字符串字面上的数值大小进行排序了:

['15', '2', '100'].sort(new Intl.Collator(undefined, { numeric: true }).compare);
// 结果是:["2", "15", "100"]

例如控制台跑出来的结果截图:

字符串按照字面值排序

然后我们说说中文的排序,如果我们希望我们的中文按照首字母拼音排序,该怎么处理?

var arrUsername = ["陈坤", "邓超", "杜淳", "冯绍峰", "韩庚", "胡歌", "黄晓明", "贾乃亮", "李晨", "李易峰", "鹿晗", "井柏然", "刘烨", "陆毅", "孙红雷"];

我们对上面arrUsername进行默认的sort()排序,结果是下面这样:

arrUsername.sort();
// 结果是:["井柏然", "冯绍峰", "刘烨", "孙红雷", "李易峰", "李晨", "杜淳", "胡歌", "贾乃亮", "邓超", "陆毅", "陈坤", "韩庚", "鹿晗", "黄晓明"]

顺序就不对了。

此时,可以使用中文简体的BCF 47语言标记字符串zh进行排序,代码如下:

arrUsername.sort(new Intl.Collator('zh').compare);
// 结果是:["陈坤", "邓超", "杜淳", "冯绍峰", "韩庚", "胡歌", "黄晓明", "贾乃亮", "井柏然", "李晨", "李易峰", "刘烨", "陆毅", "鹿晗", "孙红雷"]

中文按照拼音排序

三、Intl.DateTimeFormat对象

其实可以看成是传统的下面几个方法的变身:

Date.prototype.toLocaleString()
Date.prototype.toLocaleDateString()
Date.prototype.toLocaleTimeString()

语法如下:

new Intl.DateTimeFormat([locales[, options]])

locales是可选参数,和Intl.Collator对象一样的意思,指国家地区对应的BCP 47字符串,具体细节非常负责,不展开,仅仅中文zh-*后面的类型一双手都数不过来。options也是可选参数,可以指定日期类型,时区,以及年月日时分秒的呈现方式(如是否补0),是否24小时制显示。

总之,就是我们可以定制我们想要呈现的时间格式。

例如我们希望出现的日期信息格式是:“xxxx年xx月xx日 xx:xx:xx”。

则我们可以这样设置:

new Intl.DateTimeFormat('zh', {
    year: 'numeric',  
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
}).format(new Date())

其中'2-digit'表示一定使用2位数字表示,因此,如果数值不超过10,会自动在前面加0。hour12设置为false表示我们采用24小时制,于是晚上就会是21:00而不是下午9点。

我们看下IE11浏览器下的效果:

时间格式化在IE浏览器下

完全符合我们的预期,但是在Chrome浏览器和Firefox浏览器下,却不是中文的年月日而是斜杠:

Firefox浏览器下的时间不是中文

还需要进一步字符处理下,或者有其他让Chrome、Firefox浏览器显示和IE一样的年月日中文的方法,欢迎赐教。

四、Intl.ListFormat对象

Intl.ListFormat可以让对语言敏感的列表进行格式化。

语法如下:

new Intl.ListFormat([locales[, options]]) 

locales就是'zh-Hans'或者'en-US'之类的字符,options也是可选参数,支持下面这3个:

  • localeMatcher指匹配算法。
  • type值内容连接类型。有'conjunction'表示A、B和C,'disjunction'表示A、B或C。'unit'表示值要带单位。
  • style表示样式,支持值有'long''short''narrow',默认是'long';如果是'short',则表示A、B、C;如果是'narrow',则表示A B C。

看一个例子吧:

var vehicles = ['Motorcycle', 'Bus', 'Car'];

var formatter = new Intl.ListFormat('en', { style: 'long', type: 'conjunction' });
console.log(formatter.format(vehicles));
// 输出结果是: "Motorcycle, Bus, and Car"

如果设置语言是中文,则结果则是单词使用顿号分隔,例如:

var vehicles = ['Motorcycle', 'Bus', 'Car'];

var formatter = new Intl.ListFormat('zh', { style: 'long', type: 'conjunction' });
console.log(formatter.format(vehicles));
// 输出结果是: "Motorcycle、Bus和Car"

连词风格

本对象目前还处于实验阶段,仅Chrome72+浏览器支持,因此,就不进一步深入了。

五、Intl.NumberFormat对象

Intl.NumberFormat可以根据不同语言环境最数值字符串进行不同的呈现处理。本对象可以看成是Number.toLocaleString()方法的升级版,参数和含义都是一样的。

语法如下:

new Intl.NumberFormat([locales[, options]])

locales就是'zh-Hans'或者'en-US'这些BCP 47语言标签字符options也是可选参数,支持的参数比较多,由于Intl.NumberFormat比较常用,因此这几个参数我都简单介绍下。

localeMatcher
要使用的区域设置匹配算法。值可以是'lookup''best fit',其中'best fit'是默认值,这个算法可以让匹配器运行时提供的区域设置尽可能适合请求而不是基于查找算法的结果,例如设置'zh',简体中文地区会认为是简体中文,繁体中文地区会认为是繁体中文,而不是指定匹配'lookup'算法则与之不同,遵循BCP 47中指定的查找算法。我们平时开发而不太用到这个参数。

① 自己的理解,如果不对,欢迎纠错

style
表示格式转换使用的样式。默认值是'decimal',表示就是数字,值还可以是'currency',表示使用货币格式,也可以是'percent',表示百分比格式。
currency
使用货币格式时候使用的货币类型。值需要是ISO 4217货币代码(三个字母)。常见的有:人民币 China Yuan Renminbi (CNY)、港元 Hong Kong Dollar (HKD)、新台币 New Taiwan Dollar (TWD)、欧元Euro(EUR)、美元 US Dollar (USD)、英镑 Great British Pound(GBP)、日元 Japanese Yen (JPY)。

如果style参数值是'currency',则这里的currency属性一定要提供。

currencyDisplay
如何显示设置的货币。默认值是'symbol'表示用图形显示,例如人民币是'¥',其他可选值有'code',表示使用ISO货币代码,人民币就是'CNY';值也可以是'name',使用当地该货币的名称,例如美元是'dollar',人民币则是'人民币'
useGrouping
布尔值。表示是否使用分组分隔符,例如千位分隔符或千/十万/千万分隔符。默认值是true
minimumIntegerDigits
要使用的最小整数位数。可能的值为1到21;默认值为1。
minimumFractionDigits
要使用的最小小数位数。可能的值为0到20,普通数字和百分比格式的默认值为0,货币格式的默认值是ISO 4217货币代码列表提供的次要单位数字的数量(如果列表没有提供该信息则使用2代替)。
maximumFractionDigits
要使用的最大小数位数。可能的值为0到20。普通数字格式的默认值为minimumFractionDigits和3中的较大者,货币格式的默认值为minimumFractionDigits和ISO 4217货币代码列表提供的单位数字中的较大者(如果列表未提供该信息,则为2),格式百分比的默认值为minimumFractionDigits和0中的较大者。
minimumSignificantDigits
要使用的最小有效位数。可能的值为1到21;默认值为1。
maximumSignificantDigits
要使用的最大有效位数。可能的值为1到21;默认值为21。

实际开发,我们多使用NumberFormat继承的format()方法对数字格式进行处理。

例如:

1. 连续数字千位分隔符分隔

网页开发,尤其移动端,连续整数数值建议使用逗号分隔,原因见这篇文章

默认情况下,我们无论是使用Number.toLocaleString()方法,还是这里的new Intl.NumberFormat().format()方法,都只能有3位小数。

例如:

new Intl.NumberFormat().format(12345.6789);
// 结果是:"12,345.679"

最多3位小数

如果我们希望保留的小数位是4,则可以如下处理:

new Intl.NumberFormat(undefined, {
    minimumFractionDigits: 4
}).format(12345.6789);
// 结果是:"12,345.6789"

保留4为小数截图示意

如果minimumFractionDigits的参数值超过原本的小数个数,则最后会补0。补0这种特性对于整数也同样适用。

2. 数字不足位数补0

字符串补全ES6有现成的API,padStart()和padEnd(),不过IE不支持。

如果遇到需要数字补全,可以试试这里的format()方法,IE11+都支持。

例如,希望小于10的数字前面都有0,可以这么处理:

new Intl.NumberFormat(undefined, {
    minimumIntegerDigits: 2
}).format(8);
// 结果是:"08"

数字前面补全

如果位数足够多,超过3位,可以设置useGroupingfalse,这样就不会遇到逗号分隔的尴尬了。

3. 金额中文自带

给一串数字,后面自带中文“元”。可以如下设置:

new Intl.NumberFormat('zh-Hans', { 
    style: 'currency', 
    currency: 'CNY',
    currencyDisplay: 'name'
}).format(12345.6789)
// 结果是:"12,345.68 人民币"

货币人民币显示

4. 数字变成中文数字显示

例如,我们要显示星期几,不需要再弄个数组进行一一映射了,试试下面的方法:

'星期' + new Intl.NumberFormat('zh-Hans-CN-u-nu-hanidec').format(new Date().getDay());
// 结果是:"星期五"

数字变成中文汉字显示

六、Intl.PluralRules对象

Intl.PluralRules对象是用于启用多个敏感格式和多个语言规则的对象的构造函数。

语法如下:

new Intl.PluralRules([locales[, options]])

其中locales是可选参数,为BCP 47语言标签字符串。options也是可选参数,支持两个参数,一个是localeMatcher表示查找算法,另外一个是type表示类型,默认值是'cardinal',表示基数(指事物的数量),还可以是值'ordinal',表示序数(指事物的排序或排序,例如英语中的“1st”,“2nd”,“3rd”)。

有个select()方法比较常用,测试:

new Intl.PluralRules('zh-Hans').select(0);
// 结果是:"other"
new Intl.PluralRules('zh-Hans').select(1); 
// 结果是:"other"
new Intl.PluralRules('zh-Hans').select(2);
// 结果是:"other"
new Intl.PluralRules('zh-Hans').select(6);
// 结果是:"other"
new Intl.PluralRules('zh-Hans').select(18);
// 结果是:"other"

可见这个对象对于中文用户而言,没什么锤子用。

七、Intl.RelativeTimeFormat对象

此对象IE不支持,Chrome71+开始支持。表示相对时间的格式化。例如昨天明天这种。

语法

new Intl.RelativeTimeFormat([locales[, options]])

示例

举几个例子看看在中文中的表现(英文环境下表现参见MDN文档)。

var rtf = new Intl.RelativeTimeFormat('zh');
// -1表示前一天
rtf.format(-1, 'day');
// 结果是:"1天前"
// 1表示往后一天
rtf.format(1, 'day');
// 结果是:"1天后"

一天前一天后

如果我们设置其他的参数,如下,则返回结果更有意思:

var rtf = new Intl.RelativeTimeFormat('zh', {
    numeric: 'auto'
});

rtf.format(-1, 'day');
// 结果是:"昨天"
rtf.format(1, 'day');
// 结果是:"明天"

昨天和明天显示

八、Intl.getCanonicalLocales()方法

Intl.getCanonicalLocales()方法可以返回一个包含规范语言环境名称的数组。重复项将被忽略,元素将被验证为结构上有效的语言标记。

例如:

Intl.getCanonicalLocales('zh-hans');
// 结果是:["zh-Hans"]
Intl.getCanonicalLocales('zh');
// 结果是:["zh"]
Intl.getCanonicalLocales('zh-cmn-Hans-CN');
// 结果是:["cmn-Hans-CN"]
Intl.getCanonicalLocales('zh-cn');
// 结果是:["zh-CN"]
Intl.getCanonicalLocales('yue-hk');
// 结果是:["yue-HK"]
Intl.getCanonicalLocales('zh-some');
// 结果是:["zh-Some"]

获取官方本地语言标记

九、中秋佳节结束语

秋高气爽阳光明媚,领导带两个小朋友去游乐场玩了,我一个人在家写代码撸技术文章,好不快乐。

现在年龄上去了,平时的精力已经跟不上年轻人了,好在还有节假日,你去玩耍我在学习,嘿嘿嘿。

昨晚在“生活与创作”版块发了篇文章“太感动了,今年终于吃到公司的月饼了!”的文章,闲来无事的朋友可以去看看。

本文内容也很多,有些东西我也不是非常了解,加上行文仓促,一定会存在一些有错误的地方,欢迎大家帮忙指正。

感谢您的阅读以及平日里的支持,祝大家中秋节愉快,玩得好,吃的好!

本文为原创文章,欢迎分享,勿全文转载,如果内容你实在喜欢,可以加入收藏夹,永不过期,而且还会及时更新知识点以及修正错误,阅读体验也更好。
本文地址:https://www.zhangxinxu.com/wordpress/?p=8950

(本篇完)