vue-i18n國際化在data中切換不起做用

vue-i18n是一個針對於vue的國際化插件,使用很是簡單,具體使用方式看我細細道來。vue

實現方式

1. 下載包
npm install vue-i18n
2. 配置

在main.js文件中加入以下配置npm

// 引入插件和語言包
import VueI18n from 'vue-i18n' import zh from '@/i18n/langs/zh' import en from '@/i18n/langs/en' Vue.use(VueI18n) //實例化vue-i18n
const i18n = new VueI18n({ // 從本地存儲中取,若是沒有默認爲中文, // 這樣能夠解決切換語言後,沒記住選擇的語言,刷新頁面後仍是默認的語言
  locale: localStorage.getItem('lang') || 'zh', messages: { 'zh': zh, // 中文語言包
    'en': en // 英文語言包
 } }) // 將i18n實例掛載到vue上
new Vue({ el: '#app', i18n, router, store, template: '<App/>', components: { App } })
3. 建立中、英文包文件
建立兩個文件,一個爲zh.js表明中文,en.js表明英文,具體內容格式以下
//zh.js
export default { nav: { home: '首頁', monitor: '監控', analyze: '分析', alarm: '報警', maintenance: '運維', config: '配置', device: '設備', scada: '畫面' }, confirm: { ok: '確認', cancel: '取消', content: '你確認要退出系統嗎?', logout: '退 出' }, }
//en.js
export default { nav: { home: 'Home', //首頁
    monitor: 'Monitor', //監控
    analyze: 'Analyze', //分析
    alarm: 'Alarm', // 報警
    maintenance: 'Maintenance', //運維
    config: 'Config', //配置
    device: 'Device', //設備
    scada: 'Scada' //畫面
 }, confirm: { ok: 'Logout', //退出
    cancel: 'Cancel', //取消
    content: 'Are you sure you want to quit the system?', //你確認要退出系統嗎
    logout: 'Logout' //  } }
4. 在組件中使用

咱們先看vue-i18n的模板語法element-ui

//第一種
<span v-text="$t('nav.home')"></span>

//第二種
<span>{{$t('nav.home')}}</span>
5. 如何切換中英文

關於這點,vue-i18n給咱們提供了一個全局變量locale,經過他咱們能夠查看當前使用的語言,也能夠經過他改變當前使用的語言;數組

具體用法:app

// 查看當前使用的語言
console.log(this.$i18n.locale) // 改變當前使用的語言
this.$i18n.locale = 'en'  // 將當前使用的語言切換到英文

通常在項目中,咱們會使用以下方式切換語言運維

// 切換語言按鈕
<v-list-tile  @click="onChangeLang">
  <v-list-tile-title>中文 / EN</v-list-tile-title>
</v-list-tile>
<v-list-tile  @click="onLogOutClick">
  <v-list-tile-title >{{$t('confirm.logout')}}</v-list-tile-title>
</v-list-tile>


// 切換方法onChangeLang的處理, 這裏的彈出框是element-ui的組件
onChangeLang() { this.$confirm(this.$t('changeLang.content'), this.$t('changeLang.tip'), { confirmButtonText: this.$t('changeLang.ok'), cancelButtonText: this.$t('confirm.cancel'), type: 'warning' }) .then(() => { let lang = this.$i18n.locale if (lang === 'zh') { this.$i18n.locale = 'en'
        // 對應main.js配置文件中的localStorage的get方法
        localStorage.setItem('lang', this.lang) } else { this.$i18n.locale = 'zh' localStorage.setItem('lang', this.lang) } }) .catch(() => {}) }

可能會遇到的問題

1. 記不住切換後的語言

就是咱們切換語言後,刷新又是默認語言,這點咱們在上面已經用本地存儲localStorage解決了;ui

2. 將this.$t() 寫到了data屬性裏,切換語言不起做用
data是一次性生產的,你這麼寫只能是在 data 初始化的時候拿到這些被國際化的值,並不能響應變化。

官方的解決辦法是,建議咱們將表達式寫到computed屬性裏,不要寫到datathis

3. 後臺獲取過來的動態數據,在切換國際語言後不起做用

在witch中監聽 i18n語言變化,從新調取接口。spa

 

 

4. 注意拷貝後數組中的數據,在切換國際化時無論用,由於淺複製只拷貝了以前沒變的數據。
部份內容摘自:做者:LeonWuV 
來源:CSDN 
https://blog.csdn.net/wxl1555/article/details/85112530
相關文章
相關標籤/搜索