在Vue中加入國際化(i18n)功能

1. 需要用到的庫

npm install vue vue-i18n --save

2. 配置 & 使用

常規(guī)的教程和問題,在這里就不贅述了,可以去官網(wǎng)查看文檔添祸。這里主要說一下,官方文檔里沒提到的寻仗。

官方文檔中使用的方法刃泌,并不是現(xiàn)在流行的vue單文件組件,即采用.vue格式的文件署尤。我們現(xiàn)在一般會(huì)使用vue-cli直接生成vue工程耙替,并通過webpack打包整個(gè)工程,最后在頁面中引入打包后的文件曹体。所以我下面說的俗扇,就是如何在這種模式下引入國際化功能。

眾所周知箕别,webpack會(huì)有一個(gè)入口文件(我們暫且命名為main.js)铜幽,入口文件也是vue初始化的場所滞谢,基本寫法如下

// main.js
import Vue from 'vue'
import App from './App'

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

下面我們參考官方文檔,把vue-i18n加到工程里面

// main.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import App from './App'

const i18n = new VueI18n({
  locale: 'zh',
  messages: { ... } // 省略具體內(nèi)容
})

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

然后我們編譯工程除抛,并在瀏覽器中運(yùn)行狮杨,結(jié)果 ... 報(bào)錯(cuò)了!控制臺(tái)會(huì)打出如下信息

Uncaught TypeError: Cannot read property 'config' of undefined

跟蹤代碼镶殷,會(huì)發(fā)現(xiàn)錯(cuò)誤是出在vue-i18n.js中禾酱,具體位置如下

// vue-i18n.js
VueI18n.prototype._initVM = function _initVM (data) {
  var silent = Vue.config.silent; // 這行報(bào)錯(cuò)了!;媲鳌颤陶!
  Vue.config.silent = true;
  this._vm = new Vue({ data: data });
  Vue.config.silent = silent;
};

報(bào)錯(cuò)的原因正如上面提到的,Vue的取值是undefined陷遮。這個(gè)現(xiàn)象不難理解滓走,webpack打包后的文件是作為閉包處理的,外部js的取不到值實(shí)屬正常帽馋。既然知道原因了搅方,那解決方法就不難找到了。這里采用一種最簡單的方法绽族,直接把Vue對(duì)象掛載到外面去姨涡,在main.js中加入window.Vue = Vue語句,完整代碼

// main.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'
import App from './App'

window.Vue = Vue // 要在vue-i18n實(shí)例化之前執(zhí)行

const i18n = new VueI18n({
  locale: 'zh',
  messages: { ... } // 省略具體內(nèi)容
})

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

還有一種方法比較優(yōu)雅吧慢,就是把window.Vue = Vue替換成Vue.use(vue-i18n)涛漂,代碼就不貼了。

3. 切換語言

.vue中執(zhí)行下面的方法即可切換

{
  // 其余配置略
  methods: {
    handleChangeLang() {
      this.$i18n.locale = 'en'
    }
  }
}

4. 其他

由于也是第一次使用检诗,現(xiàn)在唯一擔(dān)心的就是當(dāng)工程很大的時(shí)候切換會(huì)不會(huì)卡頓匈仗,后期需要關(guān)注一下。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逢慌,一起剝皮案震驚了整個(gè)濱河市悠轩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌攻泼,老刑警劉巖火架,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異坠韩,居然都是意外死亡距潘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門只搁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來音比,“玉大人,你說我怎么就攤上這事氢惋《呆妫” “怎么了稽犁?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骚亿。 經(jīng)常有香客問我已亥,道長,這世上最難降的妖魔是什么来屠? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任虑椎,我火速辦了婚禮,結(jié)果婚禮上俱笛,老公的妹妹穿的比我還像新娘捆姜。我一直安慰自己,他們只是感情好迎膜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布泥技。 她就那樣靜靜地躺著,像睡著了一般磕仅。 火紅的嫁衣襯著肌膚如雪珊豹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天榕订,我揣著相機(jī)與錄音店茶,去河邊找鬼。 笑死劫恒,一個(gè)胖子當(dāng)著我的面吹牛忽妒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播兼贸,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吃溅!你這毒婦竟也來了溶诞?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤决侈,失蹤者是張志新(化名)和其女友劉穎螺垢,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赖歌,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枉圃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庐冯。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片孽亲。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖展父,靈堂內(nèi)的尸體忽然破棺而出返劲,到底是詐尸還是另有隱情玲昧,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布篮绿,位于F島的核電站孵延,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏亲配。R本人自食惡果不足惜尘应,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吼虎。 院中可真熱鬧犬钢,春花似錦、人聲如沸鲸睛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽官辈。三九已至箱舞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拳亿,已是汗流浹背晴股。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留肺魁,地道東北人电湘。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像鹅经,于是被迫代替她去往敵國和親寂呛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容