mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
feat(cli): support switch lang
This commit is contained in:
parent
e461a80dbe
commit
cf172f5cbc
@ -8,8 +8,9 @@ Vue.mixin({
|
|||||||
computed: {
|
computed: {
|
||||||
$t() {
|
$t() {
|
||||||
const { name } = this.$options;
|
const { name } = this.$options;
|
||||||
|
const { lang } = this.$route.meta || {};
|
||||||
const prefix = name ? camelize(name) + '.' : '';
|
const prefix = name ? camelize(name) + '.' : '';
|
||||||
const messages = this.$vantMessages[this.$vantLang];
|
const messages = this.$vantMessages[lang];
|
||||||
|
|
||||||
return (path, ...args) => {
|
return (path, ...args) => {
|
||||||
const message = get(messages, prefix + path) || get(messages, path);
|
const message = get(messages, prefix + path) || get(messages, path);
|
||||||
@ -20,6 +21,7 @@ Vue.mixin({
|
|||||||
|
|
||||||
beforeCreate() {
|
beforeCreate() {
|
||||||
const { i18n, name } = this.$options;
|
const { i18n, name } = this.$options;
|
||||||
|
|
||||||
if (i18n) {
|
if (i18n) {
|
||||||
const locales = {};
|
const locales = {};
|
||||||
const camelizedName = camelize(name);
|
const camelizedName = camelize(name);
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="app">
|
<div class="app">
|
||||||
<van-doc :lang="lang" :config="config" :simulator="simulator">
|
<van-doc
|
||||||
|
:lang="lang"
|
||||||
|
:config="config"
|
||||||
|
:simulator="simulator"
|
||||||
|
:lang-configs="langConfigs"
|
||||||
|
>
|
||||||
<router-view />
|
<router-view />
|
||||||
</van-doc>
|
</van-doc>
|
||||||
</div>
|
</div>
|
||||||
@ -9,6 +14,7 @@
|
|||||||
<script>
|
<script>
|
||||||
import VanDoc from './components';
|
import VanDoc from './components';
|
||||||
import { config } from 'site-desktop-shared';
|
import { config } from 'site-desktop-shared';
|
||||||
|
import { setLang } from '../common/locales';
|
||||||
|
|
||||||
function getPublicPath() {
|
function getPublicPath() {
|
||||||
const { site } = config.build || {};
|
const { site } = config.build || {};
|
||||||
@ -37,16 +43,29 @@ export default {
|
|||||||
return lang || '';
|
return lang || '';
|
||||||
},
|
},
|
||||||
|
|
||||||
|
langConfigs() {
|
||||||
|
const { locales = {} } = config.site;
|
||||||
|
return Object.keys(locales).map(key => ({
|
||||||
|
lang: key,
|
||||||
|
label: locales[key].langLabel || ''
|
||||||
|
}));
|
||||||
|
},
|
||||||
|
|
||||||
config() {
|
config() {
|
||||||
const { locales } = config.site;
|
const { locales } = config.site;
|
||||||
|
|
||||||
if (locales) {
|
if (locales) {
|
||||||
const { lang } = this.$route.meta;
|
return locales[this.lang];
|
||||||
return locales[lang];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return config.site;
|
return config.site;
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
lang(val) {
|
||||||
|
setLang(val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
@ -30,10 +30,10 @@
|
|||||||
</transition>
|
</transition>
|
||||||
</span>
|
</span>
|
||||||
</li>
|
</li>
|
||||||
<!--
|
|
||||||
<li v-if="config.nav.lang" class="van-doc-header__top-nav-item">
|
<li v-if="langLabel && langLink" class="van-doc-header__top-nav-item">
|
||||||
<a class="van-doc-header__cube" :href="langLink">{{ config.nav.lang.text }}</a>
|
<a class="van-doc-header__cube" :href="langLink">{{ langLabel }}</a>
|
||||||
</li> -->
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -53,7 +53,8 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
lang: String,
|
lang: String,
|
||||||
config: Object,
|
config: Object,
|
||||||
versions: Array
|
versions: Array,
|
||||||
|
langConfigs: Array
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@ -64,8 +65,20 @@ export default {
|
|||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
langLink() {
|
langLink() {
|
||||||
const { lang } = this.config.nav;
|
return `#${this.$route.path.replace(this.lang, this.anotherLang.lang)}`;
|
||||||
return `#${this.$route.path.replace(lang.from, lang.to)}`;
|
},
|
||||||
|
|
||||||
|
langLabel() {
|
||||||
|
return this.anotherLang.label;
|
||||||
|
},
|
||||||
|
|
||||||
|
anotherLang() {
|
||||||
|
const items = this.langConfigs.filter(item => item.lang !== this.lang);
|
||||||
|
if (items.length) {
|
||||||
|
return items[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
},
|
},
|
||||||
|
|
||||||
searchConfig() {
|
searchConfig() {
|
||||||
|
@ -9,7 +9,8 @@ export default {
|
|||||||
name: 'van-doc-simulator',
|
name: 'van-doc-simulator',
|
||||||
|
|
||||||
props: {
|
props: {
|
||||||
src: String
|
src: String,
|
||||||
|
lang: String
|
||||||
},
|
},
|
||||||
|
|
||||||
data() {
|
data() {
|
||||||
@ -32,6 +33,12 @@ export default {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
watch: {
|
||||||
|
lang(val) {
|
||||||
|
location.hash = `#${location.hash.replace(this.lang, val)}`;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
mounted() {
|
mounted() {
|
||||||
window.addEventListener('scroll', () => {
|
window.addEventListener('scroll', () => {
|
||||||
this.scrollTop = window.scrollY;
|
this.scrollTop = window.scrollY;
|
||||||
|
@ -4,21 +4,16 @@
|
|||||||
:lang="lang"
|
:lang="lang"
|
||||||
:config="config"
|
:config="config"
|
||||||
:versions="versions"
|
:versions="versions"
|
||||||
|
:lang-configs="langConfigs"
|
||||||
@switch-version="$emit('switch-version', $event)"
|
@switch-version="$emit('switch-version', $event)"
|
||||||
/>
|
/>
|
||||||
<doc-nav :base="base" :nav-config="config.nav" />
|
<doc-nav :base="base" :nav-config="config.nav" />
|
||||||
<doc-container :has-simulator="!!(simulator || simulators.length)">
|
<doc-container :has-simulator="!!simulator ">
|
||||||
<doc-content>
|
<doc-content>
|
||||||
<slot />
|
<slot />
|
||||||
</doc-content>
|
</doc-content>
|
||||||
</doc-container>
|
</doc-container>
|
||||||
<doc-simulator v-if="simulator" :src="simulator" />
|
<doc-simulator v-if="simulator" :src="simulator" :lang="lang" />
|
||||||
<doc-simulator
|
|
||||||
v-for="(url, index) in simulators"
|
|
||||||
v-show="index === currentSimulator"
|
|
||||||
:src="url"
|
|
||||||
:key="url"
|
|
||||||
/>
|
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@ -43,16 +38,13 @@ export default {
|
|||||||
props: {
|
props: {
|
||||||
lang: String,
|
lang: String,
|
||||||
versions: Array,
|
versions: Array,
|
||||||
currentSimulator: Number,
|
|
||||||
simulator: String,
|
simulator: String,
|
||||||
|
langConfigs: Array,
|
||||||
|
currentSimulator: Number,
|
||||||
config: {
|
config: {
|
||||||
type: Object,
|
type: Object,
|
||||||
required: true
|
required: true
|
||||||
},
|
},
|
||||||
simulators: {
|
|
||||||
type: Array,
|
|
||||||
default: () => []
|
|
||||||
},
|
|
||||||
base: {
|
base: {
|
||||||
type: String,
|
type: String,
|
||||||
default: ''
|
default: ''
|
||||||
|
@ -26,7 +26,7 @@ export default {
|
|||||||
|
|
||||||
computed: {
|
computed: {
|
||||||
lang() {
|
lang() {
|
||||||
const { lang } = this.$route.meta || {};
|
const { lang } = this.$route.meta;
|
||||||
return lang;
|
return lang;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@ module.exports = {
|
|||||||
title: 'Vant',
|
title: 'Vant',
|
||||||
description: '轻量、可靠的移动端 Vue 组件库',
|
description: '轻量、可靠的移动端 Vue 组件库',
|
||||||
logo: 'https://img.yzcdn.cn/vant/logo.png',
|
logo: 'https://img.yzcdn.cn/vant/logo.png',
|
||||||
|
langLabel: '中文',
|
||||||
links: [
|
links: [
|
||||||
{
|
{
|
||||||
logo: 'https://b.yzcdn.cn/vant/logo/weapp.svg',
|
logo: 'https://b.yzcdn.cn/vant/logo/weapp.svg',
|
||||||
@ -355,6 +356,7 @@ module.exports = {
|
|||||||
title: 'Vant',
|
title: 'Vant',
|
||||||
description: 'Mobile UI Components built on Vue',
|
description: 'Mobile UI Components built on Vue',
|
||||||
logo: 'https://img.yzcdn.cn/vant/logo.png',
|
logo: 'https://img.yzcdn.cn/vant/logo.png',
|
||||||
|
langLabel: 'En',
|
||||||
links: [
|
links: [
|
||||||
{
|
{
|
||||||
logo: 'https://b.yzcdn.cn/vant/logo/weapp.svg',
|
logo: 'https://b.yzcdn.cn/vant/logo/weapp.svg',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user