feat(demo-vue): 全站 i18n 抽文案、中英文资源与页面接入
- 引入 vue-i18n,集中维护 zh-CN / en-US 文案与产品 catalog、长文 HTML - 前台与后台列表/弹窗/校验/删除确认等改为 t(),顶栏与新闻/行业列表与详情页多语言 - 修正 Industry 等页面文首误粘贴;请求头 Accept-Language 与 Element 语言随 locale 切换
This commit is contained in:
19
demo-vue/src/utils/i18n.ts
Normal file
19
demo-vue/src/utils/i18n.ts
Normal file
@@ -0,0 +1,19 @@
|
||||
import { createI18n } from 'vue-i18n'
|
||||
import zhCN from '../locales/zh-CN'
|
||||
import enUS from '../locales/en-US'
|
||||
|
||||
const stored = typeof localStorage !== 'undefined' ? localStorage.getItem('locale') : null
|
||||
const defaultLocale = stored === 'en-US' || stored === 'zh-CN' ? stored : 'zh-CN'
|
||||
|
||||
export const i18n = createI18n({
|
||||
legacy: false,
|
||||
globalInjection: true,
|
||||
locale: defaultLocale,
|
||||
fallbackLocale: 'zh-CN',
|
||||
messages: {
|
||||
'zh-CN': zhCN,
|
||||
'en-US': enUS
|
||||
}
|
||||
})
|
||||
|
||||
export default i18n
|
||||
@@ -2,6 +2,7 @@ import axios, { type AxiosRequestConfig } from 'axios';
|
||||
import { saveLocalStorage, getLocalStorage,clearLocalStorage } from '@/utils/utils';
|
||||
import Constants from '@/utils/constants';
|
||||
import {ElMessage, ElMessageBox} from 'element-plus';
|
||||
import i18n from '@/utils/i18n';
|
||||
|
||||
// token的名称 需要和服务端 配置的对应
|
||||
const TOKEN_NAME = 'pdmtoken';
|
||||
@@ -29,6 +30,10 @@ request.interceptors.request.use(
|
||||
} else {
|
||||
delete config.headers[TOKEN_NAME];
|
||||
}
|
||||
const locale = (i18n.global.locale as { value: string }).value
|
||||
|| (typeof localStorage !== 'undefined' && localStorage.getItem('locale'))
|
||||
|| 'zh-CN';
|
||||
config.headers['Accept-Language'] = locale;
|
||||
return config;
|
||||
},
|
||||
(error: any) => {
|
||||
@@ -59,15 +64,16 @@ request.interceptors.response.use(
|
||||
// `token` 过期或者账号已在别处登录
|
||||
if (res.code === 11012 || res.code == 11011) {
|
||||
ElMessage.closeAll();
|
||||
ElMessage.error('您没有登录,请重新登录');
|
||||
ElMessage.error((i18n.global as { t: (k: string) => string }).t('request.notLogin'));
|
||||
setTimeout(logout, 300);
|
||||
return Promise.reject(response);
|
||||
}
|
||||
// 长时间未操作系统,需要重新登录
|
||||
if (res.code === 30001) {
|
||||
ElMessageBox.confirm('您需要重新登陆', '确认退出登录', {
|
||||
confirmButtonText: '重新登陆',
|
||||
cancelButtonText: '取消',
|
||||
const gt = (i18n.global as { t: (k: string) => string }).t;
|
||||
ElMessageBox.confirm(gt('admin.reLogin'), gt('admin.reLoginTitle'), {
|
||||
confirmButtonText: gt('admin.reLoginBtn'),
|
||||
cancelButtonText: (i18n.global as { t: (k: string) => string }).t('common.cancel'),
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
logout()
|
||||
@@ -86,15 +92,16 @@ request.interceptors.response.use(
|
||||
},
|
||||
(error) => {
|
||||
// 对响应错误做点什么
|
||||
const gt = (i18n.global as { t: (k: string) => string }).t;
|
||||
if (error.message.indexOf('timeout') !== -1) {
|
||||
ElMessage.closeAll();
|
||||
ElMessage.error('网络超时');
|
||||
ElMessage.error(gt('request.timeout'));
|
||||
} else if (error.message === 'Network Error') {
|
||||
ElMessage.closeAll();
|
||||
ElMessage.error('网络连接错误');
|
||||
ElMessage.error(gt('request.network'));
|
||||
} else if (error.message.indexOf('Request') !== -1) {
|
||||
ElMessage.closeAll();
|
||||
ElMessage.error('网络发生错误');
|
||||
ElMessage.error(gt('request.error'));
|
||||
}
|
||||
return Promise.reject(error);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user