山水盘桓,边草缠绵。苍茫一笑,愁在眉宇间。

去国怀乡,旧了红颜,追忆当初。心中已惘然。

……

这首《西风斩》无论词曲都着实让我惊艳,作为《大秦赋》插曲也分外贴合。尽管历朝历代的文人骚客都在对”暴秦“不遗余力的进行着口诛笔伐,尤以贾谊的《过秦论》为甚。然而在我眼中,这不过是六国那些被褫夺了昔日封地和特权后的王公贵族们的哀怨和私愤。且不谈其他,只说赵政的”书同文,车同轨“,仅此一点就足以让其在整个中华帝国的历史长河中屹立不倒,真可谓”千载谁堪伯仲间“!其意义如何?用今时今日的话来说就是——哥们制定了整个行业的标准!让未来的两千多年都有章可循,有法可依。

大到国家,小到行业,若无标准,到头来只能落的个各行其是。就好比战国时期的“马“字,居然各国写法都莫衷一是,无论阅读还是撰写,都给人们带来了无穷无尽的困扰,直到秦篆的出现,该问题才彻底被解决。而本文中需要谈到的,依然是这个问题,在国际化开发过程中,什么才是我们理想中的datepicker(亦包括calendar,后文同)?甚至可以作为整个行业的标准?

首先我们来总结下,作为一个典型的datepicker都需要具备什么样的功能特性。

  • 为事件或任务设定开始及结束日期
  • 鼠标设置当前事件或任务的年/月/日(按年/月/日显示)
  • 键盘设置当前事件或任务的年/月/日(按年/月/日显示)
  • 将datepicker跟时间日期字段绑定(只显示日期)
  • 将datepicker跟时间时间字段绑定(显示日期和时间)
  • 根据locale而自行更换picker的样式

而我们关心的这一切,在Moment的Datepicker中都已经得到了良好的实现,demo如下图。

想要驱动国际化版本,就需要替换默认的moment.js(/moment/min/moment.min.js

),代之以moment-with-locales.js(/moment/min/moment-with-locales.js

)。同时在2.8.1版本后,还需要调用moment.locale函数明示locale string。

moment.locale(String);
moment.locale(String[]);
moment.locale(String, Object);

随后我们应该就可以看到国际化版本的datepicker了,下图是locale为FR时的效果。

与国际化相关的核心代码都集中在以下三个文件内。

moment-datepicker-master/moment-datepicker/moment-datepicker.js

moment-datepicker-master/Scripts/moment-with-locales.js

moment-datepicker-master/Scripts/moment.i18n/zh-cn.js

到目前为止moment已经可以支持135个locale,每个locale date相关的细枝末节均已被涵盖。如下就是部分的日文代码:

var ja = _moment__default.defineLocale('ja', {months : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),weekdays : '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),weekdaysShort : '日_月_火_水_木_金_土'.split('_'),weekdaysMin : '日_月_火_水_木_金_土'.split('_'),longDateFormat : {LT : 'Ah時m分',LTS : 'Ah時m分s秒',L : 'YYYY/MM/DD',LL : 'YYYY年M月D日',LLL : 'YYYY年M月D日Ah時m分',LLLL : 'YYYY年M月D日Ah時m分 dddd'},meridiemParse: /午前|午後/i,isPM : function (input) {return input === '午後';},…

那这么说来,moment可以被认为是相当理想的datepicker?甚至作为标准哦?我很想说是,但此刻我们不得不回到开篇话题——标准。来看看moment的标准从何处来?仔细阅读文档和代码后发现,所有format都由开源社区的志愿者们自行提供并相互认可。例如日文的由一位叫LI Long(https://github.com/baryon)的在东京的华人提供,其主业是区块链产品的全栈开发,百忙之余竟为moment这样一个国际化开源库添砖加瓦,笔者由衷的表示敬佩!而简体中文则是由一位来自杭州的Zeno Zeng同学(https://github.com/zenozeng)提供,繁体中文则由来自台北的Ben (https://github.com/ben-lin)上传。不难看出,这距离我们期望的“书同文,车同轨”还是有着不小的差距,这样的自说自话一旦涉及多个库的集成,问题就会暴露无遗。

如何扬长避短?让我们站在巨人的肩膀上继续前行呢?笔者的构想是,搁置这些来自开源社区的数据源,令所有date相关的数据都统一取自CLDR,这样秦国的战车就可以奔驰在整个中华大地上,而不至于到了赵国就得改弦更张,同时和笔者推荐的国际化开源项目Singleton的数据源也保持了一致。

简单总结如下,moment.js即便拥有再多的拥趸,再活跃的社区,也无法成为标准,但Moment+CLDR则可以成为国际化datepicker的“秦篆”,立为标杆。最后推荐大家参考甚至加入这个开源项目,让理想中的datepicker早日落地生根。https://github.com/moment/moment-cldr

理想的Datepicker相关推荐

  1. Android学习--02(猜猜我的星座App源码+Android常用控件TextView+EditText+Button+ImangeView+DatePicker+App间通信+跳转页面)

    猜猜我的星座App 1 Android常用控件 1.1 TextView控件 1.1.1 简介 1.1.2属性 1.1.3 扩展属性 1.1.4 TextView的使用方法 1.1.5总结 1.2 E ...

  2. jquery.datatable能返回数据绑不上_地磁场可以影响人体机能吗?解释有多种,但都不理想...

    信鸽辨别方向的能力特别强,即使上海的信鸽带到几千公里放飞,它仍然会飞回上海.路途中就是碰到狂风暴雨,它也不会迷失方向. 为什么它有这么大的辨别方向的本领呢?科学家对信鸽进行研究,做了这样一个有趣的实验 ...

  3. 毕业季:理想很丰满,现实也可以很丰满!

    六月,原本不是一个适合离开的季节,不是烈日,就是暴雨,让人不得不走走停停,频频回望. 然而,哪个季节又适合离开呢?六月,确实得离开了. 大学几年的时光终将逝去,而之后各位即将面临的是应该如何选择自己后 ...

  4. 软件开发 理想_我如何在12个月内找到理想的软件工作

    软件开发 理想 In this talk, Matt Woods shares the 3 cornerstone habits that helped him land his dream soft ...

  5. python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作

    python开源项目贡献 by Utsab Saha 由Utsab Saha 通过为开源项目做贡献,我如何找到理想的工作 (How I found my dream job by contributi ...

  6. 矢量数编码有哪几种类型_6种最理想的编码工作(以及吸引每个人的类型)

    矢量数编码有哪几种类型 by David Venturi 大卫·文图里(David Venturi) 6种最理想的编码工作(以及吸引每个人的类型) (The 6 most desirable codi ...

  7. 开源硬件:极客们的伟大理想

    自 Dennis Allison 在 1975 年发布它的 Tiny BASIC 以来,他倡导的开放.共享的思想得到了多数开发者的认同,这些年,软件开源取得了令人瞩目的成绩.同时,他那句 " ...

  8. 我想当HTML程序员,我的理想当一名程序员

    理想是海中的风向标,是高山上的雪莲花,是风浪中的小帆船,指引着我到达成功的彼岸,我的理想是成为一名程序员. 某个周末,我去练跆拳道时无意发现了附近有一个学编程的地方,我便让妈妈给我报了名,去体验体验. ...

  9. 心中的象牙塔:怎样才能拿到理想的教职offer?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 编者按:学术生涯的不同阶段会面临不同的抉择问题,例如博士毕业了固然高 ...

  10. 北大数学天才毕业后坚持出家:理想现实间的挣扎

    "望子成龙,望女成凤",几乎每个家长都希望自己的孩子长大后能变得很优秀,所以在成长的道路上给孩子设立各种可能和理想,把自己的各种想法期望强加到孩子身上,忽视了孩子的想法,所以最终的 ...

最新文章

  1. 3行Python代码就能获取海量数据?
  2. C# 开发WinCE 遇到Motorola PDA 的问题记录
  3. 动画函数requestAnimationFrame
  4. 什么是数字孪生,它的应用价值在哪里?
  5. 160. Intersection of Two Linked Lists(剑指Offer-两个链表的第一个公共结点)
  6. 微信抽奖系统源码 v3.0
  7. 机器学习的分类与主要算法
  8. Ubuntu 18.04 安装 NVIDIA 显卡驱动超详细步骤
  9. HashMap解决hash冲突
  10. 利用ESP8266与米思齐从零制作模拟温室大棚--接线篇
  11. JAVA经典兔子问题
  12. 光纤跳线的分类和概述
  13. 阿里直播SDK,直播推流地址和播流地址生成
  14. 苹果cmsv10仿bt部落天堂简约好看的自适应免费模板
  15. python 自定义 计算向量投影 正交 函数
  16. Charles抓包工具测试实战
  17. 用java实现屏幕找图
  18. 微信小程序实时音视频的使用
  19. vulnhub靶场-hacksudo - Thor
  20. 3G的发展:(4)大洋洲

热门文章

  1. Router Support for Fine-Grained Latency Measurements阅读笔记
  2. windbg 查看结构体_windbg常见命令
  3. 知识图谱入门 (二) 知识表示与知识建模
  4. 测试晶面间距软件_i-TEM软件测量TEM高分辨像晶面间距.PDF
  5. Mysql支持translate函数吗_oracle 中的translate函数
  6. linux视频播放器安装程序,新手求助自带视频播放器安装问题
  7. 自动驾驶基础——惯性测量单元(IMU)
  8. 第015讲: 跟王家林学习从1000个代码案例中学习人工智能和大数据实战第015讲:Scala中Tuple源码剖析及代码实践
  9. Unity 2D图片添加加外边框Shader
  10. Windows下的虚拟桌面软件——Virgo