diff --git a/i18n-guide.md b/i18n-guide.md
new file mode 100644
index 00000000..13828e53
--- /dev/null
+++ b/i18n-guide.md
@@ -0,0 +1,186 @@
+# 组件国际化指南
+
+## 概述
+
+本指南用于将组件完成国际化。
+
+## 一、创建的文件
+
+1. **`[组件目录]/withLocale.js`** - HOC 包裹组件,提供国际化上下文
+2. **`[组件目录]/locale/zh-CN.js`** - 中文语言包
+3. **`[组件目录]/locale/en-US.js`** - 英文语言包
+
+## 二、需要修改的文件类型
+
+### 主组件文件
+- 添加 `useIntl` Hook
+- 用 `withLocale` 包裹导出
+
+### FormInner 表单组件
+- 添加 `useIntl` Hook
+- 用 `withLocale` 包裹导出
+- 表单 label 国际化
+
+### getColumns 等工具函数
+- 通过参数接收 `formatMessage`
+- 移除内部的 `useIntl` 和 `withLocale` 引入
+
+### Action 操作组件
+- 添加 `useIntl` Hook
+- 用 `withLocale` 包裹导出
+
+## 三、国际化的关键模式
+
+### 1. useIntl Hook 使用
+```javascript
+import { useIntl } from '@kne/react-intl';
+
+const Component = () => {
+ const { formatMessage } = useIntl();
+ return
- 编辑表格
+ {formatMessage({id: 'EditTable'})}
-
+
}
@@ -111,7 +114,7 @@ const ColumnsControlContent = ({
ghost={true}
bordered
>
-
+
{leftFixedColumns.map((item, index) => (
- {item.titleText || item.title || "未命名列"}
+ {item.titleText || item.title || formatMessage({id: 'UnnamedColumn'})}
))}
@@ -195,7 +198,7 @@ const ColumnsControlContent = ({
key="un-active"
header={
- 隐藏的信息
+ {formatMessage({id: 'HiddenInfo'})}
{
e.stopPropagation();
@@ -204,7 +207,7 @@ const ColumnsControlContent = ({
>
}
- placeholder="搜索"
+ placeholder={formatMessage({id: 'Search'})}
onSearch={(value) => {
setSearchText(value);
}}
@@ -241,7 +244,7 @@ const ColumnsControlContent = ({
onChange(newConfig);
}}
>
- {item.titleText || item.title || "未命名列"}
+ {item.titleText || item.title || formatMessage({id: 'UnnamedColumn'})}
);
@@ -263,7 +266,7 @@ const ColumnsControlContent = ({
close();
}}
>
- 取消
+ {formatMessage({id: 'Cancel'})}
@@ -275,12 +278,12 @@ const ColumnsControlContent = ({
close();
}}
>
- 确定
+ {formatMessage({id: 'Confirm'})}
);
-};
+});
export default ColumnsControlContent;
diff --git a/src/components/Table/HideInfoComponent.js b/src/components/Table/HideInfoComponent.js
index 0495ac19..e48e82f0 100644
--- a/src/components/Table/HideInfoComponent.js
+++ b/src/components/Table/HideInfoComponent.js
@@ -3,6 +3,8 @@ import Ellipsis from "./Ellipsis";
import { Button } from "antd";
import ColItem from "./ColItem";
import isColValueEmpty from "./isColValueEmpty";
+import {useIntl} from '@kne/react-intl';
+import withLocale from './withLocale';
const DisplayInfo = createWithFetch({
loading: null,
@@ -10,7 +12,7 @@ const DisplayInfo = createWithFetch({
return children(data);
});
-const HideInfoComponent = ({
+const HideInfoComponent = withLocale(({
api,
expand,
onExpand,
@@ -20,6 +22,7 @@ const HideInfoComponent = ({
emptyRender,
isEmpty,
}) => {
+ const {formatMessage} = useIntl();
const targetApi = Object.assign({}, api);
if (expand) {
return (
@@ -48,10 +51,10 @@ const HideInfoComponent = ({
return (
);
-};
+});
export default HideInfoComponent;
diff --git a/src/components/Table/TablePage.js b/src/components/Table/TablePage.js
index 3b0f0fb5..d47d6f31 100644
--- a/src/components/Table/TablePage.js
+++ b/src/components/Table/TablePage.js
@@ -6,10 +6,10 @@ import get from "lodash/get";
import useRefCallback from "@kne/use-ref-callback";
import {forwardRef, useMemo, useState} from "react";
import style from "./style.module.scss";
-import importMessages from "./locale";
-import {FormattedMessage, IntlProvider} from "@components/Intl";
import localStorage from "@common/utils/localStorage";
import {getScrollEl} from "@common/utils/importantContainer";
+import {useIntl} from '@kne/react-intl';
+import withLocale from './withLocale';
const FeaturesColumnsConfig = ({id, columns, children}) => {
if (id) {
@@ -30,7 +30,7 @@ const FeaturesColumnsConfig = ({id, columns, children}) => {
return children({columns});
};
-const TablePageInner = withFetch(({
+const TablePageInnerContent = withLocale(({
data,
refresh,
reload,
@@ -55,6 +55,7 @@ const TablePageInner = withFetch(({
sticky = true,
...props
}) => {
+ const {formatMessage} = useIntl();
const handlerDataFormat = useRefCallback(dataFormat);
const formatData = useMemo(() => {
return handlerDataFormat(data);
@@ -64,17 +65,10 @@ const TablePageInner = withFetch(({
dataSource: formatData.list, pagination: pagination.open ? {
total: formatData.total,
showTotal: (total) => (<>
-
+ {formatMessage({id: 'TotalText'})}
{total}
-
+
+ {formatMessage({id: 'ItemText'})}
>),
current: get(requestParams, [pagination.paramsType, pagination.currentName], 1),
pageSize: get(requestParams, [pagination.paramsType, pagination.pageSizeName], 20),
@@ -104,28 +98,28 @@ const TablePageInner = withFetch(({
} : false,
};
- return (
-
- {({columns}) => ( {
- return summary(Object.assign({}, {
- data, fetchProps, requestParams, refresh, reload, loadMore, send, dataFormat, pagination,
- }, ...args));
- } : null}
- />)}
-
- );
+ return (
+ {({columns}) => ( {
+ return summary(Object.assign({}, {
+ data, fetchProps, requestParams, refresh, reload, loadMore, send, dataFormat, pagination,
+ }, ...args));
+ } : null}
+ />)}
+ );
});
+const TablePageInner = withFetch(TablePageInnerContent);
+
const TablePage = forwardRef(({pagination, ...props}, ref) => {
pagination = Object.assign({}, {
showSizeChanger: true,
diff --git a/src/components/Table/locale/en-US.js b/src/components/Table/locale/en-US.js
index ecb8ee92..a8d46d79 100644
--- a/src/components/Table/locale/en-US.js
+++ b/src/components/Table/locale/en-US.js
@@ -1,6 +1,15 @@
const message = {
- Page_Total: "Total",
- Page_TotalCount: " Items",
+ TotalText: "Total",
+ ItemText: "items",
+ UnnamedColumn: "Unnamed",
+ EditTable: "Edit Table",
+ RestoreDefault: "Restore Default",
+ VisibleInfo: "Visible Columns",
+ HiddenInfo: "Hidden Columns",
+ Search: "Search",
+ Cancel: "Cancel",
+ Confirm: "Confirm",
+ View: "View"
};
export default message;
diff --git a/src/components/Table/locale/index.js b/src/components/Table/locale/index.js
deleted file mode 100644
index 1a49770b..00000000
--- a/src/components/Table/locale/index.js
+++ /dev/null
@@ -1,8 +0,0 @@
-const importMessages = (locale) => {
- return {
- "en-US": () => import("./en-US"),
- "zh-CN": () => import("./zh-CN"),
- }[locale]();
-};
-
-export default importMessages;
diff --git a/src/components/Table/locale/zh-CN.js b/src/components/Table/locale/zh-CN.js
index 98e45c88..64da39b8 100644
--- a/src/components/Table/locale/zh-CN.js
+++ b/src/components/Table/locale/zh-CN.js
@@ -1,6 +1,15 @@
const message = {
- Page_Total: "共",
- Page_TotalCount: "条",
+ TotalText: "共",
+ ItemText: "条",
+ UnnamedColumn: "未命名列",
+ EditTable: "编辑表格",
+ RestoreDefault: "恢复默认",
+ VisibleInfo: "显示的信息",
+ HiddenInfo: "隐藏的信息",
+ Search: "搜索",
+ Cancel: "取消",
+ Confirm: "确定",
+ View: "查看"
};
export default message;
diff --git a/src/components/Table/withLocale.js b/src/components/Table/withLocale.js
new file mode 100644
index 00000000..2f394257
--- /dev/null
+++ b/src/components/Table/withLocale.js
@@ -0,0 +1,11 @@
+import {createWithIntlProvider} from '@kne/react-intl';
+import zhCN from './locale/zh-CN';
+import enUS from './locale/en-US';
+
+const withLocale = createWithIntlProvider({
+ defaultLocale: 'zh-CN', messages: {
+ 'zh-CN': zhCN, 'en-US': enUS
+ }, namespace: 'table'
+});
+
+export default withLocale;