@smallwei/avue 3.8.2 → 3.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +206 -86
- package/dist/avue.js +37302 -0
- package/dist/avue.js.map +1 -0
- package/dist/avue.min.js +6 -0
- package/dist/avue.min.mjs +2 -0
- package/dist/avue.mjs +2 -0
- package/dist/index.css +1 -0
- package/es/avue.min.mjs +2 -0
- package/es/avue.min.ts +2 -0
- package/es/avue.mjs +2 -0
- package/es/avue.ts +2 -0
- package/es/core/create.mjs +8 -0
- package/es/core/create.ts +16 -0
- package/es/core/dataformat.mjs +184 -0
- package/es/core/dataformat.ts +190 -0
- package/es/core/detail.mjs +74 -0
- package/es/core/detail.ts +81 -0
- package/es/core/dic.mjs +213 -0
- package/es/core/dic.ts +235 -0
- package/es/core/locale.mjs +8 -0
- package/es/core/locale.ts +9 -0
- package/es/core/packages.mjs +61 -0
- package/es/core/packages.ts +62 -0
- package/es/core/slot.mjs +32 -0
- package/es/core/slot.ts +30 -0
- package/es/global/variable.mjs +80 -0
- package/es/global/variable.ts +84 -0
- package/es/icon.mjs +9 -0
- package/es/icon.ts +11 -0
- package/es/index.mjs +127 -0
- package/es/index.ts +177 -0
- package/es/locale/browser/en.mjs +288 -0
- package/es/locale/browser/zh-cn.mjs +288 -0
- package/es/locale/browser/zh.mjs +288 -0
- package/es/locale/index.mjs +141 -0
- package/es/locale/index.ts +196 -0
- package/es/locale/lang/en.mjs +282 -0
- package/es/locale/lang/en.ts +282 -0
- package/es/locale/lang/zh-cn.mjs +282 -0
- package/es/locale/lang/zh-cn.ts +282 -0
- package/es/locale/lang/zh.mjs +282 -0
- package/es/locale/lang/zh.ts +282 -0
- package/es/packages/core/common/event.mjs +58 -0
- package/es/packages/core/common/event.ts +56 -0
- package/es/packages/core/common/init.mjs +134 -0
- package/es/packages/core/common/init.ts +133 -0
- package/es/packages/core/common/props.mjs +239 -0
- package/es/packages/core/common/props.ts +240 -0
- package/es/packages/core/components/dialog-form/index.mjs +29 -0
- package/es/packages/core/components/dialog-form/index.ts +29 -0
- package/es/packages/core/components/dialog-form/index.vue +108 -0
- package/es/packages/core/components/form/custom.mjs +41 -0
- package/es/packages/core/components/form/custom.ts +41 -0
- package/es/packages/core/components/form/index.vue +176 -0
- package/es/packages/core/components/icon/index.vue +37 -0
- package/es/packages/core/components/image-preview/index.mjs +34 -0
- package/es/packages/core/components/image-preview/index.ts +37 -0
- package/es/packages/core/components/image-preview/index.vue +215 -0
- package/es/packages/core/directive/contextmenu.mjs +92 -0
- package/es/packages/core/directive/contextmenu.ts +103 -0
- package/es/packages/core/directive/permission.mjs +19 -0
- package/es/packages/core/directive/permission.ts +18 -0
- package/es/packages/data/box/index.vue +66 -0
- package/es/packages/data/card/index.vue +62 -0
- package/es/packages/data/cardText/index.vue +56 -0
- package/es/packages/data/countdown/index.vue +81 -0
- package/es/packages/data/dashboard/index.vue +72 -0
- package/es/packages/data/display/index.vue +63 -0
- package/es/packages/data/icons/index.vue +68 -0
- package/es/packages/data/imgText/index.vue +72 -0
- package/es/packages/data/list/index.vue +69 -0
- package/es/packages/data/notice/index.vue +63 -0
- package/es/packages/data/operaText/index.vue +62 -0
- package/es/packages/data/panel/index.vue +62 -0
- package/es/packages/data/pay/index.vue +92 -0
- package/es/packages/data/price/index.vue +55 -0
- package/es/packages/data/product/index.vue +106 -0
- package/es/packages/data/profile/index.vue +91 -0
- package/es/packages/data/progress/index.vue +64 -0
- package/es/packages/data/rank/index.vue +92 -0
- package/es/packages/data/rotate/index.vue +69 -0
- package/es/packages/data/statistic/index.vue +71 -0
- package/es/packages/data/tabs/index.vue +64 -0
- package/es/packages/data/task/index.vue +82 -0
- package/es/packages/data/weather/index.vue +103 -0
- package/es/packages/element-plus/array/index.vue +115 -0
- package/es/packages/element-plus/article/index.vue +73 -0
- package/es/packages/element-plus/card/index.vue +103 -0
- package/es/packages/element-plus/cascader/index.vue +132 -0
- package/es/packages/element-plus/chat/index.vue +513 -0
- package/es/packages/element-plus/checkbox/index.vue +84 -0
- package/es/packages/element-plus/comment/index.vue +76 -0
- package/es/packages/element-plus/count-up/index.vue +109 -0
- package/es/packages/element-plus/crud/column/column-default.vue +128 -0
- package/es/packages/element-plus/crud/column/column-dynamic.vue +86 -0
- package/es/packages/element-plus/crud/column/column-menu.vue +267 -0
- package/es/packages/element-plus/crud/column/column-slot.vue +348 -0
- package/es/packages/element-plus/crud/column/column.vue +119 -0
- package/es/packages/element-plus/crud/column/menu.vue +78 -0
- package/es/packages/element-plus/crud/config.mjs +74 -0
- package/es/packages/element-plus/crud/config.ts +74 -0
- package/es/packages/element-plus/crud/dialog/dialog-column.vue +102 -0
- package/es/packages/element-plus/crud/dialog/dialog-excel.vue +204 -0
- package/es/packages/element-plus/crud/dialog/dialog-filter.vue +159 -0
- package/es/packages/element-plus/crud/dialog/dialog-form.vue +352 -0
- package/es/packages/element-plus/crud/grid/index.vue +271 -0
- package/es/packages/element-plus/crud/grid/item.vue +39 -0
- package/es/packages/element-plus/crud/index.vue +1018 -0
- package/es/packages/element-plus/crud/menu/header-menu.vue +175 -0
- package/es/packages/element-plus/crud/menu/header-search.vue +228 -0
- package/es/packages/element-plus/crud/menu/table-page.vue +108 -0
- package/es/packages/element-plus/date/index.vue +81 -0
- package/es/packages/element-plus/draggable/index.vue +444 -0
- package/es/packages/element-plus/dynamic/index.vue +353 -0
- package/es/packages/element-plus/flow/index.vue +339 -0
- package/es/packages/element-plus/flow/node.vue +84 -0
- package/es/packages/element-plus/form/config.mjs +6 -0
- package/es/packages/element-plus/form/config.ts +6 -0
- package/es/packages/element-plus/form/index.vue +954 -0
- package/es/packages/element-plus/form/menu.vue +63 -0
- package/es/packages/element-plus/group/index.vue +90 -0
- package/es/packages/element-plus/input/index.vue +1264 -0
- package/es/packages/element-plus/input-color/index.vue +70 -0
- package/es/packages/element-plus/input-cron/index.vue +363 -0
- package/es/packages/element-plus/input-icon/index.vue +143 -0
- package/es/packages/element-plus/input-map/index.vue +311 -0
- package/es/packages/element-plus/input-number/index.vue +91 -0
- package/es/packages/element-plus/input-table/index.vue +279 -0
- package/es/packages/element-plus/input-tag/index.vue +79 -0
- package/es/packages/element-plus/input-tree/index.vue +194 -0
- package/es/packages/element-plus/license/index.vue +155 -0
- package/es/packages/element-plus/login/index.vue +203 -0
- package/es/packages/element-plus/mention/index.vue +117 -0
- package/es/packages/element-plus/radio/index.vue +38 -0
- package/es/packages/element-plus/rate/index.vue +51 -0
- package/es/packages/element-plus/search/index.vue +129 -0
- package/es/packages/element-plus/select/index.vue +292 -0
- package/es/packages/element-plus/sign/index.vue +230 -0
- package/es/packages/element-plus/slider/index.vue +66 -0
- package/es/packages/element-plus/switch/index.vue +72 -0
- package/es/packages/element-plus/tabs/index.vue +62 -0
- package/es/packages/element-plus/text-ellipsis/index.vue +104 -0
- package/es/packages/element-plus/time/index.vue +81 -0
- package/es/packages/element-plus/title/index.vue +30 -0
- package/es/packages/element-plus/tree/index.vue +460 -0
- package/es/packages/element-plus/upload/index.vue +728 -0
- package/es/packages/element-plus/verify/index.vue +62 -0
- package/es/packages/element-plus/video/index.vue +90 -0
- package/es/plugin/ali/index.mjs +4 -0
- package/es/plugin/ali/index.ts +6 -0
- package/es/plugin/clipboard/index.mjs +61 -0
- package/es/plugin/clipboard/index.ts +67 -0
- package/es/plugin/export/_blob.mjs +151 -0
- package/es/plugin/export/_blob.ts +176 -0
- package/es/plugin/export/_export2Excel.mjs +141 -0
- package/es/plugin/export/_export2Excel.ts +166 -0
- package/es/plugin/export/index.mjs +263 -0
- package/es/plugin/export/index.ts +274 -0
- package/es/plugin/logs/index.mjs +46 -0
- package/es/plugin/logs/index.ts +66 -0
- package/es/plugin/print/index.mjs +145 -0
- package/es/plugin/print/index.ts +155 -0
- package/es/plugin/qiniu/index.mjs +78 -0
- package/es/plugin/qiniu/index.ts +88 -0
- package/es/plugin/screenshot/index.mjs +8 -0
- package/es/plugin/screenshot/index.ts +9 -0
- package/es/plugin/video/index.mjs +52 -0
- package/es/plugin/video/index.ts +60 -0
- package/es/plugin/watermark/index.mjs +114 -0
- package/es/plugin/watermark/index.ts +127 -0
- package/es/plugin/watermark/watermark.mjs +109 -0
- package/es/plugin/watermark/watermark.ts +121 -0
- package/es/ui/data/index.mjs +49 -0
- package/es/ui/data/index.ts +51 -0
- package/es/ui/element-plus/index.mjs +87 -0
- package/es/ui/element-plus/index.ts +89 -0
- package/es/ui/index.mjs +4 -0
- package/es/ui/index.ts +6 -0
- package/es/utils/bem.mjs +29 -0
- package/es/utils/bem.ts +36 -0
- package/es/utils/mock.mjs +137 -0
- package/es/utils/mock.ts +151 -0
- package/es/utils/util.mjs +370 -0
- package/es/utils/util.ts +392 -0
- package/es/utils/validate.mjs +18 -0
- package/es/utils/validate.ts +23 -0
- package/es/version.mjs +1 -0
- package/es/version.ts +1 -0
- package/lib/avue.js +11 -35880
- package/lib/avue.min.js +11 -6
- package/lib/avue.min.ts +2 -0
- package/lib/avue.ts +2 -0
- package/lib/core/create.js +14 -0
- package/lib/core/create.ts +16 -0
- package/lib/core/dataformat.js +194 -0
- package/lib/core/dataformat.ts +190 -0
- package/lib/core/detail.js +81 -0
- package/lib/core/detail.ts +81 -0
- package/lib/core/dic.js +220 -0
- package/lib/core/dic.ts +235 -0
- package/lib/core/locale.js +10 -0
- package/lib/core/locale.ts +9 -0
- package/lib/core/packages.js +66 -0
- package/lib/core/packages.ts +62 -0
- package/lib/core/slot.js +34 -0
- package/lib/core/slot.ts +30 -0
- package/lib/global/variable.js +83 -0
- package/lib/global/variable.ts +84 -0
- package/lib/icon.js +44 -0
- package/lib/icon.ts +11 -0
- package/lib/index.js +134 -0
- package/lib/index.ts +177 -0
- package/lib/locale/browser/en.js +288 -0
- package/lib/locale/browser/zh-cn.js +288 -0
- package/lib/locale/browser/zh.js +288 -0
- package/lib/locale/index.js +153 -47
- package/lib/locale/index.ts +196 -0
- package/lib/locale/lang/en.js +284 -100
- package/lib/locale/lang/en.ts +282 -0
- package/lib/locale/lang/zh-cn.js +284 -0
- package/lib/locale/lang/zh-cn.ts +282 -0
- package/lib/locale/lang/zh.js +284 -100
- package/lib/locale/lang/zh.ts +282 -0
- package/lib/packages/core/common/event.js +61 -0
- package/lib/packages/core/common/event.ts +56 -0
- package/lib/packages/core/common/init.js +140 -0
- package/lib/packages/core/common/init.ts +133 -0
- package/lib/packages/core/common/props.js +245 -0
- package/lib/packages/core/common/props.ts +240 -0
- package/lib/packages/core/components/dialog-form/index.js +35 -0
- package/lib/packages/core/components/dialog-form/index.ts +29 -0
- package/lib/packages/core/components/dialog-form/index.vue +108 -0
- package/lib/packages/core/components/form/custom.js +43 -0
- package/lib/packages/core/components/form/custom.ts +41 -0
- package/lib/packages/core/components/form/index.vue +176 -0
- package/lib/packages/core/components/icon/index.vue +37 -0
- package/lib/packages/core/components/image-preview/index.js +40 -0
- package/lib/packages/core/components/image-preview/index.ts +37 -0
- package/lib/packages/core/components/image-preview/index.vue +215 -0
- package/lib/packages/core/directive/contextmenu.js +94 -0
- package/lib/packages/core/directive/contextmenu.ts +103 -0
- package/lib/packages/core/directive/permission.js +21 -0
- package/lib/packages/core/directive/permission.ts +18 -0
- package/lib/packages/data/box/index.vue +66 -0
- package/lib/packages/data/card/index.vue +62 -0
- package/lib/packages/data/cardText/index.vue +56 -0
- package/lib/packages/data/countdown/index.vue +81 -0
- package/lib/packages/data/dashboard/index.vue +72 -0
- package/lib/packages/data/display/index.vue +63 -0
- package/lib/packages/data/icons/index.vue +68 -0
- package/lib/packages/data/imgText/index.vue +72 -0
- package/lib/packages/data/list/index.vue +69 -0
- package/lib/packages/data/notice/index.vue +63 -0
- package/lib/packages/data/operaText/index.vue +62 -0
- package/lib/packages/data/panel/index.vue +62 -0
- package/lib/packages/data/pay/index.vue +92 -0
- package/lib/packages/data/price/index.vue +55 -0
- package/lib/packages/data/product/index.vue +106 -0
- package/lib/packages/data/profile/index.vue +91 -0
- package/lib/packages/data/progress/index.vue +64 -0
- package/lib/packages/data/rank/index.vue +92 -0
- package/lib/packages/data/rotate/index.vue +69 -0
- package/lib/packages/data/statistic/index.vue +71 -0
- package/lib/packages/data/tabs/index.vue +64 -0
- package/lib/packages/data/task/index.vue +82 -0
- package/lib/packages/data/weather/index.vue +103 -0
- package/lib/packages/element-plus/array/index.vue +115 -0
- package/lib/packages/element-plus/article/index.vue +73 -0
- package/lib/packages/element-plus/card/index.vue +103 -0
- package/lib/packages/element-plus/cascader/index.vue +132 -0
- package/lib/packages/element-plus/chat/index.vue +513 -0
- package/lib/packages/element-plus/checkbox/index.vue +84 -0
- package/lib/packages/element-plus/comment/index.vue +76 -0
- package/lib/packages/element-plus/count-up/index.vue +109 -0
- package/lib/packages/element-plus/crud/column/column-default.vue +128 -0
- package/lib/packages/element-plus/crud/column/column-dynamic.vue +86 -0
- package/lib/packages/element-plus/crud/column/column-menu.vue +267 -0
- package/lib/packages/element-plus/crud/column/column-slot.vue +348 -0
- package/lib/packages/element-plus/crud/column/column.vue +119 -0
- package/lib/packages/element-plus/crud/column/menu.vue +78 -0
- package/lib/packages/element-plus/crud/config.js +76 -0
- package/lib/packages/element-plus/crud/config.ts +74 -0
- package/lib/packages/element-plus/crud/dialog/dialog-column.vue +102 -0
- package/lib/packages/element-plus/crud/dialog/dialog-excel.vue +204 -0
- package/lib/packages/element-plus/crud/dialog/dialog-filter.vue +159 -0
- package/lib/packages/element-plus/crud/dialog/dialog-form.vue +352 -0
- package/lib/packages/element-plus/crud/grid/index.vue +271 -0
- package/lib/packages/element-plus/crud/grid/item.vue +39 -0
- package/lib/packages/element-plus/crud/index.vue +1018 -0
- package/lib/packages/element-plus/crud/menu/header-menu.vue +175 -0
- package/lib/packages/element-plus/crud/menu/header-search.vue +228 -0
- package/lib/packages/element-plus/crud/menu/table-page.vue +108 -0
- package/lib/packages/element-plus/date/index.vue +81 -0
- package/lib/packages/element-plus/draggable/index.vue +444 -0
- package/lib/packages/element-plus/dynamic/index.vue +353 -0
- package/lib/packages/element-plus/flow/index.vue +339 -0
- package/lib/packages/element-plus/flow/node.vue +84 -0
- package/lib/packages/element-plus/form/config.js +8 -0
- package/lib/packages/element-plus/form/config.ts +6 -0
- package/lib/packages/element-plus/form/index.vue +954 -0
- package/lib/packages/element-plus/form/menu.vue +63 -0
- package/lib/packages/element-plus/group/index.vue +90 -0
- package/lib/packages/element-plus/input/index.vue +1264 -0
- package/lib/packages/element-plus/input-color/index.vue +70 -0
- package/lib/packages/element-plus/input-cron/index.vue +363 -0
- package/lib/packages/element-plus/input-icon/index.vue +143 -0
- package/lib/packages/element-plus/input-map/index.vue +311 -0
- package/lib/packages/element-plus/input-number/index.vue +91 -0
- package/lib/packages/element-plus/input-table/index.vue +279 -0
- package/lib/packages/element-plus/input-tag/index.vue +79 -0
- package/lib/packages/element-plus/input-tree/index.vue +194 -0
- package/lib/packages/element-plus/license/index.vue +155 -0
- package/lib/packages/element-plus/login/index.vue +203 -0
- package/lib/packages/element-plus/mention/index.vue +117 -0
- package/lib/packages/element-plus/radio/index.vue +38 -0
- package/lib/packages/element-plus/rate/index.vue +51 -0
- package/lib/packages/element-plus/search/index.vue +129 -0
- package/lib/packages/element-plus/select/index.vue +292 -0
- package/lib/packages/element-plus/sign/index.vue +230 -0
- package/lib/packages/element-plus/slider/index.vue +66 -0
- package/lib/packages/element-plus/switch/index.vue +72 -0
- package/lib/packages/element-plus/tabs/index.vue +62 -0
- package/lib/packages/element-plus/text-ellipsis/index.vue +104 -0
- package/lib/packages/element-plus/time/index.vue +81 -0
- package/lib/packages/element-plus/title/index.vue +30 -0
- package/lib/packages/element-plus/tree/index.vue +460 -0
- package/lib/packages/element-plus/upload/index.vue +728 -0
- package/lib/packages/element-plus/verify/index.vue +62 -0
- package/lib/packages/element-plus/video/index.vue +90 -0
- package/lib/plugin/ali/index.js +8 -0
- package/lib/plugin/ali/index.ts +6 -0
- package/lib/plugin/clipboard/index.js +64 -0
- package/lib/plugin/clipboard/index.ts +67 -0
- package/lib/plugin/export/_blob.js +151 -0
- package/lib/plugin/export/_blob.ts +176 -0
- package/lib/plugin/export/_export2Excel.js +145 -0
- package/lib/plugin/export/_export2Excel.ts +166 -0
- package/lib/plugin/export/index.js +268 -0
- package/lib/plugin/export/index.ts +274 -0
- package/lib/plugin/logs/index.js +48 -0
- package/lib/plugin/logs/index.ts +66 -0
- package/lib/plugin/print/index.js +147 -0
- package/lib/plugin/print/index.ts +155 -0
- package/lib/plugin/qiniu/index.js +82 -0
- package/lib/plugin/qiniu/index.ts +88 -0
- package/lib/plugin/screenshot/index.js +14 -0
- package/lib/plugin/screenshot/index.ts +9 -0
- package/lib/plugin/video/index.js +55 -0
- package/lib/plugin/video/index.ts +60 -0
- package/lib/plugin/watermark/index.js +121 -0
- package/lib/plugin/watermark/index.ts +127 -0
- package/lib/plugin/watermark/watermark.js +111 -0
- package/lib/plugin/watermark/watermark.ts +121 -0
- package/lib/ui/data/index.js +54 -0
- package/lib/ui/data/index.ts +51 -0
- package/lib/ui/element-plus/index.js +92 -0
- package/lib/ui/element-plus/index.ts +89 -0
- package/lib/ui/index.js +9 -0
- package/lib/ui/index.ts +6 -0
- package/lib/utils/bem.js +31 -0
- package/lib/utils/bem.ts +36 -0
- package/lib/utils/mock.js +142 -0
- package/lib/utils/mock.ts +151 -0
- package/lib/utils/util.js +403 -0
- package/lib/utils/util.ts +392 -0
- package/lib/utils/validate.js +21 -0
- package/lib/utils/validate.ts +23 -0
- package/lib/version.js +4 -0
- package/lib/version.ts +1 -0
- package/package.json +20 -10
- package/types/index.d.ts +139 -47
- package/types/shims-aliases.d.ts +4 -0
- package/lib/avue.js.map +0 -1
- package/lib/locale/format.js +0 -44
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
(function (global) {
|
|
2
|
+
const locale = {
|
|
3
|
+
common: {
|
|
4
|
+
submitBtn: '确定',
|
|
5
|
+
cancelBtn: '取消',
|
|
6
|
+
closeBtn: '关闭',
|
|
7
|
+
condition: '条件',
|
|
8
|
+
display: '显示',
|
|
9
|
+
hide: '隐藏',
|
|
10
|
+
view: '查看',
|
|
11
|
+
select: '选择',
|
|
12
|
+
more: '更多',
|
|
13
|
+
tip: '提示'
|
|
14
|
+
},
|
|
15
|
+
tip: {
|
|
16
|
+
select: '请选择',
|
|
17
|
+
input: '请输入'
|
|
18
|
+
},
|
|
19
|
+
check: {
|
|
20
|
+
checkAll: '全选'
|
|
21
|
+
},
|
|
22
|
+
upload: {
|
|
23
|
+
upload: '点击上传',
|
|
24
|
+
tip: '将文件拖到此处,或'
|
|
25
|
+
},
|
|
26
|
+
time: {
|
|
27
|
+
start: '开始',
|
|
28
|
+
end: '结束'
|
|
29
|
+
},
|
|
30
|
+
date: {
|
|
31
|
+
start: '开始日期',
|
|
32
|
+
end: '结束日期',
|
|
33
|
+
t: '今日',
|
|
34
|
+
y: '昨日',
|
|
35
|
+
n: '最近7天',
|
|
36
|
+
a: '全部'
|
|
37
|
+
},
|
|
38
|
+
form: {
|
|
39
|
+
printBtn: '打印',
|
|
40
|
+
mockBtn: '模拟',
|
|
41
|
+
submitBtn: '提交',
|
|
42
|
+
emptyBtn: '清空'
|
|
43
|
+
},
|
|
44
|
+
countdown: {
|
|
45
|
+
day: '天',
|
|
46
|
+
hour: '时',
|
|
47
|
+
minute: '分',
|
|
48
|
+
second: '秒'
|
|
49
|
+
},
|
|
50
|
+
product: {
|
|
51
|
+
sold: '已售 {value}',
|
|
52
|
+
stock: '库存 {value}',
|
|
53
|
+
buyNow: '立即购买',
|
|
54
|
+
addToCart: '加入购物车'
|
|
55
|
+
},
|
|
56
|
+
chat: {
|
|
57
|
+
sendBtn: '发送',
|
|
58
|
+
quickReplyPlaceholder: '请输入快捷回复语',
|
|
59
|
+
addressRequired: '地址不能为空',
|
|
60
|
+
addressPlaceholder: '请输入地址',
|
|
61
|
+
inputPlaceholder: '请输入...',
|
|
62
|
+
uploadImageTitle: '图片上传',
|
|
63
|
+
uploadVideoTitle: '视频上传',
|
|
64
|
+
uploadFileTitle: '文件上传',
|
|
65
|
+
notificationDenied: '用户拒绝了通知权限。',
|
|
66
|
+
notificationRejected: '用户拒绝了通知权限申请。',
|
|
67
|
+
fileLabel: '文件',
|
|
68
|
+
mapLabel: '地图'
|
|
69
|
+
},
|
|
70
|
+
flow: {
|
|
71
|
+
deleteNodeConfirm: '确定要删除节点 {nodeId} 吗?',
|
|
72
|
+
deleteLineConfirm: '确定删除所点击的线吗?',
|
|
73
|
+
noSelfConnect: '不能连接自己',
|
|
74
|
+
noDuplicateConnect: '不能重复连线',
|
|
75
|
+
noLoopConnect: '不能回环哦'
|
|
76
|
+
},
|
|
77
|
+
login: {
|
|
78
|
+
usernameLabel: '用户名',
|
|
79
|
+
usernamePlaceholder: '请输入用户名',
|
|
80
|
+
passwordLabel: '密码',
|
|
81
|
+
passwordPlaceholder: '请输入密码',
|
|
82
|
+
codeLabel: '验证码',
|
|
83
|
+
codePlaceholder: '请输入验证码',
|
|
84
|
+
submitBtn: '登录',
|
|
85
|
+
sendCode: '发送验证码',
|
|
86
|
+
resendCode: '{time}s后重获取'
|
|
87
|
+
},
|
|
88
|
+
tree: {
|
|
89
|
+
filterPlaceholder: '输入关键字进行过滤'
|
|
90
|
+
},
|
|
91
|
+
map: {
|
|
92
|
+
searchPlaceholder: '输入关键字选取地点'
|
|
93
|
+
},
|
|
94
|
+
cron: {
|
|
95
|
+
placeholder: '点击配置Cron表达式',
|
|
96
|
+
title: 'Cron表达式配置',
|
|
97
|
+
expression: 'Cron表达式:',
|
|
98
|
+
nextTimes: '最近执行时间:',
|
|
99
|
+
units: {
|
|
100
|
+
second: '秒',
|
|
101
|
+
minute: '分',
|
|
102
|
+
hour: '时',
|
|
103
|
+
day: '日',
|
|
104
|
+
month: '月',
|
|
105
|
+
week: '周'
|
|
106
|
+
},
|
|
107
|
+
weekLabels: ['周一', '周二', '周三', '周四', '周五', '周六', '周日'],
|
|
108
|
+
every: '每{label}执行',
|
|
109
|
+
notSpecify: '不指定',
|
|
110
|
+
range: '周期',
|
|
111
|
+
from: '从',
|
|
112
|
+
to: '到',
|
|
113
|
+
step: '步长',
|
|
114
|
+
startingFrom: '从',
|
|
115
|
+
everyInterval: '开始,每',
|
|
116
|
+
specify: '指定',
|
|
117
|
+
invalidFormat: '表达式格式错误',
|
|
118
|
+
noNextTimes: '无法计算执行时间',
|
|
119
|
+
parseError: '表达式解析错误'
|
|
120
|
+
},
|
|
121
|
+
input: {
|
|
122
|
+
phoneCodePlaceholder: '区号',
|
|
123
|
+
phonePlaceholder: '请输入手机号',
|
|
124
|
+
currencyPlaceholder: '请输入金额',
|
|
125
|
+
bankCardPlaceholder: '请输入银行卡号',
|
|
126
|
+
idCardPlaceholder: '请输入身份证号',
|
|
127
|
+
emailPlaceholder: '请输入邮箱',
|
|
128
|
+
platePlaceholder: '请输入车牌号',
|
|
129
|
+
ipPlaceholder: '请输入IP地址',
|
|
130
|
+
macPlaceholder: '请输入MAC地址',
|
|
131
|
+
usccPlaceholder: '请输入统一社会信用代码',
|
|
132
|
+
countries: {
|
|
133
|
+
cn: '中国',
|
|
134
|
+
hk: '香港',
|
|
135
|
+
mo: '澳门',
|
|
136
|
+
tw: '台湾',
|
|
137
|
+
usca: '美国/加拿大',
|
|
138
|
+
uk: '英国',
|
|
139
|
+
jp: '日本',
|
|
140
|
+
kr: '韩国',
|
|
141
|
+
sg: '新加坡',
|
|
142
|
+
au: '澳大利亚',
|
|
143
|
+
de: '德国',
|
|
144
|
+
fr: '法国',
|
|
145
|
+
it: '意大利',
|
|
146
|
+
ru: '俄罗斯',
|
|
147
|
+
in: '印度',
|
|
148
|
+
br: '巴西',
|
|
149
|
+
es: '西班牙',
|
|
150
|
+
nl: '荷兰',
|
|
151
|
+
ch: '瑞士',
|
|
152
|
+
se: '瑞典',
|
|
153
|
+
my: '马来西亚',
|
|
154
|
+
th: '泰国',
|
|
155
|
+
vn: '越南',
|
|
156
|
+
id: '印尼',
|
|
157
|
+
ph: '菲律宾'
|
|
158
|
+
},
|
|
159
|
+
plateProvinces: ['京', '津', '沪', '渝', '冀', '豫', '云', '辽', '黑', '湘', '皖', '鲁', '新', '苏', '浙', '赣', '鄂', '桂', '甘', '晋', '蒙', '陕', '吉', '闽', '贵', '粤', '川', '青', '藏', '琼', '宁', '港', '澳', '台'],
|
|
160
|
+
bankCardTypes: {
|
|
161
|
+
unionpay: '银联卡'
|
|
162
|
+
},
|
|
163
|
+
genders: {
|
|
164
|
+
female: '女',
|
|
165
|
+
male: '男'
|
|
166
|
+
},
|
|
167
|
+
regions: {
|
|
168
|
+
'11': '北京',
|
|
169
|
+
'12': '天津',
|
|
170
|
+
'13': '河北',
|
|
171
|
+
'14': '山西',
|
|
172
|
+
'15': '内蒙古',
|
|
173
|
+
'21': '辽宁',
|
|
174
|
+
'22': '吉林',
|
|
175
|
+
'23': '黑龙江',
|
|
176
|
+
'31': '上海',
|
|
177
|
+
'32': '江苏',
|
|
178
|
+
'33': '浙江',
|
|
179
|
+
'34': '安徽',
|
|
180
|
+
'35': '福建',
|
|
181
|
+
'36': '江西',
|
|
182
|
+
'37': '山东',
|
|
183
|
+
'41': '河南',
|
|
184
|
+
'42': '湖北',
|
|
185
|
+
'43': '湖南',
|
|
186
|
+
'44': '广东',
|
|
187
|
+
'45': '广西',
|
|
188
|
+
'46': '海南',
|
|
189
|
+
'50': '重庆',
|
|
190
|
+
'51': '四川',
|
|
191
|
+
'52': '贵州',
|
|
192
|
+
'53': '云南',
|
|
193
|
+
'54': '西藏',
|
|
194
|
+
'61': '陕西',
|
|
195
|
+
'62': '甘肃',
|
|
196
|
+
'63': '青海',
|
|
197
|
+
'64': '宁夏',
|
|
198
|
+
'65': '新疆',
|
|
199
|
+
'71': '台湾',
|
|
200
|
+
'81': '香港',
|
|
201
|
+
'82': '澳门'
|
|
202
|
+
},
|
|
203
|
+
unknownRegion: '未知地区'
|
|
204
|
+
},
|
|
205
|
+
task: {
|
|
206
|
+
priorityAliases: {
|
|
207
|
+
high: ['high', '高'],
|
|
208
|
+
medium: ['medium', '中'],
|
|
209
|
+
low: ['low', '低']
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
weather: {
|
|
213
|
+
aliases: {
|
|
214
|
+
sunny: ['sunny', 'clear', '晴'],
|
|
215
|
+
cloudy: ['cloudy', 'partly cloudy', '多云'],
|
|
216
|
+
overcast: ['overcast', '阴'],
|
|
217
|
+
rain: ['rain', 'rainy', '雨'],
|
|
218
|
+
snow: ['snow', 'snowy', '雪']
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
crud: {
|
|
222
|
+
excel: {
|
|
223
|
+
name: '文件名',
|
|
224
|
+
type: '数据',
|
|
225
|
+
typeDic: {
|
|
226
|
+
true: '当前页数据(当前页的全部数据)',
|
|
227
|
+
false: '选中数据(当前页选中的数据)'
|
|
228
|
+
},
|
|
229
|
+
prop: '字段',
|
|
230
|
+
params: '参数',
|
|
231
|
+
paramsDic: {
|
|
232
|
+
header: '表头',
|
|
233
|
+
data: '数据源',
|
|
234
|
+
headers: '复杂表头',
|
|
235
|
+
sum: '合计统计'
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
filter: {
|
|
239
|
+
addBtn: '新增条件',
|
|
240
|
+
clearBtn: '清空数据',
|
|
241
|
+
resetBtn: '重置条件',
|
|
242
|
+
cancelBtn: '取消',
|
|
243
|
+
submitBtn: '确定'
|
|
244
|
+
},
|
|
245
|
+
column: {
|
|
246
|
+
name: '列名',
|
|
247
|
+
hide: '隐藏',
|
|
248
|
+
fixed: '冻结',
|
|
249
|
+
filters: '过滤',
|
|
250
|
+
sortable: '排序',
|
|
251
|
+
index: '顺序',
|
|
252
|
+
width: '宽度'
|
|
253
|
+
},
|
|
254
|
+
emptyText: '暂无数据',
|
|
255
|
+
tipStartTitle: '当前表格已选择',
|
|
256
|
+
tipEndTitle: '项',
|
|
257
|
+
editTitle: '编辑',
|
|
258
|
+
copyTitle: '复制',
|
|
259
|
+
addTitle: '新增',
|
|
260
|
+
viewTitle: '查看',
|
|
261
|
+
filterTitle: '过滤条件',
|
|
262
|
+
showTitle: '列显隐',
|
|
263
|
+
menu: '操作',
|
|
264
|
+
addBtn: '新增',
|
|
265
|
+
show: '显示',
|
|
266
|
+
hide: '隐藏',
|
|
267
|
+
open: '展开',
|
|
268
|
+
shrink: '收缩',
|
|
269
|
+
printBtn: '打印',
|
|
270
|
+
mockBtn: '模拟',
|
|
271
|
+
excelBtn: '导出',
|
|
272
|
+
updateBtn: '修改',
|
|
273
|
+
cancelBtn: '取消',
|
|
274
|
+
searchBtn: '搜索',
|
|
275
|
+
emptyBtn: '清空',
|
|
276
|
+
menuBtn: '功能',
|
|
277
|
+
saveBtn: '保存',
|
|
278
|
+
viewBtn: '查看',
|
|
279
|
+
editBtn: '编辑',
|
|
280
|
+
copyBtn: '复制',
|
|
281
|
+
delBtn: '删除'
|
|
282
|
+
}
|
|
283
|
+
};
|
|
284
|
+
global.AVUE_LANG = global.AVUE_LANG || {};
|
|
285
|
+
global.AVUE_LANG["zh"] = locale;
|
|
286
|
+
global["avueLocaleZh"] = locale;
|
|
287
|
+
global["zh"] = locale;
|
|
288
|
+
})(typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : this);
|
package/lib/locale/index.js
CHANGED
|
@@ -1,47 +1,153 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.getLocaleCode = exports.getLocale = exports.i18n = exports.use = exports.t = exports.register = void 0;
|
|
7
|
+
const en_js_1 = __importDefault(require("./lang/en.js"));
|
|
8
|
+
const zh_js_1 = __importDefault(require("./lang/zh.js"));
|
|
9
|
+
const zh_cn_js_1 = __importDefault(require("./lang/zh-cn.js"));
|
|
10
|
+
const merge_1 = __importDefault(require("lodash/merge"));
|
|
11
|
+
const DEFAULT_LOCALE = 'zh-cn';
|
|
12
|
+
const RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g;
|
|
13
|
+
const format = (string = '', ...args) => {
|
|
14
|
+
let formatArgs = args;
|
|
15
|
+
if (args.length === 1 && typeof args[0] === 'object') {
|
|
16
|
+
formatArgs = args[0];
|
|
17
|
+
}
|
|
18
|
+
if (!formatArgs || typeof formatArgs !== 'object') {
|
|
19
|
+
formatArgs = {};
|
|
20
|
+
}
|
|
21
|
+
return string.replace(RE_NARGS, (match, _prefix, key, index) => {
|
|
22
|
+
if (string[index - 1] === '{' && string[index + match.length] === '}') {
|
|
23
|
+
return key;
|
|
24
|
+
}
|
|
25
|
+
const result = Object.prototype.hasOwnProperty.call(formatArgs, key)
|
|
26
|
+
? formatArgs[key]
|
|
27
|
+
: null;
|
|
28
|
+
return result == null ? '' : String(result);
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
const isPlainObject = (value) => Object.prototype.toString.call(value) === '[object Object]';
|
|
32
|
+
const resolveByPath = (path, locale) => {
|
|
33
|
+
return path.split('.').reduce((current, key) => {
|
|
34
|
+
if (current == null)
|
|
35
|
+
return undefined;
|
|
36
|
+
return current[key];
|
|
37
|
+
}, locale);
|
|
38
|
+
};
|
|
39
|
+
const normalizeLocaleCode = (code) => code.trim().toLowerCase();
|
|
40
|
+
const getGlobalLocaleRegistry = () => {
|
|
41
|
+
const globalObject = typeof globalThis !== 'undefined'
|
|
42
|
+
? globalThis
|
|
43
|
+
: typeof window !== 'undefined'
|
|
44
|
+
? window
|
|
45
|
+
: undefined;
|
|
46
|
+
if (!globalObject)
|
|
47
|
+
return {};
|
|
48
|
+
if (!isPlainObject(globalObject.AVUE_LANG)) {
|
|
49
|
+
globalObject.AVUE_LANG = {};
|
|
50
|
+
}
|
|
51
|
+
return globalObject.AVUE_LANG;
|
|
52
|
+
};
|
|
53
|
+
const localeRegistry = {};
|
|
54
|
+
const rememberLocale = (code, locale) => {
|
|
55
|
+
localeRegistry[code] = locale;
|
|
56
|
+
const globalRegistry = getGlobalLocaleRegistry();
|
|
57
|
+
globalRegistry[code] = locale;
|
|
58
|
+
};
|
|
59
|
+
const resolveRegisteredLocale = (code) => {
|
|
60
|
+
if (typeof code !== 'string' || !code.trim())
|
|
61
|
+
return null;
|
|
62
|
+
const normalizedCode = normalizeLocaleCode(code);
|
|
63
|
+
const shortCode = normalizedCode.split('-')[0];
|
|
64
|
+
const candidates = shortCode !== normalizedCode ? [normalizedCode, shortCode] : [normalizedCode];
|
|
65
|
+
const globalRegistry = getGlobalLocaleRegistry();
|
|
66
|
+
for (const candidate of candidates) {
|
|
67
|
+
const registered = localeRegistry[candidate] ||
|
|
68
|
+
(isPlainObject(globalRegistry[candidate]) ? globalRegistry[candidate] : undefined);
|
|
69
|
+
if (registered) {
|
|
70
|
+
localeRegistry[candidate] = registered;
|
|
71
|
+
return {
|
|
72
|
+
code: candidate,
|
|
73
|
+
locale: registered
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return null;
|
|
78
|
+
};
|
|
79
|
+
const buildLocaleState = (code) => {
|
|
80
|
+
const merged = (0, merge_1.default)({}, zh_cn_js_1.default);
|
|
81
|
+
const resolved = resolveRegisteredLocale(code);
|
|
82
|
+
if (resolved) {
|
|
83
|
+
return {
|
|
84
|
+
code: resolved.code,
|
|
85
|
+
locale: (0, merge_1.default)({}, merged, resolved.locale)
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
code: DEFAULT_LOCALE,
|
|
90
|
+
locale: merged
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
const register = function (code, locale, aliases = []) {
|
|
94
|
+
if (!code || !isPlainObject(locale))
|
|
95
|
+
return locale;
|
|
96
|
+
[code, ...aliases]
|
|
97
|
+
.map((name) => normalizeLocaleCode(name))
|
|
98
|
+
.filter(Boolean)
|
|
99
|
+
.forEach((name) => rememberLocale(name, locale));
|
|
100
|
+
return locale;
|
|
101
|
+
};
|
|
102
|
+
exports.register = register;
|
|
103
|
+
(0, exports.register)('en', en_js_1.default);
|
|
104
|
+
(0, exports.register)('zh', zh_js_1.default);
|
|
105
|
+
(0, exports.register)(DEFAULT_LOCALE, zh_cn_js_1.default);
|
|
106
|
+
let currentCode = DEFAULT_LOCALE;
|
|
107
|
+
let currentLang = buildLocaleState(DEFAULT_LOCALE).locale;
|
|
108
|
+
let i18nHandler = null;
|
|
109
|
+
const t = function (path, options) {
|
|
110
|
+
if (typeof i18nHandler === 'function') {
|
|
111
|
+
const translated = i18nHandler.call(this, path, options, currentLang);
|
|
112
|
+
if (translated !== undefined && translated !== null && translated !== path) {
|
|
113
|
+
return typeof translated === 'string'
|
|
114
|
+
? format(translated, options)
|
|
115
|
+
: translated;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const value = resolveByPath(path, currentLang);
|
|
119
|
+
if (typeof value === 'string')
|
|
120
|
+
return format(value, options);
|
|
121
|
+
if (value === undefined || value === null)
|
|
122
|
+
return '';
|
|
123
|
+
return value;
|
|
124
|
+
};
|
|
125
|
+
exports.t = t;
|
|
126
|
+
const use = function (locale, override) {
|
|
127
|
+
const localeState = typeof locale === 'string' ? buildLocaleState(locale) : buildLocaleState(currentCode);
|
|
128
|
+
currentCode = localeState.code;
|
|
129
|
+
currentLang = localeState.locale;
|
|
130
|
+
const extraLocale = typeof locale === 'string' ? override : locale;
|
|
131
|
+
if (isPlainObject(extraLocale)) {
|
|
132
|
+
currentLang = (0, merge_1.default)({}, currentLang, extraLocale);
|
|
133
|
+
}
|
|
134
|
+
return currentLang;
|
|
135
|
+
};
|
|
136
|
+
exports.use = use;
|
|
137
|
+
const i18n = function (fn) {
|
|
138
|
+
i18nHandler = typeof fn === 'function' ? fn : null;
|
|
139
|
+
return i18nHandler;
|
|
140
|
+
};
|
|
141
|
+
exports.i18n = i18n;
|
|
142
|
+
const getLocale = function (code) {
|
|
143
|
+
if (typeof code === 'string') {
|
|
144
|
+
return buildLocaleState(code).locale;
|
|
145
|
+
}
|
|
146
|
+
return currentLang;
|
|
147
|
+
};
|
|
148
|
+
exports.getLocale = getLocale;
|
|
149
|
+
const getLocaleCode = function () {
|
|
150
|
+
return currentCode;
|
|
151
|
+
};
|
|
152
|
+
exports.getLocaleCode = getLocaleCode;
|
|
153
|
+
exports.default = { register: exports.register, use: exports.use, t: exports.t, i18n: exports.i18n, getLocale: exports.getLocale, getLocaleCode: exports.getLocaleCode };
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import enLang from './lang/en';
|
|
2
|
+
import zhLang from './lang/zh';
|
|
3
|
+
import defaultLang from './lang/zh-cn';
|
|
4
|
+
import _merge from 'lodash/merge';
|
|
5
|
+
|
|
6
|
+
type TemplateArgs = Record<string, any> | any[];
|
|
7
|
+
type LocalePrimitive = string | number | boolean;
|
|
8
|
+
interface LocaleMessages {
|
|
9
|
+
[key: string]: LocalePrimitive | LocaleMessages | Array<LocalePrimitive | LocaleMessages>;
|
|
10
|
+
}
|
|
11
|
+
type LocaleInput = string | LocaleMessages | null | undefined;
|
|
12
|
+
type LocaleRegistry = Record<string, LocaleMessages>;
|
|
13
|
+
type TranslateHandler = (
|
|
14
|
+
this: any,
|
|
15
|
+
path: string,
|
|
16
|
+
options?: any,
|
|
17
|
+
locale?: LocaleMessages
|
|
18
|
+
) => unknown;
|
|
19
|
+
|
|
20
|
+
const DEFAULT_LOCALE = 'zh-cn';
|
|
21
|
+
const RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g;
|
|
22
|
+
|
|
23
|
+
const format = (string = '', ...args: any[]): string => {
|
|
24
|
+
let formatArgs: TemplateArgs = args;
|
|
25
|
+
|
|
26
|
+
if (args.length === 1 && typeof args[0] === 'object') {
|
|
27
|
+
formatArgs = args[0];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (!formatArgs || typeof formatArgs !== 'object') {
|
|
31
|
+
formatArgs = {};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return string.replace(RE_NARGS, (match, _prefix, key, index) => {
|
|
35
|
+
if (string[index - 1] === '{' && string[index + match.length] === '}') {
|
|
36
|
+
return key;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const result = Object.prototype.hasOwnProperty.call(formatArgs, key)
|
|
40
|
+
? (formatArgs as Record<string, any>)[key]
|
|
41
|
+
: null;
|
|
42
|
+
|
|
43
|
+
return result == null ? '' : String(result);
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
const isPlainObject = (value: unknown): value is Record<string, any> =>
|
|
48
|
+
Object.prototype.toString.call(value) === '[object Object]';
|
|
49
|
+
|
|
50
|
+
const resolveByPath = (path: string, locale: LocaleMessages) => {
|
|
51
|
+
return path.split('.').reduce<any>((current, key) => {
|
|
52
|
+
if (current == null) return undefined;
|
|
53
|
+
return current[key];
|
|
54
|
+
}, locale);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
const normalizeLocaleCode = (code: string) => code.trim().toLowerCase();
|
|
58
|
+
|
|
59
|
+
const getGlobalLocaleRegistry = (): LocaleRegistry => {
|
|
60
|
+
const globalObject =
|
|
61
|
+
typeof globalThis !== 'undefined'
|
|
62
|
+
? (globalThis as Record<string, any>)
|
|
63
|
+
: typeof window !== 'undefined'
|
|
64
|
+
? (window as unknown as Record<string, any>)
|
|
65
|
+
: undefined;
|
|
66
|
+
|
|
67
|
+
if (!globalObject) return {};
|
|
68
|
+
if (!isPlainObject(globalObject.AVUE_LANG)) {
|
|
69
|
+
globalObject.AVUE_LANG = {};
|
|
70
|
+
}
|
|
71
|
+
return globalObject.AVUE_LANG as LocaleRegistry;
|
|
72
|
+
};
|
|
73
|
+
|
|
74
|
+
const localeRegistry: LocaleRegistry = {};
|
|
75
|
+
|
|
76
|
+
const rememberLocale = (code: string, locale: LocaleMessages) => {
|
|
77
|
+
localeRegistry[code] = locale;
|
|
78
|
+
const globalRegistry = getGlobalLocaleRegistry();
|
|
79
|
+
globalRegistry[code] = locale;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
const resolveRegisteredLocale = (
|
|
83
|
+
code?: string
|
|
84
|
+
): { code: string; locale: LocaleMessages } | null => {
|
|
85
|
+
if (typeof code !== 'string' || !code.trim()) return null;
|
|
86
|
+
|
|
87
|
+
const normalizedCode = normalizeLocaleCode(code);
|
|
88
|
+
const shortCode = normalizedCode.split('-')[0];
|
|
89
|
+
const candidates = shortCode !== normalizedCode ? [normalizedCode, shortCode] : [normalizedCode];
|
|
90
|
+
const globalRegistry = getGlobalLocaleRegistry();
|
|
91
|
+
|
|
92
|
+
for (const candidate of candidates) {
|
|
93
|
+
const registered =
|
|
94
|
+
localeRegistry[candidate] ||
|
|
95
|
+
(isPlainObject(globalRegistry[candidate]) ? globalRegistry[candidate] : undefined);
|
|
96
|
+
|
|
97
|
+
if (registered) {
|
|
98
|
+
localeRegistry[candidate] = registered;
|
|
99
|
+
return {
|
|
100
|
+
code: candidate,
|
|
101
|
+
locale: registered
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
return null;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
const buildLocaleState = (code?: string) => {
|
|
110
|
+
const merged = _merge({}, defaultLang);
|
|
111
|
+
const resolved = resolveRegisteredLocale(code);
|
|
112
|
+
|
|
113
|
+
if (resolved) {
|
|
114
|
+
return {
|
|
115
|
+
code: resolved.code,
|
|
116
|
+
locale: _merge({}, merged, resolved.locale)
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
code: DEFAULT_LOCALE,
|
|
122
|
+
locale: merged
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export const register = function (
|
|
127
|
+
code: string,
|
|
128
|
+
locale: LocaleMessages,
|
|
129
|
+
aliases: string[] = []
|
|
130
|
+
) {
|
|
131
|
+
if (!code || !isPlainObject(locale)) return locale;
|
|
132
|
+
|
|
133
|
+
[code, ...aliases]
|
|
134
|
+
.map((name) => normalizeLocaleCode(name))
|
|
135
|
+
.filter(Boolean)
|
|
136
|
+
.forEach((name) => rememberLocale(name, locale));
|
|
137
|
+
|
|
138
|
+
return locale;
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
register('en', enLang);
|
|
142
|
+
register('zh', zhLang);
|
|
143
|
+
register(DEFAULT_LOCALE, defaultLang);
|
|
144
|
+
|
|
145
|
+
let currentCode = DEFAULT_LOCALE;
|
|
146
|
+
let currentLang = buildLocaleState(DEFAULT_LOCALE).locale;
|
|
147
|
+
let i18nHandler: TranslateHandler | null = null;
|
|
148
|
+
|
|
149
|
+
export const t = function (this: any, path: string, options?: any) {
|
|
150
|
+
if (typeof i18nHandler === 'function') {
|
|
151
|
+
const translated = i18nHandler.call(this, path, options, currentLang);
|
|
152
|
+
if (translated !== undefined && translated !== null && translated !== path) {
|
|
153
|
+
return typeof translated === 'string'
|
|
154
|
+
? format(translated, options)
|
|
155
|
+
: translated;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
const value = resolveByPath(path, currentLang);
|
|
160
|
+
if (typeof value === 'string') return format(value, options);
|
|
161
|
+
if (value === undefined || value === null) return '';
|
|
162
|
+
return value;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export const use = function (locale?: LocaleInput, override?: LocaleMessages) {
|
|
166
|
+
const localeState =
|
|
167
|
+
typeof locale === 'string' ? buildLocaleState(locale) : buildLocaleState(currentCode);
|
|
168
|
+
|
|
169
|
+
currentCode = localeState.code;
|
|
170
|
+
currentLang = localeState.locale;
|
|
171
|
+
|
|
172
|
+
const extraLocale = typeof locale === 'string' ? override : locale;
|
|
173
|
+
if (isPlainObject(extraLocale)) {
|
|
174
|
+
currentLang = _merge({}, currentLang, extraLocale);
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
return currentLang;
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
export const i18n = function (fn?: TranslateHandler | null) {
|
|
181
|
+
i18nHandler = typeof fn === 'function' ? fn : null;
|
|
182
|
+
return i18nHandler;
|
|
183
|
+
};
|
|
184
|
+
|
|
185
|
+
export const getLocale = function (code?: string) {
|
|
186
|
+
if (typeof code === 'string') {
|
|
187
|
+
return buildLocaleState(code).locale;
|
|
188
|
+
}
|
|
189
|
+
return currentLang;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export const getLocaleCode = function () {
|
|
193
|
+
return currentCode;
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
export default { register, use, t, i18n, getLocale, getLocaleCode };
|