国际化 #
概述 #
Ant Design 提供了完善的国际化支持,通过 ConfigProvider 组件可以配置语言包,实现多语言切换。
基础用法 #
设置语言 #
tsx
import { ConfigProvider } from 'antd';
import zhCN from 'antd/locale/zh_CN';
import 'dayjs/locale/zh-cn';
<ConfigProvider locale={zhCN}>
<App />
</ConfigProvider>
支持的语言 #
tsx
import zhCN from 'antd/locale/zh_CN';
import enUS from 'antd/locale/en_US';
import zhTW from 'antd/locale/zh_TW';
import jaJP from 'antd/locale/ja_JP';
import koKR from 'antd/locale/ko_KR';
import arEG from 'antd/locale/ar_EG';
语言切换 #
tsx
import { ConfigProvider, Button, Space, DatePicker } from 'antd';
import { useState } from 'react';
import zhCN from 'antd/locale/zh_CN';
import enUS from 'antd/locale/en_US';
import 'dayjs/locale/zh-cn';
import 'dayjs/locale/en';
const App = () => {
const [locale, setLocale] = useState(zhCN);
const changeLocale = (newLocale) => {
setLocale(newLocale);
dayjs.locale(newLocale.locale === 'zh-cn' ? 'zh-cn' : 'en');
};
return (
<ConfigProvider locale={locale}>
<Space direction="vertical">
<Space>
<Button onClick={() => changeLocale(zhCN)}>中文</Button>
<Button onClick={() => changeLocale(enUS)}>English</Button>
</Space>
<DatePicker />
</Space>
</ConfigProvider>
);
};
日期组件国际化 #
tsx
import { ConfigProvider, DatePicker } from 'antd';
import zhCN from 'antd/locale/zh_CN';
import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
import weekday from 'dayjs/plugin/weekday';
import localeData from 'dayjs/plugin/localeData';
dayjs.extend(weekday);
dayjs.extend(localeData);
dayjs.locale('zh-cn');
<ConfigProvider locale={zhCN}>
<DatePicker />
</ConfigProvider>
自定义语言包 #
tsx
import { ConfigProvider } from 'antd';
const customLocale = {
locale: 'zh-cn',
Pagination: {
items_per_page: '条/页',
jump_to: '跳至',
page: '页',
prev_page: '上一页',
next_page: '下一页',
prev_5: '向前 5 页',
next_5: '向后 5 页',
prev_3: '向前 3 页',
next_3: '向后 3 页',
},
DatePicker: {
lang: {
placeholder: '请选择日期',
rangePlaceholder: ['开始日期', '结束日期'],
today: '今天',
now: '此刻',
ok: '确定',
timeSelect: '选择时间',
dateSelect: '选择日期',
},
},
};
<ConfigProvider locale={customLocale}>
<App />
</ConfigProvider>
RTL 支持 #
tsx
import { ConfigProvider, Button, Space } from 'antd';
import arEG from 'antd/locale/ar_EG';
<ConfigProvider
locale={arEG}
direction="rtl"
>
<Space>
<Button type="primary">按钮</Button>
<Button>按钮</Button>
</Space>
</ConfigProvider>
完整示例 #
tsx
import { ConfigProvider, Button, Space, DatePicker, Pagination, Table } from 'antd';
import { useState } from 'react';
import zhCN from 'antd/locale/zh_CN';
import enUS from 'antd/locale/en_US';
import dayjs from 'dayjs';
const App = () => {
const [locale, setLocale] = useState(zhCN);
const [direction, setDirection] = useState('ltr');
const changeLocale = (newLocale) => {
setLocale(newLocale);
dayjs.locale(newLocale.locale);
};
return (
<ConfigProvider locale={locale} direction={direction}>
<Space direction="vertical" style={{ width: '100%' }}>
<Space>
<Button onClick={() => changeLocale(zhCN)}>中文</Button>
<Button onClick={() => changeLocale(enUS)}>English</Button>
<Button onClick={() => setDirection(direction === 'ltr' ? 'rtl' : 'ltr')}>
切换 RTL
</Button>
</Space>
<DatePicker />
<Pagination total={100} />
</Space>
</ConfigProvider>
);
};
API #
ConfigProvider locale #
| 属性 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| locale | 语言包 | object | - |
| direction | 文本方向 | ltr | rtl |
ltr |
语言包结构 #
typescript
interface Locale {
locale: string;
Pagination?: Object;
DatePicker?: Object;
TimePicker?: Object;
Calendar?: Object;
Table?: Object;
Modal?: Object;
Popconfirm?: Object;
Transfer?: Object;
Select?: Object;
Upload?: Object;
}
最佳实践 #
1. 结合 react-intl #
tsx
import { ConfigProvider } from 'antd';
import { IntlProvider } from 'react-intl';
import zhCN from 'antd/locale/zh_CN';
import zhMessages from './locales/zh.json';
const App = () => {
return (
<IntlProvider locale="zh" messages={zhMessages}>
<ConfigProvider locale={zhCN}>
<App />
</ConfigProvider>
</IntlProvider>
);
};
2. 持久化语言设置 #
tsx
import { ConfigProvider } from 'antd';
import { useState, useEffect } from 'react';
import zhCN from 'antd/locale/zh_CN';
import enUS from 'antd/locale/en_US';
const App = () => {
const [locale, setLocale] = useState(zhCN);
useEffect(() => {
const savedLocale = localStorage.getItem('locale');
if (savedLocale === 'en') {
setLocale(enUS);
}
}, []);
const changeLocale = (newLocale) => {
setLocale(newLocale);
localStorage.setItem('locale', newLocale.locale === 'en-us' ? 'en' : 'zh');
};
return (
<ConfigProvider locale={locale}>
<App />
</ConfigProvider>
);
};
下一步 #
接下来学习 ConfigProvider 全局配置 组件!
最后更新:2026-03-28