uniapp vue-i18n用法

1、引入i18n插件依赖

npm install vue-i18n --save

安装后存放位置在:node_modules目录下

2、在根目录下设置i18n文件夹,目录如下

├── i18n │   
├── common │   
│ ├── en.js │   
│ ├── zh.js │   
├── index.js

index.js代码如下

import VueI18n from 'vue-i18n' 
import Vue from 'vue' 
import zh from './common/zh.js' 
import en from './common/en.js' 
Vue.use(VueI18n) 
export default new VueI18n({ 
    locale:uni.getStorageSync('locale') ? uni.getStorageSync('locale') :'en',
    messages:{ 
        'en':en, 
        'zh':zh, 
   }
})

zh.js代码如下

export default { 
    common:[ //抽屉导航
        {'text1':'首页'},
        {'text2':'分类'},
        {'text3':'购物车'},
        {'text4':'我的'},
    ],
    index:[
      {'text1':"分类"},
      {'text2':"更多"}
    ],
    message:{
        'confirmDel':'确定删除吗?',
        'loginLoading':'正在登录中',
    }
 }

3、在main.js中配置i18n,将插件注入到实例中

import App from './App'
import Json from './Json' //测试用数据
import store from './store' //引入状态管理store
import i18n from './i18n/index.js' //引入国际化,多语言

// #ifndef VUE3
import Vue from 'vue'
Vue.config.productionTip = false
Vue.prototype.$api = {Json}
Vue.prototype.$store = store

App.mpType = 'app'

Vue.prototype._i18n = i18n //设置全局变量

const app = new Vue({
    store,
    i18n,
    ...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
  const app = createSSRApp(App)
  return {
    store,
    i18n,
    app
  }
}
// #endif

页面模板中使用 $t() 获取,并传递国际化json文件中定义的key,js中使用 this.$t('')

//直接调用
{{$t("index.text1")}}
{{$t('ucinfo.text2')}}

//在标签中调佣

//在标签函数中调佣


//在data中调用,注意要用双引号,不要用单引号
title: this.$t("ucinfo.text9"),

如果引用的了子组件,子组件刷新问题(子组件显示实时数据)解决办法如下


//设置
sonReset:true
//实时刷新,可以放在 onShow中,也可以放在methods的函数中
this.sonReset = false
this.$nextTick(()=>{
    this.sonReset = true
})

首页更换语言动态设置修改头部标题和tabBar

//首页

              
     
//
data() {
    return {                
        lang:'',//语言
        range:[
            { value: 'zh', text: "简体中文" },
            { value: 'en', text: "English" },
        ],//语言类型
        sonReset:true,//组件重新加载标致
    }
},
methods: {
    //选择语言
    changeCurrency(e){
        console.log(e)
        this._i18n.locale = e;
        //设置缓存
        uni.setStorageSync('locale', e)
        //获取缓存
        this.lang = uni.getStorageSync('locale')
        this.sonReset = false
        this.$nextTick(()=>{
            this.sonReset = true
        })
        //动态修改头部和tabBar
        this.setTitle()
    },
    setTitle(){
        //uni.setNavigationBarTitle({
            // 修改头部标题
        //    title:this.$t('common.text1'),
            //console.log(this.$i18n.locale)
        //})
        uni.setTabBarItem({
            // 修改底部导航
            index: 0,
            text: this.$t('common.text1'),
        });
        uni.setTabBarItem({
            // 修改底部导航
            index: 1,
            text: this.$t('common.text3'),
        });
        uni.setTabBarItem({
            // 修改底部导航
            index: 2,
            text: this.$t('common.text11'),
        });
        uni.setTabBarItem({
            // 修改底部导航
            index: 3,
            text: this.$t('common.text4'),
        });
    },
}

其他页面更换语言动态设置修改头部标题

onLoad() {
    this.setTitle() //设置头部
},
methods: {
    //设置头部
    setTitle(){
        uni.setNavigationBarTitle({
            //修改头部标题
            title:this.$t('pages.text3'),
        })
    },
}

你可能感兴趣的:(vue.js,uni-app,javascript)