# 言語管理と設定

表示言語（Locale）やプログラミング言語（Language）の追加・切り替えについて説明します。

---

## 1. CLI 表示言語の切り替え

CLI が出力するメッセージやエラー表示の言語を切り替えます。

```bash
atc lang [ja|en]
```
- 引数 `ja` または `en` を指定して、表示言語を変更します。
- 引数を省略した場合は、選択式の対話メニューが表示されます。

---

## 2. プログラミング言語の管理

プロジェクトで解答コードを書くためのプログラミング言語の設定とテンプレートの管理を行います。

```bash
atc language [add|default] [lang_id]
```
- エイリアス **`atc l`** も使用可能です。

### ① 新しいプログラミング言語の追加
```bash
atc language add [lang_id]
# 例: atc l add python
```
- `lang_id` は組み込み定義（`cpp`, `python`, `rust`, `typescript`, `javascript`, `c`）の他、任意の名前を指定して追加できます。
- 組み込み定義を追加した場合、自動的に拡張子、ビルドコマンド、実行コマンド、初期テンプレートコードが読み込まれ、設定されます。
- 未知の言語IDを指定した場合は、対話形式で拡張子やビルド/実行コマンドの入力を求められます。

### ② デフォルト言語の切り替え
```bash
atc language default [lang_id]
# 例: atc l default rust
```
- ワークスペースで新しく問題フォルダ（`atc new`）を作成する際のデフォルトのプログラミング言語を切り替えます。

---

## 3. 外部定義と言語プリセットの永続化

AtCoder Next では、デフォルトで組み込まれている言語設定の他に、ユーザー定義のグローバル設定を追加・永続化することができます。

- **言語プリセットのグローバルキャッシュ**: 
  新しく追加されたプログラミング言語の構成情報は、ホームディレクトリの `~/.atcoder-next/languages.json` に動的にキャッシュされます。
  これにより、別のワークスペース（`atc init`）を新しく作成した場合でも、過去に追加したカスタム言語の構成が自動的にプリセットとして再利用可能になります。
