diff --git a/src/client/theme-default/components/NavBarLinks.ts b/src/client/theme-default/components/NavBarLinks.ts
index f1133d63..0c6d1152 100644
--- a/src/client/theme-default/components/NavBarLinks.ts
+++ b/src/client/theme-default/components/NavBarLinks.ts
@@ -1,5 +1,5 @@
import { computed } from 'vue'
-import { useSiteData, useSiteDataByRoute } from 'vitepress'
+import { useSiteData, useSiteDataByRoute, useRoute } from 'vitepress'
import NavBarLink from './NavBarLink.vue'
import NavDropdownLink from './NavDropdownLink.vue'
import { DefaultTheme } from '../config'
@@ -17,6 +17,7 @@ export default {
setup() {
const siteDataByRoute = useSiteDataByRoute()
const siteData = useSiteData()
+ const route = useRoute()
const repoInfo = computed(() => {
const theme = siteData.value.themeConfig as DefaultTheme.Config
const repo = theme.docsRepo || theme.repo
@@ -40,6 +41,32 @@ export default {
}
return null
})
+
+ const localeCandidates = computed(() => {
+ const localeKeys = Object.keys(siteData.value.locales)
+ const currentLangBase = localeKeys.find((v) => {
+ if (v === '/') {
+ return false
+ }
+ return route.path.startsWith(v)
+ })
+ const currentContentPath = currentLangBase
+ ? route.path.substring(currentLangBase.length - 1)
+ : route.path
+ const candidates = localeKeys.map((v) => {
+ return {
+ text:
+ siteData.value.locales[v].label || siteData.value.locales[v].lang,
+ link: `${v}${currentContentPath}`
+ }
+ })
+ return {
+ // TODO i18n text
+ text: 'Languages',
+ items: candidates
+ }
+ })
+
return {
navData:
process.env.NODE_ENV === 'production'
@@ -47,7 +74,8 @@ export default {
siteDataByRoute.value.themeConfig.nav
: // use computed in dev for hot reload
computed(() => siteDataByRoute.value.themeConfig.nav),
- repoInfo
+ repoInfo,
+ localeCandidates
}
}
}
diff --git a/src/client/theme-default/components/NavBarLinks.vue b/src/client/theme-default/components/NavBarLinks.vue
index ab02e2b4..95732c2e 100644
--- a/src/client/theme-default/components/NavBarLinks.vue
+++ b/src/client/theme-default/components/NavBarLinks.vue
@@ -7,6 +7,7 @@
+
diff --git a/types/shared.d.ts b/types/shared.d.ts
index 840e6aeb..850529b1 100644
--- a/types/shared.d.ts
+++ b/types/shared.d.ts
@@ -2,6 +2,7 @@
export interface LocaleConfig {
lang: string
+ label?: string
title?: string
description?: string
head?: HeadConfig[]