vue动态添加store、路由和国际化配置方式
作者:周晓风 发布时间:2024-05-05 09:10:09
标签:vue,store,路由,国际化
vue动态添加store,路由和国际化
vue动态添加store
想写组件库?用这个吧 …
// store module标准格式
import demo from '@/store/modules/demo'
$store.registerModule('demo', demo)
vue动态添加路由
从后端加载路由不再是梦 …
// 不加这个可以跳转,但是options里面没有新加的信息
$router.options.routes.push(...routerArray)
$router.beforeEach
$router.beforeResolve
$router.afterEach
$router.beforeHooks ?// 数组
$router.afterHooks ?// 数组
用这些修改全局路由守卫及守卫顺序
vue动态加载国际化
从后端加载国际化,so easy …
$i18n.setLocaleMessage('zh_CN', messageObject)
// or
$i18n.mergeLocaleMessage('zh_CN', messageObject)
前端项目用vue-i18n实现国际化
在项目中安装国际化包的依赖
npm i vue-i18n --save
配置文件
作为独立的i18n文件,在main.js中引入。要是国际化文件不多,建议用非异步方式引入。
异步方式引入,一次只加载一种国际化包
lang/index.js
import Vue from 'vue';
// import Cookies from 'js-cookie'
import VueI18n from 'vue-i18n';
Vue.use(VueI18n);
class I18n extends VueI18n {
constructor() {
super({
locale: '',
message: {},
});
}
// vue i18n init
async init() {
const sLang = this.getLang();
await this.setLocale(sLang);
return this;
}
// get/update language
getLang() {
// get define language
// 需要取cookies里面的值的话就加上
// sLang = Cookies.get('language') || navigator.language || 'zh-CN';
let sLang = navigator.language || 'zh-CN';
return sLang;
}
// set locale language
async setLocale(sLang) {
// async load language message
const loadMessages = async function(sLang) {
const oMessages = {};
try {
// local language file
const oProjectMessage = await import(`./${sLang}`);
// 需要 element 里面的语言包的话就加上
// const oElementMessage = await import(
// `element-ui/lib/locale/lang/${sLang}`
// );
// assign language message
Object.assign(
oMessages,
oProjectMessage.default,
// oElementMessage.default,
);
} catch (error) {
throw new Error(error);
}
return oMessages;
};
const oMessages = await loadMessages(sLang);
// vue-i18n的方法
this.setLocaleMessage(sLang, oMessages);
// update lang
this.locale = sLang;
}
}
export default new I18n();
*main.js
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import i18n from './lang/index'; //引入i8n配置
import 'normalize.css';
Vue.config.productionTip = false;
// 初始化i18n和Vue
i18n.init().then(async (oI18n) => {
new Vue({
router,
i18n: oI18n, //挂在在vue 下
render: function(h) {
return h(App);
},
}).$mount('#app');
});
以上异步方式适合应用在项目用默认的国际化语言,如果在页面上切语言的话,会很不方便,需要大刷。
下面推荐一下页面上有切语言的,非异步方式,一次加载所有的国际化文件。
非异步步方式,每次加载所有的包
lang/index.js
import Vue from 'vue'; // 引入Vue
import VueI18n from 'vue-i18n'; // 引入i18n
// import locale from 'element-ui/lib/locale' // 引入element 国际化配置
import cookie from 'js-cookie';
import cn from './zh-CN'; //简体中文语言文件
import tw from './zh-TW'; //繁体中文语言文件
import en from './en';
Vue.use(VueI18n);
const locale = cookie.get('language') || navigator.language || 'zh-CN';
// 创建实例并且挂在自定义语言包
const i18n = new VueI18n({
locale: locale, // 默认语言为中文
messages: {
'zh-CN': cn,
'zh-TW': tw,
en,
},
silentTranslationWarn: true,
});
// locale.i18n((key, value) => i18n.t(key, value)); // 把element 的语言包挂在到i18n中
export default i18n; // 导出实例
main.js
* import Vue from 'vue';
import App from './App.vue';
import router from './router';
import i18n from './lang/index'; //引入i8n配置
import 'normalize.css';
// import common plugins
import utils from './utils';
Vue.config.productionTip = false;
// install utils
Vue.use(utils);
new Vue({
router,
i18n, // 挂在在vue 下
render: function(h) {
return h(App);
},
}).$mount('#app');
/* 路由发生变化修改页面title */
router.beforeEach((to, from, next) => {
if (to.name) {
document.title = `${i18n.t('title')}-${i18n.t(to.name)}`;
}
next();
});
lang/zh-CN.js
?export default {
? ? title: '梦醒在笑-标题',
? ? edit: '修改',
? ? }
lang/cn.js
?export default {
? ? title: 'title',
? ? edit: 'edit',
? ? }
lang/zh-TW.js
?export default {
? ? title: '繁體﹣標題',
? ? edit: '編輯',
? ? }
使用
在HTML中使用
?<div>{{ $i18n.t('title')}}</div>
在JS中使用
this.$i18n.t('title')
切语言
非异步方式切换完页面不用刷新。
//在页面上这样调用 changeLang('zh-TW')changeLang('zh-CN')changeLang('en')
changeLang(lang) {
? ?//切换语言
? ?this.lang = lang;
? ?this.$i18n.locale = lang;
? ?this.$utils.cookie.set('language', lang);
},
以上为个人经验,希望能给大家一个参考,也希望大家多多支持asp之家。
来源:https://blog.csdn.net/u011140116/article/details/107427932


猜你喜欢
- 检查bug的步骤1. bug定位在js脚本中,按照脚本执行的顺序,你可以用console或alert,来确定bug发生的代码区间,然后在区间
- 一. 官网下载MySQL官方网址:(https://www.mysql.com/) 或者点击这里下载:https://www.jb
- 函数: # 什么是函数:一系列python语句的组合,可以在程序中运行一次或者多次# 一般是完成具体的独立的功能# 为什么要使用函数# 代码
- 多标签分类器多标签分类任务与多分类任务有所不同,多分类任务是将一个实例分到某个类别中,多标签分类任务是将某个实例分到多个类别中。多标签分类任
- 本文实例为大家分享了Python PyQt4实现QQ抽屉效果展示的具体代码,供大家参考,具体内容如下先看截图效果:主要是使用了QT的QTab
- 以前工作中需要全新的Access数据库,可以复制数据库,也可以把新的数据库放到资源里面,用新数据库的时候释放出来,都感觉不爽,还是动态生成心
- 代码如下var http=require('http');var ejs=require('ejs');va
- 方法:通过desc:都无法实现:方法一:select sp.productid,sp.productname,ss.sku from sp_
- 有时候,因为内容的更改或者隐私问题,我们往往不 希望别人通过“百度快照”的方法 查看 自己网站的某一些网页,对于网站管理员来说,百度快照也分
- 1. Python字典的clear()方法(删除字典内所有元素)#!/usr/bin/python# -*- coding: UTF-8 -
- import timedef block(file,size=65536): while True:&n
- 如何用ASP获知机器的网络配置?看看我们的例子:Option Explicit Dim WSHShell&nb
- 本文实例讲述了python中尾递归用法。分享给大家供大家参考。具体分析如下:如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递
- 标准的SQL模式匹配SQL的模式匹配允许你使用“_”匹配任何单个字符,而“%”匹配任意数目字符(包括零个字符)。在 MySQL中,SQL的模
- 本文实例讲述了C#将图片存放到SQL SERVER数据库中的方法。分享给大家供大家参考。具体如下:第一步: //获取当前选择的图片
- 运算符优先级来确定条件的表达式中的分组。这会影响一个表达式如何计算。某些运算符的优先级高于其他;例如,乘法运算符的优先级比加法运
- js浮点数计算有时是不准确的,比如7*0.8 == 7*8/10的值为false,因为7*0.8=5.6000000000000005,乘出
- 1.不同字符与获取字符串长度获取字符串长度,是字符串操作的重要方法。理论来说,获取字符串长度,只要从头到尾查找一遍就可以了。但遗憾的是,不同
- 本文是将yolo3目标检测框架训练出来的ckpt文件固化成pb文件,主要利用了GitHub上的该项目。为什么要最终生成pb文件呢?简单来说就
- 什么是Mosaic数据增强方法Yolov4的mosaic数据增强参考了CutMix数据增强方式,理论上具有一定的相似性!CutMix数据增强