Skip to content

Commit dc09de1

Browse files
committed
feat: multi-language component
1 parent e5f8ce3 commit dc09de1

40 files changed

+457
-153
lines changed

CHANGELOG.zh_CN.md

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
### 🎫 Chores
1515

1616
- 更新 antdv 到`2.0.0-rc.2`
17+
- 更新 vue 到`3.0.3`
18+
- 更新 vite 到`1.0.0.rc10`
1719
- 暂时删除 `@vueuse/core`.等稳定后在集成。目前不太稳定。
1820

1921
## 2.0.0-rc.11 (2020-11-18)

package.json

+3-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
"qrcode": "^1.4.4",
3636
"sortablejs": "^1.12.0",
3737
"vditor": "^3.6.6",
38-
"vue": "^3.0.2",
38+
"vue": "^3.0.3",
3939
"vue-i18n": "^9.0.0-beta.8",
4040
"vue-router": "^4.0.0-rc.5",
4141
"vuex": "^4.0.0-rc.1",
@@ -63,7 +63,7 @@
6363
"@types/zxcvbn": "^4.4.0",
6464
"@typescript-eslint/eslint-plugin": "^4.8.2",
6565
"@typescript-eslint/parser": "^4.8.2",
66-
"@vue/compiler-sfc": "^3.0.2",
66+
"@vue/compiler-sfc": "^3.0.3",
6767
"@vuedx/typecheck": "^0.2.4-0",
6868
"@vuedx/typescript-plugin-vue": "^0.2.4-0",
6969
"autoprefixer": "^9.8.6",
@@ -96,7 +96,7 @@
9696
"tasksfile": "^5.1.1",
9797
"ts-node": "^9.0.0",
9898
"typescript": "^4.1.2",
99-
"vite": "^1.0.0-rc.9",
99+
"vite": "^1.0.0-rc.10",
100100
"vite-plugin-html": "^1.0.0-beta.2",
101101
"vite-plugin-mock": "^1.0.6",
102102
"vite-plugin-purge-icons": "^0.4.5",

src/components/Drawer/src/BasicDrawer.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import './index.less';
2+
13
import type { DrawerInstance, DrawerProps } from './types';
24

35
import { defineComponent, ref, computed, watchEffect, watch, unref, nextTick, toRaw } from 'vue';
@@ -13,8 +15,7 @@ import { getSlot } from '/@/utils/helper/tsxHelper';
1315
import { isFunction, isNumber } from '/@/utils/is';
1416
import { buildUUID } from '/@/utils/uuid';
1517
import { deepMerge } from '/@/utils';
16-
17-
import './index.less';
18+
import { useI18n } from '/@/hooks/web/useI18n';
1819

1920
const prefixCls = 'basic-drawer';
2021
export default defineComponent({
@@ -27,6 +28,8 @@ export default defineComponent({
2728
const visibleRef = ref(false);
2829
const propsRef = ref<Partial<DrawerProps> | null>(null);
2930

31+
const { t } = useI18n('component.drawer');
32+
3033
const getMergeProps = computed((): any => {
3134
return deepMerge(toRaw(props), unref(propsRef));
3235
});
@@ -208,7 +211,7 @@ export default defineComponent({
208211
>
209212
<FullLoading
210213
absolute
211-
tip="加载中..."
214+
tip={t('loadingText')}
212215
class={[!unref(getProps).loading ? 'hidden' : '']}
213216
/>
214217
{getSlot(slots, 'default')}

src/components/Drawer/src/props.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
11
import type { PropType } from 'vue';
2+
3+
import { useI18n } from '/@/hooks/web/useI18n';
4+
const { t } = useI18n('component.drawer');
5+
26
export const footerProps = {
37
confirmLoading: Boolean as PropType<boolean>,
48
/**
@@ -11,7 +15,7 @@ export const footerProps = {
1115
cancelButtonProps: Object as PropType<any>,
1216
cancelText: {
1317
type: String as PropType<string>,
14-
default: '关闭',
18+
default: t('cancelText'),
1519
},
1620
/**
1721
* @description: Show confirmation button
@@ -23,7 +27,7 @@ export const footerProps = {
2327
okButtonProps: Object as PropType<any>,
2428
okText: {
2529
type: String as PropType<string>,
26-
default: '确认',
30+
default: t('okText'),
2731
},
2832
okType: {
2933
type: String as PropType<string>,

src/components/Excel/src/ExportExcelModel.vue

+14-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
<template>
2-
<BasicModal v-bind="$attrs" title="导出数据" @ok="handleOk" @register="registerModal">
2+
<BasicModal
3+
v-bind="$attrs"
4+
:title="t('exportModalTitle')"
5+
@ok="handleOk"
6+
@register="registerModal"
7+
>
38
<BasicForm
49
:labelWidth="100"
510
:schemas="schemas"
@@ -9,22 +14,26 @@
914
</BasicModal>
1015
</template>
1116
<script lang="ts">
17+
import type { ExportModalResult } from './types';
1218
import { defineComponent } from 'vue';
1319
import { BasicModal, useModalInner } from '/@/components/Modal';
1420
import { BasicForm, FormSchema, useForm } from '/@/components/Form/index';
15-
import { ExportModalResult } from './types';
21+
22+
import { useI18n } from '/@/hooks/web/useI18n';
23+
24+
const { t } = useI18n('component.excel');
1625
1726
const schemas: FormSchema[] = [
1827
{
1928
field: 'filename',
2029
component: 'Input',
21-
label: '文件名',
30+
label: t('fileName'),
2231
rules: [{ required: true }],
2332
},
2433
{
2534
field: 'bookType',
2635
component: 'Select',
27-
label: '文件类型',
36+
label: t('fileType'),
2837
defaultValue: 'xlsx',
2938
rules: [{ required: true }],
3039
componentProps: {
@@ -76,6 +85,7 @@
7685
handleOk,
7786
registerForm,
7887
registerModal,
88+
t,
7989
};
8090
},
8191
});

src/components/Excel/src/ImportExcel.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@
7979
/* DO SOMETHING WITH workbook HERE */
8080
const excelData = getExcelData(workbook);
8181
emit('success', excelData);
82-
resolve();
82+
resolve('');
8383
} catch (error) {
8484
reject(error);
8585
} finally {

src/components/Form/src/FormAction.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ import Button from '/@/components/Button/index.vue';
66
import { BasicArrow } from '/@/components/Basic/index';
77

88
import { getSlot } from '/@/utils/helper/tsxHelper';
9+
import { useI18n } from '/@/hooks/web/useI18n';
10+
11+
const { t } = useI18n('component.form');
912

1013
export default defineComponent({
1114
name: 'BasicFormAction',
@@ -55,14 +58,14 @@ export default defineComponent({
5558
setup(props, { slots, emit }) {
5659
const getResetBtnOptionsRef = computed(() => {
5760
return {
58-
text: '重置',
61+
text: t('resetButton'),
5962
...props.resetButtonOptions,
6063
};
6164
});
6265

6366
const getSubmitBtnOptionsRef = computed(() => {
6467
return {
65-
text: '查询',
68+
text: t('submitButton'),
6669
// htmlType: 'submit',
6770
...props.submitButtonOptions,
6871
};
@@ -108,7 +111,7 @@ export default defineComponent({
108111
<Button type="default" class="mr-2" onClick={toggleAdvanced}>
109112
{() => (
110113
<>
111-
{isAdvanced ? '收起' : '展开'}
114+
{isAdvanced ? t('putAway') : t('unfold')}
112115
<BasicArrow expand={!isAdvanced} />
113116
</>
114117
)}

src/components/Form/src/helper.ts

+6-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,17 @@
11
import type { ComponentType } from './types/index';
2+
import { useI18n } from '/@/hooks/web/useI18n';
3+
4+
const { t } = useI18n('component.form');
25

36
/**
47
* @description: 生成placeholder
58
*/
69
export function createPlaceholderMessage(component: ComponentType) {
710
if (component.includes('Input') || component.includes('Complete')) {
8-
return '请输入';
11+
return t('input');
912
}
1013
if (component.includes('Picker')) {
11-
return '请选择';
14+
return t('choose');
1215
}
1316
if (
1417
component.includes('Select') ||
@@ -18,7 +21,7 @@ export function createPlaceholderMessage(component: ComponentType) {
1821
component.includes('Switch')
1922
) {
2023
// return `请选择${label}`;
21-
return '请选择';
24+
return t('choose');
2225
}
2326
return '';
2427
}

src/components/Menu/src/SearchInput.vue

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<template>
22
<section class="menu-search-input" @Click="handleClick" :class="searchClass">
33
<a-input-search
4-
placeholder="菜单搜索"
4+
:placeholder="t('search')"
55
class="menu-search-input__search"
66
allowClear
77
@change="handleChange"
@@ -12,9 +12,9 @@
1212
import type { PropType } from 'vue';
1313
import { defineComponent, computed } from 'vue';
1414
import { ThemeEnum } from '/@/enums/appEnum';
15-
1615
// hook
1716
import { useDebounce } from '/@/hooks/core/useDebounce';
17+
import { useI18n } from '/@/hooks/web/useI18n';
1818
//
1919
export default defineComponent({
2020
name: 'BasicMenuSearchInput',
@@ -29,6 +29,8 @@
2929
},
3030
},
3131
setup(props, { emit }) {
32+
const { t } = useI18n('component.menu');
33+
3234
const [debounceEmitChange] = useDebounce(emitChange, 200);
3335
3436
function emitChange(value?: string): void {
@@ -52,7 +54,7 @@
5254
return cls;
5355
});
5456
55-
return { handleClick, searchClass, handleChange };
57+
return { handleClick, searchClass, handleChange, t };
5658
},
5759
});
5860
</script>

src/components/Menu/src/types.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
import { ComputedRef } from 'vue';
12
import { ThemeEnum } from '/@/enums/appEnum';
3+
import { MenuModeEnum } from '/@/enums/menuEnum';
24
export interface MenuState {
35
// 默认选中的列表
46
defaultSelectedKeys: string[];

src/components/Modal/src/props.ts

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
import type { PropType } from 'vue';
22
import { ButtonProps } from 'ant-design-vue/es/button/buttonTypes';
3+
4+
import { useI18n } from '/@/hooks/web/useI18n';
5+
const { t } = useI18n('component.modal');
6+
37
export const modalProps = {
48
visible: Boolean as PropType<boolean>,
59
// open drag
@@ -13,11 +17,11 @@ export const modalProps = {
1317
},
1418
cancelText: {
1519
type: String as PropType<string>,
16-
default: '关闭',
20+
default: t('cancelText'),
1721
},
1822
okText: {
1923
type: String as PropType<string>,
20-
default: '确认',
24+
default: t('okText'),
2125
},
2226
closeFunc: Function as PropType<() => Promise<boolean>>,
2327
};

src/components/Table/src/components/TableSetting.vue

+13-9
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,27 @@
44

55
<Tooltip placement="top" v-if="getSetting.redo">
66
<template #title>
7-
<span>刷新</span>
7+
<span>{{ t('settingRedo') }}</span>
88
</template>
99
<RedoOutlined @click="redo" />
1010
</Tooltip>
1111

1212
<Tooltip placement="top" v-if="getSetting.size">
1313
<template #title>
14-
<span>密度</span>
14+
<span>{{ t('settingDens') }}</span>
1515
</template>
1616
<Dropdown placement="bottomCenter" :trigger="['click']">
1717
<ColumnHeightOutlined />
1818
<template #overlay>
1919
<Menu @click="handleTitleClick" selectable v-model:selectedKeys="selectedKeysRef">
2020
<MenuItem key="default">
21-
<span>默认</span>
21+
<span>{{ t('settingDensDefault') }}</span>
2222
</MenuItem>
2323
<MenuItem key="middle">
24-
<span>中等</span>
24+
<span>{{ t('settingDensMiddle') }}</span>
2525
</MenuItem>
2626
<MenuItem key="small">
27-
<span>紧凑</span>
27+
<span>{{ t('settingDensSmall') }}</span>
2828
</MenuItem>
2929
</Menu>
3030
</template>
@@ -33,7 +33,7 @@
3333

3434
<Tooltip placement="top" v-if="getSetting.setting">
3535
<template #title>
36-
<span>列设置</span>
36+
<span>{{ t('settingColumn') }}</span>
3737
</template>
3838
<Popover
3939
placement="bottomLeft"
@@ -58,9 +58,9 @@
5858
v-model:checked="checkAll"
5959
@change="onCheckAllChange"
6060
>
61-
列展示
61+
{{ t('settingColumnShow') }}
6262
</Checkbox>
63-
<a-button size="small" type="link" @click="reset">重置</a-button>
63+
<a-button size="small" type="link" @click="reset"> {{ t('settingReset') }}</a-button>
6464
</div>
6565
</template>
6666
<SettingOutlined />
@@ -69,7 +69,7 @@
6969

7070
<Tooltip placement="top" v-if="getSetting.fullScreen">
7171
<template #title>
72-
<span>全屏</span>
72+
<span>{{ t('settingFullScreen') }}</span>
7373
</template>
7474
<FullscreenOutlined @click="handleFullScreen" v-if="!isFullscreenRef" />
7575
<FullscreenExitOutlined @click="handleFullScreen" v-else />
@@ -90,6 +90,7 @@
9090
import { useFullscreen } from '/@/hooks/web/useFullScreen';
9191
9292
import type { SizeType, TableSetting } from '../types/table';
93+
import { useI18n } from '/@/hooks/web/useI18n';
9394
9495
interface Options {
9596
label: string;
@@ -139,6 +140,8 @@
139140
defaultCheckList: [],
140141
});
141142
143+
const { t } = useI18n('component.table');
144+
142145
function init() {
143146
let ret: Options[] = [];
144147
table.getColumns({ ignoreIndex: true, ignoreAction: true }).forEach((item) => {
@@ -217,6 +220,7 @@
217220
reset,
218221
getSetting,
219222
...toRefs(state),
223+
t,
220224
};
221225
},
222226
});

src/components/Table/src/hooks/useColumns.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ import { unref, ComputedRef, Ref, computed, watchEffect, ref, toRaw } from 'vue'
44
import { isBoolean, isArray, isObject } from '/@/utils/is';
55
import { PAGE_SIZE } from '../const';
66
import { useProps } from './useProps';
7+
import { useI18n } from '/@/hooks/web/useI18n';
78

9+
const { t } = useI18n('component.table');
810
export function useColumns(
911
refProps: ComputedRef<BasicTableProps>,
1012
getPaginationRef: ComputedRef<false | PaginationProps>
@@ -42,7 +44,7 @@ export function useColumns(
4244
columns.unshift({
4345
flag: 'INDEX',
4446
width: 50,
45-
title: '序号',
47+
title: t('index'),
4648
align: 'center',
4749
customRender: ({ index }) => {
4850
const getPagination = unref(getPaginationRef);

0 commit comments

Comments
 (0)