単一ファイルコンポーネント
基本的な使用方法
Vueコンポーネントまたは単一ファイルコンポーネントを使用してVueアプリケーションを構築している場合、i18nカスタムブロックを使用してロケールメッセージを管理できます。
以下の単一ファイルコンポーネントの例を参照してください:
<script>
export default {
name: 'App'
}
</script>
<template>
<label for="locale">locale</label>
<select v-model="$i18n.locale">
<option>en</option>
<option>ja</option>
</select>
<p>message: {{ $t('hello') }}</p>
</template>
<i18n>
{
"en": {
"hello": "hello world!"
},
"ja": {
"hello": "こんにちは、世界!"
}
}
</i18n>i18nカスタムブロックにおいて、ロケールメッセージリソースの形式はデフォルトでJSON形式となっています。
i18nカスタムブロックで定義されたロケールメッセージは、単一ファイルコンポーネントのローカルスコープとして使用されます。
テンプレート内で$t('hello')が使用されている場合、i18nカスタムブロックで定義されたhelloキーが参照されます。
注意
Composition APIでは、useI18nはsetupコンテキストを返す必要があります。これは、i18nカスタムブロックで定義されたロケールメッセージを基準にローカライズするためです。
useI18nの使い方については、Composition APIを参照してください。
i18nカスタムブロックを使用するには、バンドラ用の以下のプラグインが必要です。
Viteでのバンドル
unplugin-vue-i18n
unpluginは、vite、webpack、rollup、esbuildなどのバンドルツール向けの統一プラグインシステムです。
viteおよびwebpack用のunplugin-vue-i18nです。
必須条件
- vite: v3以降
- @vitejs/plugin-vue: v3.2.0以降
インストール
npm install @intlify/unplugin-vue-i18n -Dyarn add @intlify/unplugin-vue-i18n -Dpnpm add -D @intlify/unplugin-vue-i18nVite用のプラグイン設定
// vite.config.ts
import { defineConfig } from 'vite'
import { resolve, dirname } from 'node:path'
import { fileURLToPath } from 'node:url'
import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
export default defineConfig({
/* ... */
plugins: [
/* ... */
VueI18nPlugin({
/* オプション */
// ロケールメッセージリソースの事前コンパイルオプション
include: resolve(dirname(fileURLToPath(import.meta.url)), './path/to/src/locales/**'),
}),
],
})Webpack用のプラグイン設定
// webpack.config.js
const path = require('path')
const VueI18nPlugin = require('@intlify/unplugin-vue-i18n/webpack')
module.exports = {
/* ... */
plugins: [
/* ... */
VueI18nPlugin({
/* オプション */
// ロケールメッセージリソースの事前コンパイルオプション
include: path.resolve(__dirname, './path/to/src/locales/**'),
})
]
}Quasar CLI
Quasar CLIプロジェクトの単一ファイルコンポーネント内に<i18n>タグを追加するサポートを追加したい場合は、既存の設定を変更する必要があります。
そのためには、プロジェクトのルートにあるquasar.conf.jsを編集する必要があります:
{
chain => {
chain.module
.rule('i18n-resource')
.test(/\.(json5?|ya?ml)$/)
.include.add(path.resolve(__dirname, './src/i18n'))
.end()
.type('javascript/auto')
.use('i18n-resource')
.loader('@intlify/vue-i18n-loader')
chain.module
.rule('i18n')
.resourceQuery(/blockType=i18n/)
.type('javascript/auto')
.use('i18n')
.loader('@intlify/vue-i18n-loader')
}
}また、@intlify/vue-i18n-loaderがインストールされていることを確認する必要があります:
npm install @intlify/vue-i18n-loader -Dyarn add @intlify/vue-i18n-loader -Dpnpm add -D @intlify/vue-i18n-loader