Ant Design全局汉化为什么要引入这个包?-灵析社区

博学的学渣

Ant Design做全局汉化的时候,为什么日期组件需要额外导入这个汉化包,如果不导入的话,月份和日期就还是默认的英文的,在源码里是怎么写的,不太明白。请大佬指点 import 'dayjs/locale/zh-cn'; ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/d95e0f2f9df92dc317c6c3abf0724a02.png) 另外还有一个问题想请教,为什么这个ConfigProvider直接包裹在App外面不可以,要包在RouterProvider或者Provider里才生效。 ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/9f451bf9f78f1a8be6a6b376ded283cc.png)

阅读量:181

点赞量:0

问AI
这算是一个 设计规范 和 "支持粒度" 的问题,通过 "ConfigProvider" 注入的国际化只负责控制 "antd" 这一层的国际化,没有集成组件依赖的"包"中的国际化,所以需要由用户手动引入这部分。如果看过 "antd" 的源码,那么你会发现,"antd"中的部分组件其实也只是封装了另一个库("react-component")中的组件,具体实现并不在 "antd" 这里就用 "DatePicker" 举例,它是基于 react-component 中的 "picker" 实现的,包名叫 "rc-picker",而 "rc-picker" 中日期相关的处理都是通过 "dayjs" 这个库来完成的,包括"国际化" 这里就存在如下依赖关系 "DatePicker -> rc-picker -> dayjs",从设计上来说,DatePicker 只需要把 rc-picker 当成一个黑盒,不需要关注里面的实现,不管 rc-picker 选择用 dayjs 还是 moment,亦或者其他的日期工具库,"antd" 都无需关心。 换个说法,假设 antd 集成了 dayjs,那么如果后续 rc-picker 将 dayjs 替换成了其他库,那么 antd 也得跟着改,这种"隐晦的依赖关系"产生的"耦合"会带来不小的维护成本。 至于这个问题,可以提供一个可复现的在线demo,我测了下是可以的 «"另外还有一个问题想请教,为什么这个ConfigProvider直接包裹在App外面不可以,要包在RouterProvider或者Provider里才生效。"»