レジデント準備完了 静的コンパニオン
kari_mikumao 研究室

Tooling

Mirai Guide:翻訳CMSなしで三言語を出す

音を立てて失敗するUIカタログ、構造のi18nカラム、レビュー付きモデル翻訳という三層。

  • mirai-guide
  • ローカライズ
  • i18n

Mirai Guideは1つのデプロイから日本語・英語・中国語を提供します。ローカライズは、正しさの保証が異なる三層に分かれています。インターフェース文字列、会場構造、抽出されたカタログテキストは、それぞれ違う壊れ方をするからです。

第1層:音を立てて失敗するUIカタログ

インターフェース文字列はロケールごとのJSONカタログにあり、ビルド時に一括バンドルされます。カタログをコミットせずにロケールを有効化するとビルドが失敗し、未定義の文字列が描画されることはありません。t()はキー単位で日本語へフォールバックします。ロケールレジストリは、バンドル済み言語のうちどれを来場者に公開するかを決めますが、カタログの裏付けがない言語を作り出すことはできません。

仕上がりを支える2つの細部:

  • テンプレート文字列は連結ではなく{name}プレースホルダー補間を使い、語順は常にロケールごとの翻訳判断のままです。
  • 中国語の表示グループ化は明示的です。両方の変種が有効なら選択肢は「簡」と「繁」。zhが単独でも「中文」ではなく「簡」と表示され、裏に選択肢のない見せかけをしません。

第2層:構造名はi18nカラム

会場や構造の名前は、データベースレベルで検証されるJSONのi18nオブジェクト({ ja, en, zh })として保存され、日本語が正の原文です。表示はUIと同じフォールバック連鎖で解決されるため、欠けた翻訳は日本語に劣化し、空のラベルにはなりません。

第3層:カタログのレビュー付きモデル翻訳

ベンダー名や商品名はイベント規模で日本語ソースから届きます。手作業の翻訳では追いつかず、盲目的な機械出力に任せるには重要すぎます。OpenAIの構造化出力が日本語・英語・中国語の名前と説明を証拠つきで生成し、それは他のすべてと同じレビューキューに入ります。モデルの出力がそのまま公開されることはなく、人間が抽出元の文脈に対して各提案を承認します。

結果として三層すべてで1つの性質が成り立ちます。ローカライズが欠けたときの失敗モードは、正しい日本語が表示されること――空白でも、レビューされていない推測でもありません。