蚂蚁金服的前端UI框架Ant Design 有专门针对 React 设计的 Ant Design for React 。今天在使用其中的 DatePicker 日期组件时遇到一个问题,其中有一些按钮显示英文,如下图所示:
官方给出了设置中文的方法,称之为“国际化配置”:
默认配置为 en-US,如有特殊需求(仅修改单一组件的语言),可使用 locale 参数,参考:默认配置。
单一组件设置为中文:
import zhCN from 'antd/es/date-picker/locale/zh_CN'; // 引入中文包 // 组件添加 locale 属性 <DatePicker locale={zhCN} />; // 设置为中文
注意:DatePicker、MonthPicker、RangePicker、WeekPicker 部分 locale 是从 value 中读取,需要先正确设置 moment 的 locale。
// 默认语言为 en-US,如果你需要设置其他语言,推荐在入口文件全局设置 locale import moment from 'moment'; import 'moment/locale/zh-cn'; moment.locale('zh-cn'); <DatePicker defaultValue={moment('2015-01-01', 'YYYY-MM-DD')} />;
如果页面中的日期组间比较多,可以为组件设置统一的全局化变量。
ConfigProvider全局化配置:
ConfigProvider 使用 React 的 context 特性,只需在应用外围包裹一次即可全局生效。
用法:
import { ConfigProvider } from 'antd'; // ... return ( <ConfigProvider {...yourConfig}> <App /> </ConfigProvider> );
其实也不一定需要包裹整个应用,只在在有组件的部分进行包裹也可以。下面是代码展示:
import {Form, Input, Select, Row, Col, Checkbox, Button, AutoComplete, LocaleProvider, DatePicker, ConfigProvider } from 'antd'; // Ant import zhCN from 'antd/es/locale/zh_CN'; // 引入语言包 import moment from 'moment'; import 'moment/locale/zh-cn'; moment.locale('zh-cn'); // 注意这里设置 moment 必须放在有 import 的后面。 const { RangePicker } = DatePicker; class Page extends React.Component { return ( <div className="locale-components"> <ConfigProvider locale={zhCN}> // 设置 local 为中文。 <h3 className={`mb-10`}>时间流程</h3> <div className={`module-content`}> <Row gutter={35}> <Col span={12}> <Form.Item label={ <span> 报名时间 </span> } labelCol={{span: 4}} wrapperCol={{span: 20}}> <RangePicker showTime={{ format: 'HH:mm' }} format="YYYY-MM-DD HH:mm" placeholder={['开始时间', '结束时间']} onChange={onChange} onOk={onOk} /> </Form.Item> </Col> <Col span={12}> <Form.Item label={ <span> 初试时间 </span> } labelCol={{span: 4}} wrapperCol={{span: 20}}> <RangePicker showTime={{ format: 'HH:mm' }} format="YYYY-MM-DD HH:mm" placeholder={['开始时间', '结束时间']} onChange={onChange} onOk={onOk} /> </Form.Item> </Col> </Row> </div> </ConfigProvider> </div> ); } } ReactDOM.render(<App />, mountNode);
这样就可以显示中文了:
Content Security Policy
另外,部分组件为了支持波纹效果,使用了动态样式。如果开启了 Content Security Policy (CSP),你可以通过 csp 属性来进行配置:
<ConfigProvider csp={{ nonce: 'YourNonceCode' }}> <Button>My Button</Button> </ConfigProvider>