メインコンテンツへスキップ

スクリプトコンバーター

スクリプトコンバーターは、決定論的でLLMを使用しない、翻訳後のフックであり、テキストをある文字体系から別の文字体系へ変換します。「一度翻訳して、複数のスクリプトで表示する」というワークフローを実現します。つまり、編集しやすいスクリプト(通常はラテン文字)に翻訳しておき、表示用スクリプトへの変換は自動的に行われます。

スクリプトコンバーターを使う理由

同じ話し言葉に対して複数の文字体系を使用する言語があります:

  • Plains Cree(平原クリー語):編集用にSRO(ラテン文字)→ 表示用に音節文字(ᓀᐦᐃᔭᐍᐏᐣ)
  • セルビア語:国際的な用途にラテン文字 → 国内向けにキリル文字
  • クリンゴン語:入力用のローマ字表記 → 表示用にpIqaD( )

非ラテン文字スクリプトへ直接翻訳すると問題が生じます。LLMが文字を誤生成したり、JSONファイルのバージョン管理が困難になったり、差分ツールで変更を比較できなくなったりします。スクリプトコンバーターは、翻訳をバージョン管理しやすいスクリプトで保持し、同期時に決定論的に変換することでこれらの問題を解決します。

利用可能なコンバーター

Champollionには5つの組み込みスクリプトコンバーターが付属しています:

ロケール変換元変換先種別フォント必要?
crkSRO(標準ローマ字正書法)クリー音節文字決定論的不要 — ネイティブUnicode
srラテン文字キリル文字決定論的不要 — ネイティブUnicode
tlhローマ字表記pIqaD決定論的必要 — PUA U+F8D0–F8FF
x-elvish-sラテン文字テングワール(ベレリアンド様式)決定論的必要 — PUA U+E000–E07F
x-kryptonianラテン文字クリプトン文字フォントベースの暗号必要 — PUA U+E100–E119

決定論的コンバーターとフォントベースコンバーターの違い

  • 決定論的コンバーター(クリー語、セルビア語、クリンゴン語、テングワール)は、言語規則に基づいた実際の文字対文字のマッピングを行います。出力には実際のUnicode文字が含まれます。
  • フォントベースコンバーター(クリプトン文字)は1対1の置換暗号であり、出力はUnicode PUA文字です。特定のフォントが読み込まれている場合にのみ正しく表示されます。

動作の仕組み

スクリプトコンバーターは、翻訳のにポストプロセスのステップとして実行されます。パイプラインは次のとおりです:

Source (English) → LLM Translation → Working Script → Script Converter → Display Script

例として、Plains Cree(平原クリー語)の場合:

"Welcome" → LLM → "tānisi" (SRO) → Converter → "ᑖᓂᓯ" (Syllabics)

貪欲な左から右へのマッチング

すべてのコンバーターは同じアルゴリズムを使用します。各文字位置において、まず最長一致を試み、次第に短い一致へと移行します。どのパターンにも一致しない文字(スペース、句読点、数字)はそのまま通過します。

これにより、二重字や三重字が正しく処理されます:

  • クリンゴン語:tlh → 単一のpIqaD文字(t + l + hではなく)
  • セルビア語:njњн + јではなく)
  • クリー語:twê → 単一の音節文字(t + w + êではなく)

スクリプトコンバーターの使い方

スクリプトコンバーターは、ロケールコードが登録済みのコンバーターと一致すると自動的に有効になります。設定は不要です。ターゲットロケールを指定するだけです:

champollion.config.json
{
"pairs": {
"en:crk": {
"method": "llm-coached",
"model": "google/gemini-2.5-pro"
}
}
}

champollionがen:crkペアを同期する際、翻訳はまずSROで生成され、crk.jsonへの書き込み前に自動的に音節文字へ変換されます。

コンバーターの状態を確認する

npx champollion status

ステータス出力には、アクティブなスクリプトコンバーターを持つペアと、それが行う変換の内容が表示されます。

Webフォントの要件

3つのコンバーターはUnicode私用領域(PUA)の文字を出力するため、カスタムWebフォントが必要です:

クリンゴン語(pIqaD)

CSUR互換のpIqaDフォント(例:「pIqaD qolqoS」または「Klingon pIqaD HaSta」)をインストールしてください:

@font-face {
font-family: 'pIqaD';
src: url('/fonts/pIqaD.woff2') format('woff2');
unicode-range: U+F8D0-F8FF;
}

:lang(tlh) {
font-family: 'pIqaD', sans-serif;
}

テングワール(シンダール語)

CSUR互換のテングワールフォント(例:「Tengwar Formal CSUR」、「Tengwar Annatar」)をインストールしてください:

@font-face {
font-family: 'Tengwar';
src: url('/fonts/tengwar-formal-csur.woff2') format('woff2');
unicode-range: U+E000-E07F;
}

:lang(x-elvish-s) {
font-family: 'Tengwar', serif;
}

クリプトン文字

PUAコードポイントU+E100–E119にマッピングされたクリプトン文字フォントをインストールしてください:

@font-face {
font-family: 'Kryptonian';
src: url('/fonts/kryptonian.woff2') format('woff2');
unicode-range: U+E100-E119;
}

:lang(x-kryptonian) {
font-family: 'Kryptonian', sans-serif;
}

:::tip クリプトン文字の代替アプローチ クリプトン文字は純粋なA-Zの暗号であるため、スクリプトコンバーターを使わず、CSSでラテン文字テキストにフォントを適用することもできます。Webデプロイではこちらの方がシンプルなことが多く、クリプトン文字フォントを配信して対象要素にfont-familyを設定するだけで済みます。 :::

カスタムコンバーターの追加

新しい言語のコンバーターを追加するには、lib/scripts.jsを編集します:

  1. 変換マップを作成する[from, to]ペアの順序付き配列。最長のシーケンスを先頭に配置します
  2. コンバーター関数を作成する — 貪欲な左から右へのスキャナー(sroToSyllabicsをテンプレートとして使用してください)
  3. 登録する — ロケールコードをキーとしてSCRIPT_CONVERTERSオブジェクトに追加します
  4. scriptフィールドを追加するregisters.js内の該当言語の登録エントリに追加します
// Example: adding a converter for Cherokee (chr)
const LATIN_TO_CHEROKEE_MAP = [
['ga', 'Ꭶ'], ['ka', 'Ꭷ'], ['ge', 'Ꭸ'], // ...
];

function latinToCherokee(text) {
// Same greedy left-to-right pattern as other converters
}

SCRIPT_CONVERTERS['chr'] = {
from: 'Latin',
to: 'Cherokee Syllabary',
type: 'deterministic',
converter: latinToCherokee,
};

関連情報