moment.js 添加中文语言(汉化)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

今天引入了moment.js处理时间格式,但是发现默认是英文的,比如我想显示“星期三”,但实际出来的是“Wednesday”。那怎样把语言改为中文呢?

moment.js提供了多种语言的支持,首先在github上找到中文字典部分:

moment.defineLocale('zh-cn', {  
        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),  
        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),  
        weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),  
        weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),  
        weekdaysMin : '日_一_二_三_四_五_六'.split('_'),  
        longDateFormat : {  
            LT : 'Ah点mm分',  
            LTS : 'Ah点m分s秒',  
            L : 'YYYY-MM-DD',  
            LL : 'YYYY年MMMD日',  
            LLL : 'YYYY年MMMD日Ah点mm分',  
            LLLL : 'YYYY年MMMD日ddddAh点mm分',  
            l : 'YYYY-MM-DD',  
            ll : 'YYYY年MMMD日',  
            lll : 'YYYY年MMMD日Ah点mm分',  
            llll : 'YYYY年MMMD日ddddAh点mm分'  
        },  
        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,  
        meridiemHour: function (hour, meridiem) {  
            if (hour === 12) {  
                hour = 0;  
            }  
            if (meridiem === '凌晨' || meridiem === '早上' ||  
                    meridiem === '上午') {  
                return hour;  
            } else if (meridiem === '下午' || meridiem === '晚上') {  
                return hour + 12;  
            } else {  
                // '中午'  
                return hour >= 11 ? hour : hour + 12;  
            }  
        },  
        meridiem : function (hour, minute, isLower) {  
            var hm = hour * 100 + minute;  
            if (hm < 600) {  
                return '凌晨';  
            } else if (hm < 900) {  
                return '早上';  
            } else if (hm < 1130) {  
                return '上午';  
            } else if (hm < 1230) {  
                return '中午';  
            } else if (hm < 1800) {  
                return '下午';  
            } else {  
                return '晚上';  
            }  
        },  
        calendar : {  
            sameDay : function () {  
                return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';  
            },  
            nextDay : function () {  
                return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';  
            },  
            lastDay : function () {  
                return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';  
            },  
            nextWeek : function () {  
                var startOfWeek, prefix;  
                startOfWeek = moment().startOf('week');  
                prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';  
                return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';  
            },  
            lastWeek : function () {  
                var startOfWeek, prefix;  
                startOfWeek = moment().startOf('week');  
                prefix = this.unix() < startOfWeek.unix()  ? '[上]' : '[本]';  
                return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';  
            },  
            sameElse : 'LL'  
        },  
        ordinalParse: /\d{1,2}(日|月|周)/,  
        ordinal : function (number, period) {  
            switch (period) {  
            case 'd':  
            case 'D':  
            case 'DDD':  
                return number + '日';  
            case 'M':  
                return number + '月';  
            case 'w':  
            case 'W':  
                return number + '周';  
            default:  
                return number;  
            }  
        },  
        relativeTime : {  
            future : '%s内',  
            past : '%s前',  
            s : '几秒',  
            m : '1 分钟',  
            mm : '%d 分钟',  
            h : '1 小时',  
            hh : '%d 小时',  
            d : '1 天',  
            dd : '%d 天',  
            M : '1 个月',  
            MM : '%d 个月',  
            y : '1 年',  
            yy : '%d 年'  
        },  
        week : {  
            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效  
            dow : 1, // Monday is the first day of the week.  
            doy : 4  // The week that contains Jan 4th is the first week of the year.  
        }  
    });  

然后,把这段代码复制到moment.js中,位置在最后一句 “return _moment;” 的前面,如下:

//中文支持  
    moment.defineLocale('zh-cn', {  
        months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),  
        monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),  
        //...略  
      
      
    return _moment;  

或者

    /************************************
        Default Locale
    ************************************/


    // Set default locale, other locale will inherit from English.
    moment.locale('en', {
        ordinalParse: /\d{1,2}(th|st|nd|rd)/,
        ordinal : function (number) {
            var b = number % 10,
                output = (toInt(number % 100 / 10) === 1) ? 'th' :
                (b === 1) ? 'st' :
                (b === 2) ? 'nd' :
                (b === 3) ? 'rd' : 'th';
            return number + output;
        }
    });

    moment.defineLocale('zh-cn', {  
        ......

运行成功。

 

如果不起作用,还是显示英文日期,则moment.js中最后返回的变量可能叫做 _moment,多了个下划线,于是修改刚才那段代码的开头部分,把moment改为_moment,成功!

//中文支持  
    _moment.defineLocale('zh-cn', {  

 

转载于:https://my.oschina.net/u/2246951/blog/800973

你可能感兴趣的:(moment.js 添加中文语言(汉化))