美文网首页
vue-i18n语言文字不被打包

vue-i18n语言文字不被打包

作者: NemoExpress | 来源:发表于2022-01-15 15:06 被阅读0次

项目需要对多语言进行支持,所以使用了(vue-i18n) ,但是最后打包后,语言文字相关的配置信息也会被打包,这样如果要更改语言文字的文案,就只能修改源码,然后再进行打包才能使最新的语言文字生效。那么如何能够在打完包后依然可以修改语言包,并且修改后不需要重新打包呢?

将语言文件配置放在public目录下

因为public目录下的资源不会被打包,这样就可以直接修改语言配置文件了
关键原理:语言文字的配置文件通过js预先加载到页面,同时将对应的语言配置作为一个全局变量,从而被i18n引用到。

创建语言配置文件

  1. 在public目录下创建中英文配置项文件


    创建语言配置文件
  2. 注意配置文件中语言是用一个变量声明的,
// zh.js
const zh = {
  operate: '操作',
  select: '选择',
  edit: '编辑',
}
// en.js
const en = {
  operate: 'Operate',
  select: 'Select',
  edit: 'Edit',
}

在public目录index.html中引入en.js和zh.js

引入语言文件

修改main.js中i18n相关配置

const lang_zh = zh  //获取默认中文 因为zh已经在index.html中加载过了,所以是个全局变量
const lang_en = en  //获取默认英文
const messages = {
    en: lang_en,
    zh: lang_zh
}
const i18n = new VueI18n({
  locale: 'en', 
  messages,
})
new Vue({
  i18n,
  store,
  router,
  render: h => h(App)
}).$mount('#app')

需要待优化问题

  • 语言文字文件需要预先加载,可能会占用过多网络资源消耗,由于目前只有中英文两个语言,所以暂时不进行处理。可以通过远程加载翻译文件的方式进行解决

将语言文字转成json后再进行远程请求,请求到的数据后,使用i18n.setLocaleMessage()加载翻译

$.get("zh.json").done((result)=>{
    i18n.setLocaleMessage('zh',result.zh); // 使用`i18n.setLocaleMessage()`远程加载翻译文件

相关文章

网友评论

      本文标题:vue-i18n语言文字不被打包

      本文链接:https://www.haomeiwen.com/subject/hrvthrtx.html