# 機能設計書 84-中国語ドキュメント

## 概要

本ドキュメントは、space-vimの中国語ドキュメント機能（chinese）の設計について記述する。この機能は、VimのヘルプドキュメントとGUI環境での中国語サポートを提供する。

### 本機能の処理概要

**業務上の目的・背景**：中国語圏のVimユーザーにとって、英語のみのヘルプドキュメントは学習の障壁となる。本機能は中国語翻訳されたVimヘルプドキュメント（vimcdoc）を提供し、Vimの学習効率を向上させる。また、GUI環境（GVim等）で発生しやすい中国語の文字化け問題を解決し、中国語環境でのスムーズな開発体験を提供する。

**機能の利用シーン**：中国語環境でVimを使用する際、`:help`コマンドで中国語ヘルプを参照したい場面、GUIでメニューやダイアログを中国語表示したい場面、中国語を含むファイルを編集する際のエンコーディング問題を回避したい場面で利用される。

**主要な処理内容**：
1. `+misc/chinese`レイヤーの有効化によりvimcdocプラグインをロード
2. GUI環境の場合、言語設定とフォント設定を適用
3. メニューバーの文字化け解消のためmenu.vimを再読み込み
4. OS別の最適なフォント設定を適用

**関連システム・外部連携**：yianwillis/vimcdocプラグインとの連携。システムの言語設定（LANG環境変数）との連動。

**権限による制御**：特になし。レイヤーが有効化されていればすべてのユーザーが利用可能。

## 関連画面

| 画面No | 画面名 | 関連種別 | 関連する操作・処理 |
|--------|--------|----------|------------------|
| 20 | Help（ヘルプ画面） | 補助機能 | vimcdocによる中国語ヘルプの表示 |

## 機能種別

ローカライゼーション / 国際化対応

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | 説明 | バリデーション |
|-------------|-----|-----|------|---------------|
| g:spacevim.gui | Boolean | Yes | GUIモードかどうか | true/false |
| g:spacevim.os.windows | Boolean | No | Windowsかどうか | true/false |
| g:spacevim.os.mac | Boolean | No | macOSかどうか | true/false |

### 入力データソース

- space-vimのグローバル設定（g:spacevim）
- システム環境変数（LANG）
- VIMRUNTIMEパス

## 出力仕様

### 出力データ

| 項目名 | 型 | 説明 |
|--------|-----|------|
| 言語設定 | String | zh_CN.UTF-8またはシステムデフォルト |
| メニュー言語 | String | zh_CNまたはシステムデフォルト |
| フォント設定 | String | OS別の最適フォント |

### 出力先

- Vimのグローバル設定（&langmenu, &guifont等）
- メニューバー表示

## 処理フロー

### 処理シーケンス

```
1. GUI判定
   └─ g:spacevim.guiがtrueかチェック
2. 言語設定（GUI環境のみ）
   └─ $LANG = 'zh_CN.UTF-8'
   └─ set langmenu=zh_CN
3. メニュー再読み込み
   └─ source $VIMRUNTIME/delmenu.vim
   └─ source $VIMRUNTIME/menu.vim
4. OS別フォント設定
   └─ Windowsの場合: Consolas:h13
   └─ macOSの場合: Source Code Pro for Powerline:h12
```

### フローチャート

```mermaid
flowchart TD
    A[レイヤー読み込み] --> B{GUIモード?}
    B -->|Yes| C[言語設定 zh_CN.UTF-8]
    B -->|No| Z[処理終了]
    C --> D[langmenu設定]
    D --> E[delmenu.vim実行]
    E --> F[menu.vim実行]
    F --> G{Windows?}
    G -->|Yes| H[Consolasフォント設定]
    G -->|No| I{macOS?}
    I -->|Yes| J[Source Code Proフォント設定]
    I -->|No| K[デフォルト設定]
    H --> L[設定完了]
    J --> L
    K --> L
```

## ビジネスルール

### 業務ルール

| ルールNo | ルール名 | 内容 | 適用条件 |
|---------|---------|------|---------|
| BR-84-1 | GUI限定設定 | 言語・フォント設定はGUI環境のみ適用 | g:spacevim.gui == true |
| BR-84-2 | OS別フォント | OS毎に最適なフォントを選択 | Windows/macOS判定 |
| BR-84-3 | メニュー再構築 | delmenu→menuの順で実行し文字化け解消 | GUI環境 |
| BR-84-4 | vimcdoc即時ロード | ヘルプ参照のため起動時にロード | packages.vim登録時 |

### 計算ロジック

特になし

## データベース操作仕様

本機能はデータベース操作を行わない。

### 操作別データベース影響一覧

該当なし

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| - | プラグイン未インストール | vimcdocがインストールされていない | :PlugInstallを実行 |
| - | レイヤー無効 | chineseレイヤーが有効化されていない | ~/.spacevimでLayer 'chinese'を追加 |
| - | フォント未インストール | 指定フォントがシステムにない | 該当フォントをインストール |

### リトライ仕様

リトライは不要。エラー発生時はユーザーが設定を修正して再度Vimを起動する。

## トランザクション仕様

該当なし（ファイルシステムやDBへの永続化を伴わない）

## パフォーマンス要件

- 起動時の設定適用は即座に完了すること
- ヘルプ表示の速度に影響を与えないこと

## セキュリティ考慮事項

- 外部通信を行わないため、セキュリティリスクは最小限
- システム設定を変更するが、Vimセッション内に限定

## 備考

- vimcdocは有志による中国語翻訳プロジェクト
- Windowsでは「language messages zh_CN.utf-8」でコンソール出力の文字化けも解消
- GUIモード以外では設定がスキップされるため、ターミナルVimでは影響なし

---

## コードリーディングガイド

本機能を理解するために参照すべきファイルと、推奨する読み解き順序を以下に示す。

### 推奨読解順序

#### Step 1: データ構造を理解する

本機能はVimのグローバル変数（g:spacevim）を参照して動作を決定する。

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 1-1 | config.vim | `layers/+misc/chinese/config.vim` | g:spacevim変数の参照方法 |

**読解のコツ**: `g:spacevim.gui`はspace-vimのブートストラップ時に設定されるグローバル辞書。GUI/CUI判定やOS判定に使用される。

#### Step 2: エントリーポイントを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 2-1 | packages.vim | `layers/+misc/chinese/packages.vim` | プラグイン登録 |
| 2-2 | config.vim | `layers/+misc/chinese/config.vim` | 設定ロジック |

**主要処理フロー**:
1. **packages.vim 1行目**: `MP 'yianwillis/vimcdoc'` - vimcdocプラグイン登録

#### Step 3: 設定ロジックを理解する

| 順序 | ファイル | パス | 読解ポイント |
|-----|---------|------|-------------|
| 3-1 | config.vim | `layers/+misc/chinese/config.vim` | OS別・GUI別の設定分岐 |

**主要処理フロー**:
- **1行目**: `scriptencoding utf-8` - スクリプトエンコーディング指定
- **3行目**: `if g:spacevim.gui` - GUIモード判定
- **5-6行目**: 言語設定（$LANG, langmenu）
- **7-9行目**: メニュー再読み込み
- **11-18行目**: Windowsの場合の設定
- **19-22行目**: macOSの場合の設定

### プログラム呼び出し階層図

```
vim起動
    │
    ├─ spacevim#bootstrap()
    │      └─ g:spacevim辞書の初期化
    │             └─ gui, os.windows, os.mac等を設定
    │
    └─ レイヤー読み込み
           └─ layers/+misc/chinese/packages.vim
           │      └─ vimcdocプラグイン登録
           └─ layers/+misc/chinese/config.vim
                  └─ GUI判定
                         └─ 言語設定
                         └─ メニュー再読み込み
                         └─ OS別フォント設定
```

### データフロー図

```
[入力]                    [処理]                         [出力]

g:spacevim.gui      config.vim設定処理           Vim設定変更
g:spacevim.os   ──▶  条件分岐・設定適用  ──▶  &langmenu, &guifont
$VIMRUNTIME                                      メニュー再構築
```

### 関連ファイル一覧

| ファイル | パス | 種別 | 役割 |
|---------|------|------|------|
| packages.vim | `layers/+misc/chinese/packages.vim` | ソース | プラグイン登録 |
| config.vim | `layers/+misc/chinese/config.vim` | ソース | 言語・フォント設定 |
| README.md | `layers/+misc/chinese/README.md` | ドキュメント | レイヤー説明 |
| help.vim | `core/ftplugin/help.vim` | ソース | ヘルプ画面の設定 |
