【转载】moment.js 中文国际化失效 vite vue3

作者:林遇66
链接:https://www.jianshu.com/p/5256c691d9bd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


今天尝试用vite和vue3写项目,但是碰到一个问题,引入moment.js,使用中文国际化的时候,一直没有生效。

不生效的写法如下,正常来说应该没有问题。

import moment from "moment";
import "moment/locale/zh-cn";
moment.locale('zh-cn')

查了一下资料,原来vite只支持ES modules,可以看下尤大的在vite的issues的解释:https://github.com/vitejs/vite/issues/945

我们再看下moment/locale/zh-cn的写法,果然不是ES modules写法。

;(function (global, factory) {
   typeof exports === 'object' && typeof module !== 'undefined'
       && typeof require === 'function' ? factory(require('../moment')) :
   typeof define === 'function' && define.amd ? define(['../moment'], factory) :
   factory(global.moment)
}(this, (function (moment) { 'use strict';
    //! moment.js locale configuration
    var zhCn = moment.defineLocale('zh-cn', {
      ...
    });
    return zhCn;
})));

那怎么解决呢,其实moment.js是支持ES modules的国际化的。我们找到的moment/dist/locale/zh-cn,写法如下:

import moment from '../moment';
export default moment.defineLocale('zh-cn', {
 ....
});

所以修改一下我们引入路径就可以了。生效的写法如下。

import moment from "moment";
import 'moment/dist/locale/zh-cn'
moment.locale('zh-cn')

测试一下 果然生效了。

moment.locales()//["en", "zh-cn"]

备注moment.js版本2.29.1。

由于不知道vite只支持ES module(esm)的写法,搜索了好久才解决。

留下了没有技术的泪水。

避免踩坑,记录一下。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值