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
    }
  }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迷糊的小小淘

整理不易,赏点动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值