• vue3 和 vue2 对于使用多语言i18n的区别


    1.vue3 的使用,需要安装最新版的i18n,安装一般在"^9.1.9"

    npm install vue-i18n@next  
    或
    yarn add vue-i18n@next

    2.在使用之前需要先创建语言的文件夹,并将其导出,例如

     langs可以放入你想要变化的任何语言,不止中文和英文,文件的内容JSON文件就是需要前面的变量相同,后面的值就是你当前语言的值

    //en.json
    
    {
      "Sunday":"Sunday",
      "Monday":"Monday",
      "Tuesday":"Tuesday",
      "Wednesday":"Wednesday",
      "Thursday":"Thursday",
      "Friday":"Friday",
      "Saturday":"Saturday"
    }
    
    //zh.json
    {
      "Sunday":"星期日",
      "Monday":"星期一",
      "Tuesday":"星期二",
      "Wednesday":"星期三",
      "Thursday":"星期四",
      "Friday":"星期五",
      "Saturday":"星期六"
    }
    
    //index.js
    import en from './en'
    import zh from './zh'
    
    export default {
      en,
      zh,
    }

    再创建一个i18n.js文件,做初始化操作

    注意:里面存储的Store.state.lang,我做了持久化的处理,如果你不做可以将它存到localStorage中

     
    import  messages from '../langs/index'
    import  {createI18n} from 'vue-i18n'
    import Store from '../store/index'
    import axios from 'axios'
    import App from '../main'
    export const  i18n = createI18n ({
        fallbackLocale: 'en', //没有其他语言的情况下默认英文
        globalInjection:true, //在全局注入
        silentFallbackWarn: true,//抑制警告
        legacy: false, // you must specify 'legacy: false' option
        locale:Store.state.lang,
        messages
    })
    
    export  function setI18nLanguage () { //切换语言设置
      Store.state.lang = Store.state.lang=='en' ? 'zh' : 'en'; //只做中英文切换
      App.config.globalProperties.$i18n.locale=Store.state.lang; //修改App的原始属性
      axios.defaults.headers.common['Accept-Language'] = Store.state.lang; //接口请求加上语言标志
      document.querySelector('html').setAttribute('lang', Store.state.lang); 
      Store.dispatch('changeload'); //刷新页面
    }
    
    export function i18nText(val) { //导出语言切换使得在其他js文件中也能使用多语言
        try {
            const { t } = i18n.global 
            return t(val)  
        } catch (error) {
            console.log(error);
        }
    }

    然后在main.js中引入使用

    import { createApp } from 'vue'
    import App from './App.vue'
    import store from './store'
    import {i18n} from './plugins/i18n'
    import './plugins/metamask'
    
    const app = createApp(App);
    
    app.use(store).use(i18n).mount('#app');
    
    export default app

    这时就可以在vue页面中使用了

    {{$t('Saturday')}}
    <script setup>
    import { useI18n } from 'vue-i18n'
    
    const { t } = useI18n()
    console.log(t('Sunday'));
    </script>

    vue2 中使用 的版本是 "vue-i18n": "^8.27.0", 至于哪些版本可以在vue3和vue2中使用,没有深究,有兴趣的可以自己探索

    1.就是下载

    npm i vue-i18n@8.27.0 -D

    2.就是和上面一样建文件,不在赘述

    3.在i18n.js文件使用

    //i18n-setup.js
    import Vue from 'vue'
    import VueI18n from 'vue-i18n'
    import en from '@/langs/en/index.json'
    import zh from '@/langs/zh-cn/index.json'
    import axios from 'axios'
    import store from '@/store'
    
    Vue.use(VueI18n)
    
    export const i18n = new VueI18n({
      locale: localStorage.getItem('lang') || 'en', // 设置语言环境
      fallbackLocale: localStorage.getItem('lang') || 'en',
      messages: {
        en,
        zh,
      } // 设置语言环境信息
    })
    
    const loadedLanguages = ['en', 'zh'] // 我们的预装默认语言
    
    export function setI18nLanguage (lang) {
      i18n.locale = lang
      localStorage.setItem('lang',lang)
    
      const langMap={
        zh:'cn',
        en:'en'
      }
      axios.defaults.headers.common['Accept-Language'] = langMap[lang]
      document.querySelector('html').setAttribute('lang', lang)
      return lang
    }
    
    export function i18nText(val) { //在其他的js文件中引入
      return i18n.t(val)
    }

    4.在main.js中引入

    import { i18n } from '@/plugins/i18n'
    
    new Vue({
      router,
      store,
      i18n,
      render: h => h(App)
    }).$mount('#app')

    5.在页面中使用

    {{$t('no-data')}}
    <script>
        //无需引入直接使用
        console.log(this.$t('Sunday'))
        
    </script>
  • 相关阅读:
    用Fusion Log诊断同一版本冲突问题解决
    SQLSERVER 切换数据库为单用户和多用户模式
    redis常用命令
    linq函数All,Any,Aggregate说明
    rabbitmq部署安装
    Centos7防火墙常用命令
    SQL SERVER添加表注释、字段注释
    Windows定时任务管理以及服务管理
    SQLServer 2008数据库查看死锁、堵塞的SQL语句
    SQLServer查询死锁
  • 原文地址:https://www.cnblogs.com/ximenchuifa/p/16022071.html
Copyright © 2020-2023  润新知