翻訳ファイル構造
22.2.1. ファイル構造
翻訳ファイルは言語別、ネームスペース別に分離して管理しなければなりません。
src/locales/
├── ko/ # 韓国語
│ ├── common.json
│ ├── pages.json
│ ├── components.json
│ └── validation.json
├── en/ # 英語
│ └── (同一構造)
└── ja/ # 日本語
└── (同一構造)- 翻訳ファイルは
src/locales/{lang}/{namespace}.jsonパスに配置しなければなりません。 - 各言語ディレクトリは同一のネームスペースファイル構造を維持しなければなりません。
- 単一ファイルにすべての翻訳を入れず、ネームスペース別に分離して保守性を確保しなければなりません。
- JSON フォーマットを使用しなければなりません。YAML など他のフォーマットは許容されません。
22.2.2. キー命名規則
翻訳キーは一貫した命名規則に従わなければなりません。
| 規則 | 説明 | 例 |
|---|---|---|
| ドット記法 | 階層構造をドットで区切る | pages.user.title |
| camelCase | 個別の単語を区切る | errorMessage、submitButton |
| 意味ベース | UI の位置ではなく意味を基準に命名 | validation.required |
json
{
"pages": {
"user": {
"title": "ユーザー管理",
"empty": "登録されたユーザーがいません。"
},
"dashboard": {
"title": "ダッシュボード",
"welcome": "ようこそ、{name}さん。"
}
}
}- キー名は camelCase を使用しなければなりません。snake_case または kebab-case は使用しません。
- キー名は該当テキストの意味を反映しなければなりません。UI の位置(
leftSidebarTitle)を基準に命名しません。 - 動的な値は中括弧(
{name})を使用した補間構文で処理します。 - キーの深さは最大 4 階層まで許容します。それ以上のネストが必要な場合はネームスペースを分離しなければなりません。
22.2.3. ネームスペース
以下の標準ネームスペースを使用して翻訳キーを分類しなければなりません。
| ネームスペース | 用途 | 例 |
|---|---|---|
common | 共通 UI 要素(ボタン、ラベル、ステータス) | common.save、common.cancel |
pages | ページ固有のテキスト | pages.login.title |
components | 共用コンポーネント内のテキスト | components.modal.close |
validation | フォームバリデーションメッセージ | validation.required |
error | エラーメッセージ | error.notFound、error.serverError |
- 複数のページで共通して使用するテキストは必ず
commonネームスペースに定義しなければなりません。 - 特定のページでのみ使用するテキストは
pagesネームスペースに定義します。 - プロジェクト規模に応じてネームスペースを追加できますが、標準ネームスペースの用途を変更してはなりません。
22.2.4. 複数形処理
複数形が必要なテキストは vue-i18n の複数形構文を使用して処理しなければなりません。
json
{
"items": "項目なし | {count}件の項目 | {count}件の項目"
}vue
<template>
<p>{{ $t('items', { count: itemCount }, itemCount) }}</p>
</template>- 複数形の区切りはパイプ(
|)で区切ります。順序はなし | 単数 | 複数です。 - 韓国語は複数形の区別がないため、単数と複数を同一に記述します。
- 英語の翻訳ファイルでは単数(
{count} item)と複数({count} items)を区別して記述しなければなりません。 - 数値 0 に対する別途の表現が必要な場合、3 つの形態をすべて定義します。
- 複数形規則が複雑な言語(アラビア語など)を追加サポートする場合、vue-i18n の
pluralRulesオプションを設定しなければなりません。