首页 > 其他分享 >vue3 使用 vue-i18n 配置多语言环境

vue3 使用 vue-i18n 配置多语言环境

时间:2023-08-14 18:37:03浏览次数:52  
标签:index vue const vue3 i18n import message

1. 插件地址:

Vue I18n官方文档
GitHub地址

2. 安装:

在 Vue 之后引入 vue-i18n,它会自动安装:

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-i18n/dist/vue-i18n.js"></script>

NPM:

npm install vue-i18n

Yarn:

yarn add vue-i18n

3. 使用:

① src 目录下新建 locales 文件夹存放相关文件

image

locales/index.js 中创建 i18n 实例,内容如下:

import { createI18n } from "vue-i18n";
import enUS from "./en-US/index";
import zhCN from "./zh-CN/index";
import zhHK from "./zh-HK/index";

const message = {
  enUS: {
    ...enUS,
  },
  zhCN: {
    ...zhCN,
  },
  zhHK: {
    ...zhHK,
  },
};

const i18n = createI18n({
  locale: "zhCN", // 设置语言类型
  legacy: false, // 如果要支持compositionAPI,此项必须设置为false;
  globalInjection: true, // 全局注册$t方法
  messages: message,
});

export default i18n;

en-US 等文件夹用于存放不同语言配置,例如:

// en-US/index.js
export default {
  message: {
    hello: 'hello world'
  }
};
// zh-CN/index.js
export default {
  message: {
    hello: '你好 世界'
  }
};
// ...

② main.js 中引入 i18n

import { createApp } from "vue";
import i18n from "./locales/index";

const app = createApp(App);
app.use(i18n);
app.mount("#app");

③ 页面中使用

<div id="app">
  <p>{{ $t("message.hello") }}</p>
</div>

④ script中使用

<script setup>
import { useI18n } from "vue-i18n";
import { computed } from "vue";

const { t, locale } = useI18n();

const changeLang = (lang) => {
  locale.value = lang;
  localStorage.setItem("LANG", lang);
};
const getCurrentLang = computed(() => {
  return locale.value;
});

console.log(getCurrentLang.value);
console.log(t("message.hello"));
</script>

4. 问题:

① 使用vite时控制台报错如下:

image
解决方法:vite中添加如下配置

resolve: {
  alias: [
    {
      find: "vue-i18n",
      replacement: "vue-i18n/dist/vue-i18n.cjs.js",
    },
  ],
},

标签:index,vue,const,vue3,i18n,import,message
From: https://www.cnblogs.com/lpkshuai/p/17629418.html

相关文章

  • Vuejs装饰器风格开发教程(前言、模板项目、类属性、类方法)
    教程前言AOP切面编程是面向对象开发中的一种经典的编程范式,旨在将横切关注点与核心业务逻辑分离来提高代码的模块性和可维护性。如:日志记录、事务管理等就属于横切关注点。在为H5提供Android原生支持时,曾将插件模块改造为AOP模式,实现插件的自动注册。Java领域的SpringBoo......
  • 使用vue自定义指令实现按钮权限管理
    原文链接:https://www.jianshu.com/p/f7d6b9420cee官网链接:https://v2.cn.vuejs.org/v2/guide/custom-directive.html注册全局指令Vue提供了一个directive方法给我们注册自定义指令,在main.js中注册一个全局的自定义指令。directive方法接收两个参数:指令名称、包含指令钩子函......
  • vue函数式组件
    <template>改为<templatefunctional>即可然后模板里使用到父组件参数的话,需在变量前面加上props,如<div>{{count}}</div>改为<div>{{props.count}}</div>如果组件比较简单,只是展示数据的话,可以使用函数式组件,函数式组件没有生命周期(beforeCreated、beforeDestroy),可提升......
  • vuex辅助函数使用
    一:mapState的使用此函数返回一个对象,生成计算属性-当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。mapState可以声明多个需要在组件中引入:需要在组件中引入:import{mapState}from'vuex'...mapState({/......
  • vue语法错误 + Promise错误 + js 错误,通过钉钉报警
      一、背景:为了使系统更加稳定,在用户使用期间,若发现异常,可及时应对,采取了“报警机制”。通常“报警机制”分为2种,一种是后端对api监控及自定义监控,出现异常,通过钉钉或邮件的形式通知,第二种是前端对js语法,vue语法,自定义报错进行监控,以此来规范代码质量,保证系统预警二、流程......
  • vue.use()详解
    原文链接:https://blog.csdn.net/sunyctf/article/details/127706967官网解释:前言:相信很多人在用Vue使用别人的组件时,会在在main.js中用到Vue.use(xx)。例如:Vue.use(VueRouter)、Vue.use(MintUI)、Vue.use(ElementUI)。但是用axios时,就不需要用Vue.use(axios),就......
  • vue-router动态路由无限循环
    //isLogined用来判断用户是否已登录router.beforeEach((to,from,next)=>{if(isLogined){next()}else{console.log('测试')next('login')}})next()表示放行,直接进入to路由,不会再次调用router.beforeEach()next(path:...to,replace:true)拦截......
  • Vue3 中的v-model实现父子组件数据同步通信
    v-model在vue2中也就是双向绑定作用,但是在vue3中除了实现双向绑定外,还可以进行组件的通信父子组件的数据同步,接下来看看例子:<template><h1>{{num}}</h1><child-eventv-model="num"></child-event></template><scriptlang="ts"setup......
  • vue中使用sockjs
    1,安装依赖npminstallsockjs-client--savenpminstall stompjs--save2,使用混入封装在src下创建mixins文件夹,然后创建sockjs.js文件importSockJSfrom"sockjs-client";importStompfrom"stompjs";exportconstsockjsMixins={data(){return{......
  • vue——qq音乐播放器(1) 左边导航栏样式的实现
    实现结果:左侧导航栏样式实现完整代码:1<template>2<!--左边导航条-->3<divclass="leftnav">4<!--logo-->5<divclass="logo"></div>6<divclass="my-scroll">7......