ADR 0007: 多言語対応 — 5 言語を見据えて設計し、2 言語を出荷する。残りはロケールパックとして提供
すべてのレイヤーにロケールの継ぎ目を通す。中国語 + 英語はコアで出荷・テストし、日本語 / イタリア語 / ドイツ語はコミュニティのロケールパックとして提供する。
ステータス: accepted · 日付: 2026-06-17
不変の記録。ドリフト追跡の対象外(
coversなし)。編集せず、置き換え(supersede)で対応すること。
0002 のプロダクト方針の一部。0003 によってゲートされる。
コンテキスト
目標は世界規模のユーザーベースである。まず中国語、最終的には中国語 / 英語 / 日本語 / イタリア語 / ドイツ語に対応する。「多言語対応」は多層的な概念である — 回答の言語、決定的な メッセージ文字列(現在は中国語がハードコードされている)、入力のパース、検索のトークナイズ (BM25 は CJK のユニグラム + バイグラム。日本語には本格的な分かち書きが必要で、イタリア語 / ドイツ語には ステミングが必要)、そして言語ごとの評価である。中国語のみで出荷すると、後の 5 言語展開に必要な抽象化を過小設計してしまうリスクがある。
決定
5 言語を見据えて設計し、2 言語を出荷する。 locale の継ぎ目を すべての レイヤーに通す —
トークナイザーレジストリ、メッセージカタログ、インテント語彙、プロンプトテンプレート — それぞれを
ロケールをキーとし、他のすべてと同様に Protocol でプラガブルにする。コアでは 中国語 +
英語 を出荷・テストする。第二言語を英語にしたのは意図的である。英語は OSS における共通語
(リンガフランカ)であり、非 CJK 言語であることから、トークナイザー / ステミング / 空白区切りの抽象化が
CJK 専用ではなく本物であることを強制するためである。日本語 / イタリア語 / ドイツ語は、コントリビューター向け
チェックリストを備えたコミュニティの ロケールパック として出荷する。
検討した代替案(不採用)
- 出力ロケールのみ / 薄い i18n(案 A):
localeが回答の言語とメッセージカタログのみを制御し、 入力 / トークナイズ / コーパスは変更しない。不採用 — 5 言語という目標に対して継ぎ目が 過小設計になる。 - 今すぐ全言語のパイプラインを完全にローカライズする(案 B): 5 言語すべてを直ちに 第一級として扱う。不採用 — 構築するのは継ぎ目と 2 つの参照ロケールであって、5 言語ではない。