diff --git a/src/components/LangSelect/index.vue b/src/components/LangSelect/index.vue index 31cc80d0..ef5f2c44 100644 --- a/src/components/LangSelect/index.vue +++ b/src/components/LangSelect/index.vue @@ -6,6 +6,7 @@ 中文 English + Español diff --git a/src/lang/es.js b/src/lang/es.js new file mode 100755 index 00000000..19171904 --- /dev/null +++ b/src/lang/es.js @@ -0,0 +1,155 @@ +export default { + route: { + dashboard: 'Panel de control', + introduction: 'Introducción', + documentation: 'Documentación', + guide: 'Guía', + permission: 'Permisos', + pagePermission: 'Permisos de la página', + directivePermission: 'Permisos de la directiva', + icons: 'Iconos', + components: 'Componentes', + componentIndex: 'Introducción', + tinymce: 'Tinymce', + markdown: 'Markdown', + jsonEditor: 'Editor JSON', + dndList: 'Lista Dnd', + splitPane: 'Panel dividido', + avatarUpload: 'Subir avatar', + dropzone: 'Subir ficheros', + sticky: 'Sticky', + countTo: 'CountTo', + componentMixin: 'Mixin', + backToTop: 'Ir arriba', + dragDialog: 'Drag Dialog', + dragKanban: 'Drag Kanban', + charts: 'Gráficos', + keyboardChart: 'Keyboard Chart', + lineChart: 'Gráfico de líneas', + mixChart: 'Mix Chart', + example: 'Ejemplo', + nested: 'Rutas anidadass', + menu1: 'Menu 1', + 'menu1-1': 'Menu 1-1', + 'menu1-2': 'Menu 1-2', + 'menu1-2-1': 'Menu 1-2-1', + 'menu1-2-2': 'Menu 1-2-2', + 'menu1-3': 'Menu 1-3', + menu2: 'Menu 2', + Table: 'Tabla', + dynamicTable: 'Tabla dinámica', + dragTable: 'Arrastrar tabla', + inlineEditTable: 'Editor', + complexTable: 'Complex Table', + treeTable: 'Tree Table', + customTreeTable: 'Custom TreeTable', + tab: 'Pestaña', + form: 'Formulario', + createArticle: 'Crear artículo', + editArticle: 'Editar artículo', + articleList: 'Listado de artículos', + errorPages: 'Páginas de error', + page401: '401', + page404: '404', + errorLog: 'Registro de errores', + excel: 'Excel', + exportExcel: 'Exportar a Excel', + selectExcel: 'Export seleccionado', + uploadExcel: 'Subir Excel', + zip: 'Zip', + exportZip: 'Exportar a Zip', + theme: 'Tema', + clipboardDemo: 'Clipboard', + i18n: 'I18n', + externalLink: 'Enlace externo' + }, + navbar: { + logOut: 'Salir', + dashboard: 'Panel de control', + github: 'Github', + screenfull: 'Pantalla completa', + theme: 'Tema', + size: 'Tamaño global' + }, + login: { + title: 'Formulario de acceso', + logIn: 'Acceso', + username: 'Usuario', + password: 'Contraseña', + any: 'nada', + thirdparty: 'Conectar con', + thirdpartyTips: 'No se puede simular en local, así que combine su propia simulación de negocios. ! !' + }, + documentation: { + documentation: 'Documentación', + github: 'Repositorio Github' + }, + permission: { + roles: 'Tus permisos', + switchRoles: 'Cambiar permisos' + }, + guide: { + description: 'The guide page is useful for some people who entered the project for the first time. You can briefly introduce the features of the project. Demo is based on ', + button: 'Ver guía' + }, + components: { + documentation: 'Documentación', + tinymceTips: 'Rich text editor is a core part of management system, but at the same time is a place with lots of problems. In the process of selecting rich texts, I also walked a lot of detours. The common rich text editors in the market are basically used, and the finally chose Tinymce. See documentation for more detailed rich text editor comparisons and introductions.', + dropzoneTips: 'Because my business has special needs, and has to upload images to qiniu, so instead of a third party, I chose encapsulate it by myself. It is very simple, you can see the detail code in @/components/Dropzone.', + stickyTips: 'when the page is scrolled to the preset position will be sticky on the top.', + backToTopTips1: 'When the page is scrolled to the specified position, the Back to Top button appears in the lower right corner', + backToTopTips2: 'You can customize the style of the button, show / hide, height of appearance, height of the return. If you need a text prompt, you can use element-ui el-tooltip elements externally', + imageUploadTips: 'Since I was using only the vue@1 version, and it is not compatible with mockjs at the moment, I modified it myself, and if you are going to use it, it is better to use official version.' + }, + table: { + dynamicTips1: 'Fixed header, sorted by header order', + dynamicTips2: 'Not fixed header, sorted by click order', + dragTips1: 'Orden por defecto', + dragTips2: 'The after dragging order', + title: 'Título', + importance: 'Importancia', + type: 'Tipo', + remark: 'Remark', + search: 'Buscar', + add: 'Añadir', + export: 'Exportar', + reviewer: 'reviewer', + id: 'ID', + date: 'Fecha', + author: 'Autor', + readings: 'Lector', + status: 'Estado', + actions: 'Acciones', + edit: 'Editar', + publish: 'Publicar', + draft: 'Draft', + delete: 'Eliminar', + cancel: 'Cancelar', + confirm: 'Confirmar' + }, + errorLog: { + tips: 'Please click the bug icon in the upper right corner', + description: 'Now the management system are basically the form of the spa, it enhances the user experience, but it also increases the possibility of page problems, a small negligence may lead to the entire page deadlock. Fortunately Vue provides a way to catch handling exceptions, where you can handle errors or report exceptions.', + documentation: 'Documento de introducción' + }, + excel: { + export: 'Exportar', + selectedExport: 'Exportar seleccionados', + placeholder: 'Por favor escribe un nombre de fichero' + }, + zip: { + export: 'Exportar', + placeholder: 'Por favor escribe un nombre de fichero' + }, + theme: { + change: 'Cambiar tema', + documentation: 'Documentación del tema', + tips: 'Tips: It is different from the theme-pick on the navbar is two different skinning methods, each with different application scenarios. Refer to the documentation for details.' + }, + tagsView: { + refresh: 'Actualizar', + close: 'Cerrar', + closeOthers: 'Cerrar otros', + closeAll: 'Cerrar todos' + } +} diff --git a/src/lang/index.js b/src/lang/index.js index a77b07ea..7c9c8af6 100644 --- a/src/lang/index.js +++ b/src/lang/index.js @@ -3,8 +3,10 @@ import VueI18n from 'vue-i18n' import Cookies from 'js-cookie' import elementEnLocale from 'element-ui/lib/locale/lang/en' // element-ui lang import elementZhLocale from 'element-ui/lib/locale/lang/zh-CN'// element-ui lang +import elementEsLocale from 'element-ui/lib/locale/lang/es'// element-ui lang import enLocale from './en' import zhLocale from './zh' +import esLocale from './es' Vue.use(VueI18n) @@ -16,12 +18,16 @@ const messages = { zh: { ...zhLocale, ...elementZhLocale + }, + es: { + ...esLocale, + ...elementEsLocale } } const i18n = new VueI18n({ // set locale - // options: en or zh + // options: en | zh | es locale: Cookies.get('language') || 'en', // set locale messages messages diff --git a/src/mock/index.js b/src/mock/index.js index e6644ae1..3e00e918 100644 --- a/src/mock/index.js +++ b/src/mock/index.js @@ -4,6 +4,16 @@ import articleAPI from './article' import remoteSearchAPI from './remoteSearch' import transactionAPI from './transaction' +// 修复在使用 MockJS 情况下,设置 withCredentials = true,且未被拦截的跨域请求丢失 Cookies 的问题 +// https://github.com/nuysoft/Mock/issues/300 +Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send +Mock.XHR.prototype.send = function() { + if (this.custom.xhr) { + this.custom.xhr.withCredentials = this.withCredentials || false + } + this.proxy_send(...arguments) +} + // Mock.setup({ // timeout: '350-600' // }) diff --git a/src/utils/index.js b/src/utils/index.js index f607910c..3af8b29b 100644 --- a/src/utils/index.js +++ b/src/utils/index.js @@ -296,3 +296,7 @@ export function deepClone(source) { export function uniqueArr(arr) { return Array.from(new Set(arr)) } + +export function isExternal(path) { + return /^(https?:|mailto:|tel:)/.test(path) +} diff --git a/src/views/i18n-demo/index.vue b/src/views/i18n-demo/index.vue index 94d1e470..b5344c67 100644 --- a/src/views/i18n-demo/index.vue +++ b/src/views/i18n-demo/index.vue @@ -9,6 +9,7 @@ 简体中文 English + Español {{ $t('i18nView.note') }} @@ -101,6 +102,7 @@ export default { if (!this.$i18n.getLocaleMessage('en')[viewName]) { this.$i18n.mergeLocaleMessage('en', local.en) this.$i18n.mergeLocaleMessage('zh', local.zh) + this.$i18n.mergeLocaleMessage('es', local.es) } this.setOptions() // set default select options }, diff --git a/src/views/i18n-demo/local.js b/src/views/i18n-demo/local.js index 1c39608e..9b43e605 100644 --- a/src/views/i18n-demo/local.js +++ b/src/views/i18n-demo/local.js @@ -39,5 +39,25 @@ export default { two: 'Two', three: 'Three' } + }, + es: { + i18nView: { + title: 'Switch Language', + note: 'The internationalization of this project is based on vue-i18n', + datePlaceholder: 'Pick a day', + selectPlaceholder: 'Select', + tableDate: 'tableDate', + tableName: 'tableName', + tableAddress: 'tableAddress', + default: 'default:', + primary: 'primary', + success: 'success', + info: 'info', + warning: 'warning', + danger: 'danger', + one: 'One', + two: 'Two', + three: 'Three' + } } } diff --git a/src/views/layout/components/Sidebar/Link.vue b/src/views/layout/components/Sidebar/Link.vue index 07793b9a..5d366f24 100644 --- a/src/views/layout/components/Sidebar/Link.vue +++ b/src/views/layout/components/Sidebar/Link.vue @@ -7,7 +7,7 @@