Vue.js(vue-cli)でi18nライブラリを使わずに言語切り替えをする方法

ページ内で言語切り替えボタンを設置し、日本語⇄英語のようにする方法をメモをしておきます。
まずは、src/views/Lang.vueファイルを準備します。
//src/views/Lang.vue
<template>
<router-view></router-view>
</template>
<script>
export default {
watch: {
$route(route) {
switch (route.params.lang) {
case 'ja': <===== 日本語
case 'en': <===== 英語 //他の言語を追加するのは自由
break
default:
this.$router.replace({ path: '/ja/home' }) //デフォルトは日本語
}
},
},
}
</script>
次に、vue-routerをインストールし、src/router/index.jsファイルに以下を記述します。
//src/router/index.js
import Vue from 'vue'
import VueRouter from 'vue-router'
import Lang from '@/views/Lang.vue'
import Home from '@/views/Home.vue'
import Example1 from '@/views/Example1.vue'
import Example2 from '@/views/Example2.vue'
Vue.use(VueRouter)
const routes = [
{
path: '/:lang',
component: Lang,
children: [
{
path: '',
redirect: 'home', //<======== リダイレクトはホーム画面などが良い
},
{
path: 'example1',
component: Example1,
},
{
path: 'example2',
component: Example2,
},
{
path: '*',
redirect: '/ja/home',
},
}
]
const router = new VueRouter({
mode: 'history',
base: process.env.BASE_URL,
routes,
})
export default router
これによって、言語切り替えボタンを設置し、日本語⇄英語のように柔軟に対応することができるようになります。
以下はVuetifyによって実装したサンプルです。
<v-tabs>
<v-tab><router-link to="home">Home</router-link></v-tab>
<v-tab>
<v-icon>mdi-web</v-icon>
<template v-if="$route.params.lang == 'ja'"> <====== /ja/~~~のときに表示される
<router-link :to="en">ja</router-link> <======クリックしたら/en/~~~になる
</template>
<template v-if="$route.params.lang == 'en'"> <====== /en/~~~のときに表示される
<router-link :to="ja">en</router-link> <======クリックしたら/ja/~~~になる
</template>
</v-tab>
</v-tabs>
言語切り替えのボタンが設置できたら、コンテンツ内の文章やイメージ画像などにも適応させることが可能になります。
<template v-if="$route.params.lang == 'ja'">サンプル</template>
<template v-if="$route.params.lang == 'en'">sample</template>