mirror of
https://gitee.com/ElemeFE/element.git
synced 2024-12-02 12:18:46 +08:00
958efaefc3
* Docs: add french translation (fr-FR) in "components.json". * Docs: add french translation (fr-FR) in "page.json" * Docs: add french translation (fr-FR) in "route.json" * Docs: add french translation (fr-FR) in "title.json" * Docs: remove a comma in "title.json" * Docs: translate alert.md into french (fr-FR) * Docs: remove a comma in "component.json" * Docs: translate badge.md into french (fr-FR) * * a77b5518 Docs: translate breadcrumb.md into french (fr-FR) * * a77b5518 Docs: translate breadcrumb.md into french (fr-FR) * Docs: translate button.md into french (fr-FR) * Docs: translate card.md into french (fr-FR) * Docs: translate carousel.md into french (fr-FR) * Docs: translate cascader.md into french (fr-FR) * Docs: translate checkbox.md into french (fr-FR) * Docs: translate collapse.md into french (fr-FR) * Docs: translate color-picker.md into french (fr-FR) * Docs: translate color.md into french (fr-FR) * Docs: translate container.md into french (fr-FR) * Docs: translate custom-theme.md into french (fr-FR) * Docs: translate date-picker.md into french (fr-FR) * Docs: translate datetime-picker.md into french (fr-FR) * Docs: translate dialog.md into french (fr-FR) * Docs: translate form.md into french (fr-FR) * Docs: translate i18n.md into french (fr-FR) * Docs: translate icon.md into french (fr-FR) * Docs: translate input-number.md into french (fr-FR) * Docs: translate input.md into french (fr-FR) * Docs: translate installation.md into french (fr-FR) * Docs: translate dropdown.md into french (fr-FR) * Docs: translate layout.md into french (fr-FR) * Docs: translate loading.md into french (fr-FR) * Docs: translate menu.md into french (fr-FR) * Docs: translate message-box.md into french (fr-FR) * Docs: translate message.md into french (fr-FR) * Docs: translate notification.md into french (fr-FR) * Docs: translate pagination.md into french (fr-FR) * Docs: translate popover.md into french (fr-FR) * Docs: translate progress.md into french (fr-FR) * Docs: translate quickstart.md into french (fr-FR) * Docs: translate radio.md into french (fr-FR) * Docs: translate rate.md into french (fr-FR) * Docs: translate select.md into french (fr-FR) * Docs: translate slider.md into french (fr-FR) * Docs: translate steps.md into french (fr-FR) * Docs: translate switch.md into french (fr-FR) * Docs: translate table.md into french (fr-FR) * Docs: translate tabs.md into french (fr-FR) * Docs: translate tag.md into french (fr-FR) * Docs: translate time-picker.md into french (fr-FR) * Docs: translate tooltip.md into french (fr-FR) * Docs: translate transfer.md into french (fr-FR) * Docs: translate transition.md into french (fr-FR) * Docs: translate tree.md into french (fr-FR) * Docs: translate typography.md into french (fr-FR) * Docs: translate upload.md into french (fr-FR) * Docs: update the configuration for the french translation * Docs: update the french documentation from 2.4.4 to 2.4.11 * Changelog: translate to line 408 into french (fr-FR) * Changelog: finish the translation into french (fr-FR) * Changelog: update from 2.4.11 to 2.5.4 * Doc: update french translation from 2.4.11 to 2.5.4 * Changelog: fix a display bug with the subtitles * Examples: add french language (fr-FR) in search.vue component * Doc: change some french titles * Doc: add the french locale to app.vue
172 lines
3.9 KiB
JavaScript
172 lines
3.9 KiB
JavaScript
import navConfig from './nav.config';
|
|
import langs from './i18n/route';
|
|
|
|
const LOAD_MAP = {
|
|
'zh-CN': name => {
|
|
return r => require.ensure([], () =>
|
|
r(require(`./pages/zh-CN/${name}.vue`)),
|
|
'zh-CN');
|
|
},
|
|
'en-US': name => {
|
|
return r => require.ensure([], () =>
|
|
r(require(`./pages/en-US/${name}.vue`)),
|
|
'en-US');
|
|
},
|
|
'es': name => {
|
|
return r => require.ensure([], () =>
|
|
r(require(`./pages/es/${name}.vue`)),
|
|
'es');
|
|
},
|
|
'fr-FR': name => {
|
|
return r => require.ensure([], () =>
|
|
r(require(`./pages/fr-FR/${name}.vue`)),
|
|
'fr-FR');
|
|
}
|
|
};
|
|
|
|
const load = function(lang, path) {
|
|
return LOAD_MAP[lang](path);
|
|
};
|
|
|
|
const LOAD_DOCS_MAP = {
|
|
'zh-CN': path => {
|
|
return r => require.ensure([], () =>
|
|
r(require(`./docs/zh-CN${path}.md`)),
|
|
'zh-CN');
|
|
},
|
|
'en-US': path => {
|
|
return r => require.ensure([], () =>
|
|
r(require(`./docs/en-US${path}.md`)),
|
|
'en-US');
|
|
},
|
|
'es': path => {
|
|
return r => require.ensure([], () =>
|
|
r(require(`./docs/es${path}.md`)),
|
|
'es');
|
|
},
|
|
'fr-FR': path => {
|
|
return r => require.ensure([], () =>
|
|
r(require(`./docs/fr-FR${path}.md`)),
|
|
'fr-FR');
|
|
}
|
|
};
|
|
|
|
const loadDocs = function(lang, path) {
|
|
return LOAD_DOCS_MAP[lang](path);
|
|
};
|
|
|
|
const registerRoute = (navConfig) => {
|
|
let route = [];
|
|
Object.keys(navConfig).forEach((lang, index) => {
|
|
let navs = navConfig[lang];
|
|
route.push({
|
|
path: `/${ lang }/component`,
|
|
redirect: `/${ lang }/component/installation`,
|
|
component: load(lang, 'component'),
|
|
children: []
|
|
});
|
|
navs.forEach(nav => {
|
|
if (nav.href) return;
|
|
if (nav.groups) {
|
|
nav.groups.forEach(group => {
|
|
group.list.forEach(nav => {
|
|
addRoute(nav, lang, index);
|
|
});
|
|
});
|
|
} else if (nav.children) {
|
|
nav.children.forEach(nav => {
|
|
addRoute(nav, lang, index);
|
|
});
|
|
} else {
|
|
addRoute(nav, lang, index);
|
|
}
|
|
});
|
|
});
|
|
function addRoute(page, lang, index) {
|
|
const component = page.path === '/changelog'
|
|
? load(lang, 'changelog')
|
|
: loadDocs(lang, page.path);
|
|
let child = {
|
|
path: page.path.slice(1),
|
|
meta: {
|
|
title: page.title || page.name,
|
|
description: page.description,
|
|
lang
|
|
},
|
|
name: 'component-' + lang + (page.title || page.name),
|
|
component: component.default || component
|
|
};
|
|
|
|
route[index].children.push(child);
|
|
}
|
|
|
|
return route;
|
|
};
|
|
|
|
let route = registerRoute(navConfig);
|
|
|
|
const generateMiscRoutes = function(lang) {
|
|
let guideRoute = {
|
|
path: `/${ lang }/guide`, // 指南
|
|
redirect: `/${ lang }/guide/design`,
|
|
component: load(lang, 'guide'),
|
|
children: [{
|
|
path: 'design', // 设计原则
|
|
name: 'guide-design' + lang,
|
|
meta: { lang },
|
|
component: load(lang, 'design')
|
|
}, {
|
|
path: 'nav', // 导航
|
|
name: 'guide-nav' + lang,
|
|
meta: { lang },
|
|
component: load(lang, 'nav')
|
|
}]
|
|
};
|
|
|
|
let resourceRoute = {
|
|
path: `/${ lang }/resource`, // 资源
|
|
meta: { lang },
|
|
name: 'resource' + lang,
|
|
component: load(lang, 'resource')
|
|
};
|
|
|
|
let indexRoute = {
|
|
path: `/${ lang }`, // 首页
|
|
meta: { lang },
|
|
name: 'home' + lang,
|
|
component: load(lang, 'index')
|
|
};
|
|
|
|
return [guideRoute, resourceRoute, indexRoute];
|
|
};
|
|
|
|
langs.forEach(lang => {
|
|
route = route.concat(generateMiscRoutes(lang.lang));
|
|
});
|
|
|
|
route.push({
|
|
path: '/play',
|
|
name: 'play',
|
|
component: require('./play/index.vue')
|
|
});
|
|
|
|
let userLanguage = localStorage.getItem('ELEMENT_LANGUAGE') || window.navigator.language || 'en-US';
|
|
let defaultPath = '/en-US';
|
|
if (userLanguage.indexOf('zh-') !== -1) {
|
|
defaultPath = '/zh-CN';
|
|
} else if (userLanguage.indexOf('es') !== -1) {
|
|
defaultPath = '/es';
|
|
} else if (userLanguage.indexOf('fr') !== -1) {
|
|
defaultPath = '/fr-FR';
|
|
}
|
|
|
|
route = route.concat([{
|
|
path: '/',
|
|
redirect: defaultPath
|
|
}, {
|
|
path: '*',
|
|
redirect: defaultPath
|
|
}]);
|
|
|
|
export default route;
|