6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vuex の store 内で i18n を使う

Last updated at Posted at 2019-01-30

store で何らかの文字列を持ちたいとき、store にベタ書きしたくないなあと思い調べました

プロジェクトのセットアップと vuex, vue-i18n のインストール

$ npm install -g vue-cli
$ vue init webpack lion_project
$ cd lion_project/
$ npm i -s vuex vue-i18n

vue-i18n のファイル作成

フォルダ名や json のファイル名は何でも良いです
今回は src/lang 下に作成します

$ mkdir src/lang
src/lang/index.js
import Vue from 'vue'
import VueI18n from 'vue-i18n'

const messages = require('@/lang/messages.json')

Vue.use(VueI18n)

export default new VueI18n({
  locale: 'ja',
  messages
})
src/lang/messages.json
{
  "ja": {
    "message": {
      "lion": "A big suprise of a beer!"
    }
  }
}

vuex のファイル作成

src/store 下に作成します

$ mkdir -p src/store/modules
src/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'

import message from '@/store/modules/message'

Vue.use(Vuex)

export default new Vuex.Store({
  modules: {
    message
  }
})
src/store/modules/message.js
import i18n from '@/lang'

export default {
  namespaced: true,
  state: {
    info: ''
  },
  mutations: {
    create (state, info) {
      state.info = info
    }
  },
  actions: {
    create ({ commit }) {
      // src/lang/messages.json から文言を取得
      commit('create', i18n.tc('message.lion'))
    }
  }
}

main.js に store と lang を追加

src/main.js
// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store' // 追加
import lang from './lang' // 追加

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  store, // 追加
  i18n: lang, // 追加
  components: { App },
  template: '<App/>'
})

HelloWorld.vue を変更

間借りして表示確認します
script の部分だけ変更します
抜粋です

src/components/HelloWorld.vue
<script>
export default {
  name: 'HelloWorld',
  computed: {
    msg () {
      // store/modules/message.js の info の値を取得
      return this.$store.state.message.info
    }
  },
  mounted: function () {
    // store/modules/message.js の create をコールして message.lion をセット
    this.$store.dispatch('message/create')
  }
}
</script>

動作確認

$ npm run dev

Hello World の代わりに A big suprise of a beer! が表示されていることを確認します

Screen_Shot_2019-01-30_at_10_23_42.png

参考記事

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?