IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue项目国际化配置 -> 正文阅读

[JavaScript知识库]vue项目国际化配置

国际化配置即多语言配置,使用到的插件是vue-i18n,本例中亦通过设置下拉选框,切换界面语言;

安装依赖

npm install vue-i18n@8.26.5 --save

亲测该版本有效~

在main.js中引入并尝试打印看下是否引入成功;

import VueI18n from 'vue-i18n'


console.log(VueI18n, 'VueI18n');

控制台输出则表明成功引入;

配置多语言文件

在项目asset目录下新建language/language文件夹,里面放置local_en.js和local_zh.js文件,

// local_zh.js
module.exports =  {
    "language": {
        "chinese": "中文",
        "english": "英文"
    },
    "menu": {
        "home": '首页',
        "ad_manage": '广告管理',
        "goods_manage": '货物管理'
    },
    "page": {
        "select_lang": "请选择所用语言"
    }
}
// local_en.js
module.exports =  {
    "language": {
        "chinese": "chinese",
        "english": "english"
    },
    "menu": {
        "home": "home",
        "ad_manage": "advertisement manage",
        "goods_manage": "goods manage"
    },
    "page": {
        "select_lang": "select language"
    }
}

在language文件夹下新建index.js文件,对上述两个文件利用i18配置;

import Vue from 'vue'
import VueI18n from 'vue-i18n'


Vue.use(VueI18n);
// 使用插件

const i18n = {
    locale: window.localStorage.getItem('info.lang') || 'zh', // 语言标识,第一次登录默认是中文
    messages: {
        zh: require('./language/local_zh'), // 汉语
        en: require('./language/local_en'), // 英语
        }
    }
    console.log(i18n.locale, 'locale');

export default i18n

在main.js中挂载i18n:

import i18n from './assets/language' // 引入多语言配置文件index.js

new Vue({
    el: '#app',
    router,
    i18n,
    components: { App },
    template: '<App/>',
    store
})

页面设置

配置完文件之后,就可以写相应页面并实现根据选择页面自动切换语言功能;

<template>
    <div>
        <div class="pageheader">
            <span>{{$t('page.select_lang')}}</span>
            <el-select v-model="form.lang" @change="change">
                <el-option :label="$t('language.chinese')" value="zh"></el-option>
                <el-option :label="$t('language.english')" value="en"></el-option>
            </el-select>
        </div>
        <div class="content">
            <router-view></router-view>
        </div>
    </div>
</template>

<script>
    export default {
        name: 'Pagecontent',
        props: ['iscollapse'],
        data() {
            return {
                form: {
                    lang: "zh"
                }

            };
        },
        methods: {
            changeMenu() {
                this.$emit('changeCollape')
                console.log(this);
                console.log('要改菜单了');
                console.log(this);
            },
            change() {
                console.log(localStorage.getItem('info.lang'));
                if (this.form.lang === 'en') {
                    this.$i18n.locale = 'en'
                } else {
                    this.$i18n.locale = 'zh'
                }
                localStorage.setItem('info.lang', this.$i18n.locale)
                console.log(this.$t('menu.home'))
                // 在js中这样使用
            },
        mounted() {

        },
    }
    }
</script>

<style scoped>
    .pageheader {
        margin-top: 0;
        background-color: rgb(174, 197, 197);
        height: 40px;
        margin-left: 200px;
        padding-top: 10px
        /* width: 100%; */
    }
    
    .content {
        margin-left: 200px;
    }
</style>

注意:

在模版字符串中要$t(''),在js中要这样使用:this.$t('')

若遇到如下情况:

"phone.title": "您确定要将设备'{phonename}'设为公开吗"

则替换时应:

title: this.$t('phone.title', {phonename: this.info.name}), 
// js中格式
// 其中,this.info.name就是js中变量

若控制台中出现多处警告,如下:

可通过在language/index文件中设置silentTranslationWarn: true即可

const i18n = new VueI18n({
  locale: lang, // set locale
  messages, // set locale messages
  silentTranslationWarn: true
});

若用在filter下提示$t未定义,是因为this未定义的原因,可在data中设置全局变量:that: this,在过滤器中传入that参数,通过that.$t()正常操作即可:

<span>{{ Data[key] | format(key, that) }}</span>
// html部分

// js部分
data () {
    return {
      that: this
    // 定义that接收this
    }
  },
filters: {
    format (value, key, that) {
      return key === 'throughput'  ? that.$t('money.throughput') : none
    }
  }

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-26 15:16:28  更:2022-05-26 15:16:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年5日历 -2025/5/3 2:26:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码