diff --git a/docs/.vitepress/config/enNav.ts b/docs/.vitepress/config/enNav.ts new file mode 100644 index 0000000000000000000000000000000000000000..4522ec9bd14315692f7e5bdfc21b4c25c737a0f7 --- /dev/null +++ b/docs/.vitepress/config/enNav.ts @@ -0,0 +1,8 @@ +const enNav = [ + { text: 'Design disciplines', link: '/en-US/design' }, + { text: 'Component', link: '/en-US/' }, + { text: 'Version history', link: '/en-US/version' }, + { text: 'Theme', link: '/en-US/theme' }, + ] + + export default enNav \ No newline at end of file diff --git a/docs/.vitepress/config/enSidebar.ts b/docs/.vitepress/config/enSidebar.ts new file mode 100644 index 0000000000000000000000000000000000000000..00c336177b60d0d33adc44eed92baeb417cf3224 --- /dev/null +++ b/docs/.vitepress/config/enSidebar.ts @@ -0,0 +1,101 @@ +const enSidebar = { + '/en-US/': [ + { text: 'Quick Start', link: '/en-US/' }, + { + text: 'General', + children: [ + { text: 'Button', link: '/en-US/components/button/', status: 'completed' }, + { text: 'Icon', link: '/en-US/components/icon/', status: 'completed' }, + { text: 'DragDrop', link: '/en-US/components/dragdrop/' }, + { text: 'Fullscreen', link: '/en-US/components/fullscreen/' }, + { text: 'Panel', link: '/en-US/components/panel/', status: 'completed' }, + { text: 'Search', link: '/en-US/components/search/', status: 'completed' }, + { text: 'Status', link: '/en-US/components/status/', status: 'completed' }, + { text: 'Sticky', link: '/en-US/components/sticky/' }, + { text: 'Overlay', link: '/en-US/components/overlay/'} + ] + }, + { + text: 'Navigation', + children: [ + { text: 'Accordion', link: '/en-US/components/accordion/' }, + { text: 'Anchor', link: '/en-US/components/anchor/' }, + { text: 'BackTop', link: '/en-US/components/back-top/' }, + { text: 'Breadcrumb', link: '/en-US/components/breadcrumb/' }, + { text: 'Dropdown', link: '/en-US/components/dropdown/' }, + { text: 'NavSprite', link: '/en-US/components/nav-sprite/' }, + { text: 'Pagination', link: '/en-US/components/pagination/', status: 'progress' }, + { text: 'StepsGuide', link: '/en-US/components/steps-guide/' }, + { text: 'Tabs', link: '/en-US/components/tabs/', status: 'completed' }, + { text: 'Anchor', link: '/en-US/components/Anchor/' }, + ] + }, + { + text: 'Feedback', + children: [ + { text: 'Alert', link: '/components/alert/', status: 'completed' }, + { text: 'Drawer', link: '/components/drawer/' }, + { text: 'Loading', link: '/components/loading/', status: 'completed' }, + { text: 'Mention', link: '/components/mention/' }, + { text: 'Modal', link: '/components/modal/' }, + { text: 'Popover', link: '/components/popover/', status: "progress" }, + { text: 'ReadTip', link: '/components/read-tip/' }, + { text: 'Toast', link: '/components/toast/', status: 'completed' }, + { text: 'Tooltip', link: '/components/tooltip/', status: 'completed' }, + ] + }, + { + text: 'Data Entry', + children: [ + { text: 'AutoComplete', link: '/en-US/components/auto-complete/' }, + { text: 'Cascader', link: '/en-US/components/cascader/' }, + { text: 'CategorySearch', link: '/en-US/components/category-search/' }, + { text: 'Checkbox', link: '/en-US/components/checkbox/', status: 'completed' }, + { text: 'DatePicker', link: '/en-US/components/date-picker/', status: 'progress' }, + { text: 'DatePickerPro', link: '/en-US/components/date-picker-pro/' }, + { text: 'EditableSelect', link: '/en-US/components/editable-select/' }, + { text: 'Form', link: '/en-US/components/form/' }, + { text: 'Input', link: '/en-US/components/input/', status: 'completed' }, + { text: 'InputNumber', link: '/en-US/components/input-number/' }, + { text: 'MultiAutoComplete', link: '/en-US/components/multi-auto-complete/' }, + { text: 'Radio', link: '/en-US/components/radio/', status: 'completed' }, + { text: 'Select', link: '/en-US/components/select/', status: 'progress' }, + { text: 'Slider', link: '/en-US/components/slider/' }, + { text: 'Switch', link: '/en-US/components/switch/', status: 'completed' }, + { text: 'TagInput', link: '/en-US/components/tag-input/', status: 'completed' }, + { text: 'Textarea', link: '/en-US/components/textarea/' }, + { text: 'TimePicker', link: '/en-US/components/time-picker/' }, + { text: 'Transfer', link: '/en-US/components/transfer/' }, + { text: 'TreeSelect', link: '/en-US/components/tree-select/' }, + { text: 'Upload', link: '/en-US/components/upload/', status: 'progress' }, + ] + }, + { + text: 'Data Display', + children: [ + { text: 'Avatar', link: '/en-US/components/avatar/', status: 'completed' }, + { text: 'Badge', link: '/en-US/components/badge/', status: 'completed' }, + { text: 'Card', link: '/en-US/components/card/', status: 'completed' }, + { text: 'Carousel', link: '/en-US/components/carousel/', status: 'completed' }, + { text: 'DataTable', link: '/en-US/components/data-table/' }, + { text: 'Gantt', link: '/en-US/components/gantt/' }, + { text: 'ImagePreview', link: '/en-US/components/image-preview/' }, + { text: 'Progress', link: '/en-US/components/progress/', status: 'completed' }, + { text: 'QuadrantDiagram', link: '/en-US/components/quadrant-diagram/' }, + { text: 'Rate', link: '/en-US/components/rate/', status: 'completed' }, + { text: 'Tag', link: '/en-US/components/tag/' }, + { text: 'Tree', link: '/en-US/components/tree/' }, + ] + }, + { + text: 'Layout', + children: [ + { text: 'Layout', link: '/en-US/components/layout/' }, + { text: 'Splitter', link: '/en-US/components/splitter/' } + ] + }, + ] +} + +export default enSidebar + \ No newline at end of file diff --git a/docs/.vitepress/config/getSidebar.js b/docs/.vitepress/config/getSidebar.js new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/docs/.vitepress/config/i18nSideBar.js b/docs/.vitepress/config/i18nSideBar.js new file mode 100644 index 0000000000000000000000000000000000000000..7f624af4c6d027a7d099b16c2977a78a309d4af2 --- /dev/null +++ b/docs/.vitepress/config/i18nSideBar.js @@ -0,0 +1,49 @@ +const componentI18n = require('../crowdin/en-US/pages/component.json') + +function ensureLang (lang){ + return `/${lang}` +} + +/** + * @description 映射前缀(在每个组件路径前拼接 lang) + * @param {*} item + * @param {*} lang + * @param {*} prefix + * @returns + */ +function mapPrefix (item, lang='en-US', prefix = ''){ + if (item.children && item.children.length > 0){ + return { + ...item, + children: item.children.map((child)=>{ + return mapPrefix(child, lang, prefix) + }) + } + } + return { + ...item, + link: `${ensureLang(lang)}${prefix}${item.link}` + } +} + +function getComponentsSideBar (){ + const componentSideBar = {} + for (let key in componentI18n) { + if (componentI18n[key].children && componentI18n[key].children.length > 0){ + componentSideBar[key] = { + ...componentI18n[key], + children: componentI18n[key].children.map((item)=>{ + return mapPrefix(item) + }) + } + }else { + componentSideBar[key] = { + ...componentI18n[key], + link: '/en-US' + } + } + } + return componentSideBar +} + +getComponentsSideBar() \ No newline at end of file diff --git a/docs/.vitepress/config/index.ts b/docs/.vitepress/config/index.ts index c2e77e3a902998171a6d79aa2b3935f940a12c14..ed0f4719e39ac990a744926b3e952416f70c7bbc 100644 --- a/docs/.vitepress/config/index.ts +++ b/docs/.vitepress/config/index.ts @@ -1,8 +1,12 @@ import sidebar from './sidebar' +import enSidebar from './enSidebar' import head from './head' import nav from './nav' import markdown from './markdown' import lang from './lang' +import { language } from './language' + + const config = { title: "Vue DevUI", description: "Vue DevUI 组件库", @@ -12,8 +16,9 @@ const config = { sidebar, nav, demoblock: lang, - logo: '../../assets/logo.svg' - }, + logo: '../../assets/logo.svg', + lang: language, + } }; export default config; diff --git a/docs/.vitepress/config/language.js b/docs/.vitepress/config/language.js new file mode 100644 index 0000000000000000000000000000000000000000..91cc8afa1b13c473ccc80765807e2f2557d47393 --- /dev/null +++ b/docs/.vitepress/config/language.js @@ -0,0 +1,4 @@ +const fs = require('fs') +const path = require('path') + +export const language = fs.readdirSync(path.resolve(__dirname, '../crowdin')) \ No newline at end of file diff --git a/docs/.vitepress/devui-theme/Layout.vue b/docs/.vitepress/devui-theme/Layout.vue index 62bffadfba7183176dd6ab44ee3c009c38b47f89..8574f870f7628d6c889b419a0902895873a0eb88 100644 --- a/docs/.vitepress/devui-theme/Layout.vue +++ b/docs/.vitepress/devui-theme/Layout.vue @@ -80,6 +80,13 @@ const pageClasses = computed(() => { } ] }) + +if (location.pathname.indexOf('-') >= 0){ // 说明此时是一个国际化的路径 + const result = location.pathname.match(/[a-zA-Z]*-[A-Z]*/) + localStorage.setItem('preferred_lang', result[0]) +}else { + localStorage.setItem('preferred_lang', navigator.language); +}