Vue I18nは、Vueアプリケーションを国際化(多言語対応)させるためのプラグインです。簡単なVueアプリケーションで、このプラグインを試してみましょう。
01 Vueプロジェクトのひな形作成とVue I18nのインストール
ひな形にするプロジェクトは、Vue CLIを用いて単一ファイルコンポーネントとしてつくることにします(「Vue CLI 3入門」参照)。コマンドラインツールから、vue create
につづけてプロジェクト名(今回はvue-i18n-test
)を打ち込めば、その名前のフォルダにファイルがつくられます。
vue create vue-i18n-test
プロジェクトのディレクトリに切り替えて、つぎのnpm run
コマンドを入力すると、ひな形のプロジェクトがローカルサーバーで起ち上がります(図001)。
cd vue-i18n-test
npm run serve
図001■ ローカルサーバーで開いたプロジェクトのひな形ページ
つぎに、vue-i18n
をnpmでインストールします(「Installation」参照)。
npm install vue-i18n
02 Vue I18nで日本語テキストに切り替える
Vue I18nの設定は、モジュールjs:src/main.js
に定めます。VueI18n
をimport
したうえで、プラグインをVueにインストールするのが、Vue.use()
メソッドです。日英のテキストは、それぞれja
とen
というプロパティに納め、変数(messages
)にとっておきましょう。VueI18n
のコンストラクタには、プロパティlocale
とmessages
を加えた引数オブジェクトが渡されます。そして、Vue()
コンストラクタの引数オブジェクトには、オプションi18n
を添えてください(「Getting started」の「JavaScript」参照)。
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
const messages = {
en: {
message: {
welcome: 'Welcome to Your Vue.js App',
}
},
ja: {
message: {
welcome: 'Vue.jsアプリケーションへようこそ',
}
}
}
const i18n = new VueI18n({
locale: 'ja',
messages,
})
new Vue({
render: h => h(App),
i18n
}).$mount('#app')
コンポーネントsrc/components/HelloWorld.vue
のテンプレートは、二重波かっこ{{}}
の中で$t
メソッドによりロケールに応じたテキストが得られるのです(「Formatting」参照)。locale
プロパティの値は、'ja'
としましたので、日本語テキストが示されます(図002)。
<template>
<div class="hello">
<h1>{{$t("message.welcome")}}</h1>
</template>
図002■日本語化されたテキスト
03 ロケールを切り替える
locale
プロパティの値は、切り替えられます。ボタンで試してみましょう。ボタンの表記も変えたいので、モジュールsrc/main.js
の変数に、つぎのようにテキストを加えてください。
const messages = {
en: {
message: {
change_locale: 'Change Locale'
}
},
ja: {
message: {
change_locale: 'ロケール変更'
}
}
}
コンポーネントsrc/components/HelloWorld.vue
のテンプレートにボタンとその表記を追加します。@click
イベントのハンドラメソッド(changeLocale()
)は、親コンポーネントにイベント(change-locale
)を$emit()
メソッドで送るだけです。
<template>
<div class="hello">
<div>
<button type="button" @click="changeLocale">
{{$t("message.change_locale")}}
</button>
</div>
</div>
</template>
<script>
export default {
methods: {
changeLocale() {
this.$emit('change-locale');
}
}
}
</script>
イベント(change-locale
)を受け取った親コンポーネントは、locale
プロパティの値を切り替えます(「Locale changing」参照)。なお、$i18n
はVueI18n
インスタンスを参照するプロパティです。これで、テキストの日英切り替えができます。
<template>
<div id="app">
<HelloWorld @change-locale="changeLocale" />
</div>
</template>
<script>
export default {
methods: {
changeLocale() {
this.$i18n.locale = (this.$i18n.locale === 'ja') ? 'en' : 'ja';
}
}
}
</script>
コードと動きが確かめられるように、サンプル001をCodeSandboxに公開しました。なお、このサンプルはBootstrapVueも試しに使っています。