feat: set language selector on navbar

pull/91/head
小倉優悟 5 years ago
parent c71c69b7b3
commit c7682ea148

@ -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
}
}
}

@ -7,6 +7,7 @@
</template>
</template>
<NavBarLink v-if="repoInfo" :item="repoInfo" />
<NavDropdownLink v-if="localeCandidates" :item="localeCandidates" />
</nav>
</template>

1
types/shared.d.ts vendored

@ -2,6 +2,7 @@
export interface LocaleConfig {
lang: string
label?: string
title?: string
description?: string
head?: HeadConfig[]

Loading…
Cancel
Save