vue2升级vue3:vue-i18n国际化异步按需加载
vue2异步加载之前说过,vue3还是之前的方法,只是把 i18n.setLocaleMessage改为i18n.global.setLocaleMessage
但是本文还是详细说一遍:
为什么需要异步加载语言包
主要还是缩小提代码包,没有按需加载前,语言包内容太多

好几屏幕全部是,虽然从webpack-analysis 看图里面占比可以忽略不计
按语言异步加载语言包
一次加载所有翻译文件是过度和不必要的。
因为可能一直用中文,那么就不会用到英文的数据,就没必要去加载。只在请求的时候去加载它
改动前代码
import { createI18n } from 'vue-i18n';
import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
import cookies from '@/utils/cookies';
import chineseJson from '../lang/zh-cn.json';
import englishJson from '../lang/en.json';
//****n
const currentLang = cookies.get('blueking_language') || 'zh-cn';
if (currentLang === 'en') {
dayjs.locale('en');
} else {
dayjs.locale('zh-cn');
}
const i18n = createI18n({
locale: currentLang,
fallbackLocale: 'zh-cn', // 设置备用语言
silentFallbackWarn: true,
silentTranslationWarn: true,
globalInjection: true,
allowComposition: true,
messages: {
en: { ...englishJson },
'zh-cn': { ...chineseJson },
//****n
},
});
export default i18n;
这个文件n多,堆叠起来体积也不少
改动后
import { createI18n } from 'vue-i18n';
import dayjs from 'dayjs';
import 'dayjs/locale/zh-cn';
import cookies from '@/utils/cookies';
// import chineseJson from '../lang/zh-cn.json';
// import englishJson from '../lang/en.json';
export type LangType = 'zh-cn'|'en';
const currentLang: LangType = cookies.get('blueking_language') as LangType || 'zh-cn';
// 初始化加载fallbackLocale 语言包,但是图表平台首先加载框架,无需放到框架里面去加载
/* const messages = {
// en: { ...englishJson },
'zh-cn': { ...chineseJson },
};*/
const i18n = createI18n({
locale: currentLang,
fallbackLocale: 'zh-cn', // 设置备用语言
silentFallbackWarn: true,
silentTranslationWarn: true,
globalInjection: true,
allowComposition: true,
// messages,
});
export function changLang(langs: LangType) {
if (currentLang === 'en') {
dayjs.locale('en');
} else {
dayjs.locale('zh-cn');
}
cookies.set('blueking_language', langs);
loadLanguageAsync(langs);
// window.location.reload();
}
export function setI18nLanguage(lang: LangType) {
i18n.global.locale = lang;
return lang;
}
export function loadLanguageAsync(lang: LangType) {
return import(/* webpackChunkName: "lang-request" */`../lang/${lang}.json`).then((langfile) => { // 动态加载对应的语言包
i18n.global.setLocaleMessage(lang, langfile);
return setI18nLanguage(lang); // 返回并且设置
});
}
changLang(currentLang);
export default i18n;
这样就可以了
注意事项
由于是异步加载,比如初始化只加载 fallbackLocale ,代码中注释的部分
vue3使用vue-i18n 9.x ,相关方法在i18n.global.xxx
但是这个加载包还是有些打,需要进一步拆分
按模块或路由加载语言包
这个优化有很多措施
拆分模块
之前的语言包全部是在一个json文件里面。第一个,json无法tree-shake 树摇 掉不用代码。
如果是ts,首先第一个按页面、功能 分成一个个 对象。虽然不用tree-shake。
但是可以通过组合得到不同的js。
然后在路由钩子里面,按需注入。loadLanguageAsync
参考文章:
vueI18n 多语言文件按需加载:https://blog.csdn.net/yujin0213/article/details/119137798
vue 多语言 vue-i18n 按需加载,异步调用 https://www.cnblogs.com/chenyi4/p/12409074.html
十分钟入门前端最佳的语言国际化方案 https://zhuanlan.zhihu.com/p/144717545
转载本站文章《vue2升级vue3:vue-i18n国际化异步按需加载》,
请注明出处:https://www.zhoulujun.cn/html/webfront/ECMAScript/vue3/8930.html
vue2升级vue3:vue-i18n国际化异步按需加载的更多相关文章
- vue项目实现路由按需加载的3种方式
vue异步组件技术 ==== 异步加载vue-router配置路由 , 使用vue的异步组件技术 , 可以实现按需加载 .但是,这种情况下一个组件生成一个js文件 /* vue异步组件技术 */ { ...
- vue3.0使用ant-design-vue进行按需加载原来这么简单
下载 ui库 yarn add ant-design-vue 默认是全局引入,打包后体积很大, 非常影响首屏加载速度, 按需加载 下载按需加载的插件;推荐使用cnpm cnpm install bab ...
- D3树状图异步按需加载数据
D3.js这个绘图工具,功能强大不必多说,完全一个Data Driven Document的绘图工具,用户可以按照自己的数据以及希望实现的图形,随心所欲的绘图. 图形绘制,D3默认采用的是异步加载,但 ...
- vue项目优化之按需加载组件-使用webpack require.ensure
require-ensure和require-amd的区别: require-amd 说明: 同AMD规范的require函数,使用时传递一个模块数组和回调函数,模块都被下载下来且都被执行后才执行回调 ...
- vue 动态路由按需加载的三种方式
在Vue项目中,一般使用vue-cli构建项目后,我们会在Router文件夹下面的index.js里面引入相关的路由组件,如: import Hello from '@/components/Hell ...
- Vue3 使用 svg-sprite-loader 实现 svg 图标按需加载
前面文章有讲到 svg 图标按需加载的优势以及 Vue 如何使用 vue-svg-icon 实现 svg 图标按需载入: https://www.cnblogs.com/Leophen/p/13201 ...
- 深入浅出的webpack4构建工具---webpack+vue+router 按需加载页面(十五)
1. 为什么需要按需加载? 对于vue单页应用来讲,我们常见的做法把页面上所有的代码都打包到一个bundle.js文件内,但是随着项目越来越大,文件越来越多的情况下,那么bundle.js文件也会越来 ...
- vue2升级vue3:Vue Demij打通vue2与vue3壁垒,构建通用组件
如果你的vue2代码之前是使用vue-class-component 类组件模式写的.选择可以使用 https://github.com/facing-dev/vue-facing-decorator ...
- vue2升级vue3:vue2 vue-i18n 升级到vue3搭配VueI18n v9
项目从vue2 升级vue3,VueI18n需要做适当的调整.主要是Vue I18n v8.x 到Vue I18n v9 or later 的变化,其中初始化: 具体可以参看:https://vue- ...
- vue2升级vue3指南(二)—— 语法warning&error篇
本文总结了vue2升级vue3可能会遇到的语法警告和错误,如果想知道怎样升级,可以查看我的上一篇文章:vue2升级vue3指南(一)-- 环境准备和构建篇 Warning 1.deep /deep/和 ...
随机推荐
- L2 Gracia Final OpCodz
[83] Gracia Final Client 00 SendLogOut 01 RequestAttack 03 RequestStartPledgeWar 04 RequestReplyStar ...
- IE8兼容的零零碎碎
css部分 1 nth-of-type选择器 2 span:nth-of-type(1) 3 /*IE8兼容写法*/ 4 span:first-child /*选中第一个*/ 5 span:first ...
- 自动化测试工具selenium的常用定位方法
定位方法不仅限于这些,我也会随时补充,大家有其他补充或建议可以在评论区一起讨论哦!!! [打开链接]drive.get("https://www.baidu.com") ...
- 20200923--计算鞍点(奥赛一本通P91 4)
给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点.鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值. 例如:在下面的例子中(第4行第1列的元素就是鞍 ...
- JS Math与一些原始类型
镇楼图 Pixiv:DSマイル 一.值属性.函数 globalThis JS有全局对象,但是在不同环境中全局对象均不同.在Web环境中,window.self.frames取得全局对象,在Web Wo ...
- git commit --amend适用场景详解
适用场景: 场景1.本地开发代码已提交,提交后发现这次提交的代码有问题,或者漏提交了一些文件,此时,希望达到以下目的: ①修改有问题的代码. ②补足漏提交的文件(一般是新增的文件没有git add . ...
- hdu:"红色病毒"问题(指数型母函数用e^x指数函数来计算)
Problem Description医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变 ...
- js数组常用的方法
var arr=['hello','前端','world']; 1. arr.join(分隔符):将数组中的值拼接成一个字符串,返回这个字符串,默认分隔符"," arr.join( ...
- Using Semaphores in Delphi, Part 2: The Connection Pool
Abstract: Semaphores are used to coordinate multiple threads and processes. That semaphores provide ...
- idea初学
IDEA 什么是IDE IDEA官网 idea中文设置:打开右上角设置选择设置,选择Plugins ,搜索Chinese,安装插件后重启即可 IDEA基础语法 注释 编写代码量多时,项目结构复杂,需要 ...