Skip to content

Commit e0f74f0

Browse files
kagolgitee-org
authored andcommitted
!238 完成组件官网国际化
Merge pull request !238 from 小九九的爸爸/dev
2 parents bbca389 + 3af2119 commit e0f74f0

File tree

10 files changed

+148
-8
lines changed

10 files changed

+148
-8
lines changed

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@ yarn-error.log
1212
.idea
1313
devui/vue-devui.ts
1414
devui/theme/theme.scss
15-
docs/.vitepress/config/sidebar.ts
15+
docs/.vitepress/config/sidebar.ts

docs/.vitepress/config/enNav.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
const enNav = [
2+
{ text: 'Design disciplines', link: '/en-US/design' },
3+
{ text: 'Component', link: '/en-US/' },
4+
{ text: 'Version history', link: '/en-US/version' },
5+
{ text: 'Theme', link: '/en-US/theme' },
6+
]
7+
8+
export default enNav
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
const enSidebar = {
2+
'/en-US/': [
3+
{ text: 'Quick Start', link: '/en-US/' },
4+
{
5+
text: 'General',
6+
children: [
7+
{ text: 'Button', link: '/en-US/components/button/', status: 'completed' },
8+
{ text: 'Icon', link: '/en-US/components/icon/', status: 'completed' },
9+
{ text: 'DragDrop', link: '/en-US/components/dragdrop/' },
10+
{ text: 'Fullscreen', link: '/en-US/components/fullscreen/' },
11+
{ text: 'Panel', link: '/en-US/components/panel/', status: 'completed' },
12+
{ text: 'Search', link: '/en-US/components/search/', status: 'completed' },
13+
{ text: 'Status', link: '/en-US/components/status/', status: 'completed' },
14+
{ text: 'Sticky', link: '/en-US/components/sticky/' },
15+
{ text: 'Overlay', link: '/en-US/components/overlay/'}
16+
]
17+
},
18+
{
19+
text: 'Navigation',
20+
children: [
21+
{ text: 'Accordion', link: '/en-US/components/accordion/' },
22+
{ text: 'Anchor', link: '/en-US/components/anchor/' },
23+
{ text: 'BackTop', link: '/en-US/components/back-top/' },
24+
{ text: 'Breadcrumb', link: '/en-US/components/breadcrumb/' },
25+
{ text: 'Dropdown', link: '/en-US/components/dropdown/' },
26+
{ text: 'NavSprite', link: '/en-US/components/nav-sprite/' },
27+
{ text: 'Pagination', link: '/en-US/components/pagination/', status: 'progress' },
28+
{ text: 'StepsGuide', link: '/en-US/components/steps-guide/' },
29+
{ text: 'Tabs', link: '/en-US/components/tabs/', status: 'completed' },
30+
{ text: 'Anchor', link: '/en-US/components/Anchor/' },
31+
]
32+
},
33+
{
34+
text: 'Feedback',
35+
children: [
36+
{ text: 'Alert', link: '/components/alert/', status: 'completed' },
37+
{ text: 'Drawer', link: '/components/drawer/' },
38+
{ text: 'Loading', link: '/components/loading/', status: 'completed' },
39+
{ text: 'Mention', link: '/components/mention/' },
40+
{ text: 'Modal', link: '/components/modal/' },
41+
{ text: 'Popover', link: '/components/popover/', status: "progress" },
42+
{ text: 'ReadTip', link: '/components/read-tip/' },
43+
{ text: 'Toast', link: '/components/toast/', status: 'completed' },
44+
{ text: 'Tooltip', link: '/components/tooltip/', status: 'completed' },
45+
]
46+
},
47+
{
48+
text: 'Data Entry',
49+
children: [
50+
{ text: 'AutoComplete', link: '/en-US/components/auto-complete/' },
51+
{ text: 'Cascader', link: '/en-US/components/cascader/' },
52+
{ text: 'CategorySearch', link: '/en-US/components/category-search/' },
53+
{ text: 'Checkbox', link: '/en-US/components/checkbox/', status: 'completed' },
54+
{ text: 'DatePicker', link: '/en-US/components/date-picker/', status: 'progress' },
55+
{ text: 'DatePickerPro', link: '/en-US/components/date-picker-pro/' },
56+
{ text: 'EditableSelect', link: '/en-US/components/editable-select/' },
57+
{ text: 'Form', link: '/en-US/components/form/' },
58+
{ text: 'Input', link: '/en-US/components/input/', status: 'completed' },
59+
{ text: 'InputNumber', link: '/en-US/components/input-number/' },
60+
{ text: 'MultiAutoComplete', link: '/en-US/components/multi-auto-complete/' },
61+
{ text: 'Radio', link: '/en-US/components/radio/', status: 'completed' },
62+
{ text: 'Select', link: '/en-US/components/select/', status: 'progress' },
63+
{ text: 'Slider', link: '/en-US/components/slider/' },
64+
{ text: 'Switch', link: '/en-US/components/switch/', status: 'completed' },
65+
{ text: 'TagInput', link: '/en-US/components/tag-input/', status: 'completed' },
66+
{ text: 'Textarea', link: '/en-US/components/textarea/' },
67+
{ text: 'TimePicker', link: '/en-US/components/time-picker/' },
68+
{ text: 'Transfer', link: '/en-US/components/transfer/' },
69+
{ text: 'TreeSelect', link: '/en-US/components/tree-select/' },
70+
{ text: 'Upload', link: '/en-US/components/upload/', status: 'progress' },
71+
]
72+
},
73+
{
74+
text: 'Data Display',
75+
children: [
76+
{ text: 'Avatar', link: '/en-US/components/avatar/', status: 'completed' },
77+
{ text: 'Badge', link: '/en-US/components/badge/', status: 'completed' },
78+
{ text: 'Card', link: '/en-US/components/card/', status: 'completed' },
79+
{ text: 'Carousel', link: '/en-US/components/carousel/', status: 'completed' },
80+
{ text: 'DataTable', link: '/en-US/components/data-table/' },
81+
{ text: 'Gantt', link: '/en-US/components/gantt/' },
82+
{ text: 'ImagePreview', link: '/en-US/components/image-preview/' },
83+
{ text: 'Progress', link: '/en-US/components/progress/', status: 'completed' },
84+
{ text: 'QuadrantDiagram', link: '/en-US/components/quadrant-diagram/' },
85+
{ text: 'Rate', link: '/en-US/components/rate/', status: 'completed' },
86+
{ text: 'Tag', link: '/en-US/components/tag/' },
87+
{ text: 'Tree', link: '/en-US/components/tree/' },
88+
]
89+
},
90+
{
91+
text: 'Layout',
92+
children: [
93+
{ text: 'Layout', link: '/en-US/components/layout/' },
94+
{ text: 'Splitter', link: '/en-US/components/splitter/' }
95+
]
96+
},
97+
]
98+
}
99+
100+
export default enSidebar
101+

docs/.vitepress/config/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ const config = {
1616
},
1717
};
1818

19-
export default config;
19+
export default config;

docs/.vitepress/devui-theme/Layout.vue

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,14 @@ const pageClasses = computed(() => {
8080
}
8181
]
8282
})
83+
84+
// layout组件加载,初始化国际化语言.
85+
if (location.pathname.indexOf('-') >= 0){
86+
const result = location.pathname.match(/[a-zA-Z]*-[A-Z]*/)
87+
localStorage.setItem('preferred_lang', result[0])
88+
}else {
89+
localStorage.setItem('preferred_lang', navigator.language);
90+
}
8391
</script>
8492

8593
<template>

docs/.vitepress/devui-theme/components/NavBar.vue

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@ const theme = new Theme("light");
1111
const darkMode = ref(false);
1212
const switchText = ref("浅色");
1313
14+
const defaultLanguage = ref(localStorage.getItem('preferred_lang'))
15+
function useTranslation (target){
16+
defaultLanguage.value = target
17+
localStorage.setItem('preferred_lang', target)
18+
if (target === 'en-US'){
19+
location.pathname = `/en-US${location.pathname}`
20+
}else if (target === 'zh-CN'){
21+
location.pathname = `${location.pathname.split('/en-US')[1]}`
22+
}
23+
}
24+
1425
watch(
1526
() => darkMode.value,
1627
(darkMode, prevDarkMode) => {
@@ -19,6 +30,7 @@ watch(
1930
}
2031
)
2132
33+
2234
defineEmits(['toggle'])
2335
</script>
2436

@@ -30,7 +42,7 @@ defineEmits(['toggle'])
3042

3143
<div class="flex-grow" />
3244

33-
<div class="flex">
45+
<div class="flex items-center">
3446
<div class="nav">
3547
<NavLinks />
3648
</div>
@@ -39,6 +51,9 @@ defineEmits(['toggle'])
3951
<d-switch v-model:checked="darkMode" size="sm"></d-switch>
4052
<span style="font-size:0.9rem;" class="mb-xxs">{{ switchText }}</span>
4153
</div>
54+
<div style="margin-left: 10px" @click="() => useTranslation( defaultLanguage === 'zh-CN' ? 'en-US' : 'zh-CN' )">
55+
{{defaultLanguage === 'zh-CN' ? '中文' : 'English'}}
56+
</div>
4257
</div>
4358

4459
<slot name="search" />
@@ -61,6 +76,9 @@ defineEmits(['toggle'])
6176
padding: 0.7rem 1.5rem 0.7rem 4rem;
6277
height: var(--header-height);
6378
background-color: $devui-base-bg;
79+
&:hover {
80+
cursor: pointer;
81+
}
6482
}
6583
6684
@media (min-width: 720px) {

docs/.vitepress/devui-theme/components/NavLinks.vue

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,20 @@ import { useLocaleLinks } from '../composables/nav'
55
import { useRepo } from '../composables/repo'
66
import NavLink from './NavLink.vue'
77
import NavDropdownLink from './NavDropdownLink.vue'
8+
import enNav from '../../config/enNav'
89
910
const { theme } = useData()
1011
const localeLinks = useLocaleLinks()
1112
const repo = useRepo()
1213
const show = computed(() => theme.value.nav || repo.value || localeLinks.value)
14+
let translationTheme = computed( () => localStorage.getItem('preferred_lang') === 'zh-CN' ? theme.value.nav : enNav )
1315
</script>
1416

1517
<template>
1618
<nav v-if="show" class="nav-links">
17-
<template v-if="theme.nav">
18-
<div v-for="item in theme.nav" :key="item.text" class="item">
19+
<template v-if="translationTheme">
20+
<!-- <div v-for="item in theme.nav" :key="item.text" class="item"> -->
21+
<div v-for="item in translationTheme" :key="item.text" class="item">
1922
<NavDropdownLink v-if="item.items" :item="item" />
2023
<NavLink v-else :item="item" />
2124
</div>

docs/.vitepress/devui-theme/components/SideBarLinks.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@ const items = useSideBar()
99
<ul v-if="items.length > 0" class="sidebar-links">
1010
<SideBarLink v-for="item of items" :item="item" />
1111
</ul>
12-
</template>
12+
</template>

docs/.vitepress/devui-theme/composables/sideBar.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import { computed } from 'vue';
22
import { useRoute, useData } from 'vitepress';
33
import { useActiveSidebarLinks } from '../composables/activeSidebarLink';
44
import { getSideBarConfig } from '../support/sideBar';
5+
import enSidebar from '../../config/enSidebar'
6+
import sidebar from '../../config/sidebar'
57
export function useSideBar() {
68
const route = useRoute();
79
const { site } = useData();
@@ -20,7 +22,7 @@ export function useSideBar() {
2022
return resolveAutoSidebar(headers, sidebarDepth);
2123
}
2224
// now, there's no sidebar setting at frontmatter; let's see the configs
23-
const themeSidebar = getSideBarConfig(site.value.themeConfig.sidebar, route.data.relativePath);
25+
const themeSidebar = getSideBarConfig(localStorage.getItem('preferred_lang') === 'zh-CN' ? sidebar : enSidebar , route.data.relativePath);
2426
if (themeSidebar === false) {
2527
return [];
2628
}

docs/vite.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,4 @@ export default defineConfig({
1313
vueJsx({}),
1414
svgLoader(),
1515
],
16-
})
16+
})

0 commit comments

Comments
 (0)