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

設定

Champollion はゼロ設定で動作します。プロジェクトからロケールファイル、フォーマット、翻訳先言語を自動検出します。より細かく制御したい場合は、プロジェクトルートに champollion.config.json を作成するか、次のコマンドを実行してください:

npx champollion init

設定リファレンス(全項目)

champollion.config.json
{
"version": 3,
"inputLocale": "en",
"localesDir": "./locales",
"contentDir": null,
"translatableFields": null,
"format": "auto",
"model": "google/gemini-3.5-flash",
"temperature": 0.3,
"defaultMethod": "llm",
"batchSize": 80,
"coachingFile": null,
"promptContext": null,
"jsonConcurrency": 200,
"contentConcurrency": 48,
"fallbackPrefix": "[EN] ",
"apiKeyEnvVar": "OPENROUTER_API_KEY",
"baseUrl": "",
"pairs": {},
"languages": {},
"lint": {
"srcDir": null,
"ignore": ["node_modules", ".next", "dist"],
"minLength": 2
},
"seo": {
"urlPattern": "/:locale/:path",
"pages": null
},
"typegen": {
"output": null,
"autoGenerate": false
}
}

:::note typegen は未実装です typegen 設定ブロックは設定ローダーによって認識・保持されますが、TypeScript の型生成はまだ実装されていません。これは将来実装予定の機能のプレースホルダーです。現時点ではこれらの値を設定しても効果はありません。 :::

フィールド

フィールドデフォルト説明
versionnumber3設定スキーマのバージョン。常に 3 を指定します。
inputLocalestring"en"ソース言語コード(BCP 47)。
localesDirstring"./locales"ロケールファイルへのパス。Champollion はこのディレクトリをスキャンします。
contentDirstringnullHugo のコンテンツディレクトリ。Markdown 本文の翻訳を有効にします。
translatableFieldsstring[]nullコンテンツ翻訳で使用する翻訳可能なフロントマターフィールドのデフォルトを上書きします。null の場合は組み込みのデフォルト(titledescriptionsummary)を使用します。
formatstring"auto"ファイルフォーマット:jsontomlyaml、または auto(拡張子から自動検出)。
modelstring"google/gemini-3.5-flash"LLM メソッドのデフォルトモデル。OpenRouter のフルスラッグ(provider/model)または shared/model-aliases.json の短縮エイリアス(例:gemini-flash)を指定できます。直接プロバイダーの場合はベア名を使用します(例:gpt-4o)。
temperaturenumber0.3LLM の temperature(0.0〜2.0)。低いほど決定論的になります。
defaultMethodstring"llm"デフォルトの翻訳メソッド:llmllm-coachedgoogle-translatedeeplmicrosoft-translatorlibretranslateopenaianthropicgeminiapi--method CLI フラグで上書きできます。
batchSizenumber80翻訳バッチあたりのキー数。大きいほど API 呼び出し回数は減りますが、プロンプトが長くなります。
coachingFilestringnullフリーテキストのコーチングプロンプトファイルへのパス(プロジェクトルートからの相対パス)。起動時に内容が読み込まれ、Coaching guidance: ブロックとしてシステムプロンプトに挿入されます。
promptContextstringnullシステムプロンプトに挿入するアプリケーションのコンテキスト文字列(例:「E コマースの商品説明」)。モデルがドメインに合わせた翻訳を行うのに役立ちます。
jsonConcurrencynumber200JSON キー同期における並列ロケール翻訳の最大数。--json-concurrency CLI フラグで上書きできます。
contentConcurrencynumber48コンテンツ(Markdown/MDX)翻訳における並列 API 呼び出しの最大数。--content-concurrency CLI フラグで上書きできます。
fallbackPrefixstring"[EN] "audit および verify が過去の実行で未翻訳のまま残った値を検出するために使用するマーカープレフィックス。Champollion はこのプレフィックスを書き込まず、検出のためにのみ読み取ります。
apiKeyEnvVarstring"OPENROUTER_API_KEY"API キーの環境変数名。カスタムの環境変数名を使用する場合に上書きします。
baseUrlstring""SEO アーティファクト生成(hreflang、サイトマップ、JSON-LD)のベース URL。
pairsobject{}ペアごとのメソッド、モデル、品質の上書き設定。ペア設定を参照してください。
languagesobject{}言語ごとの上書き設定。言語設定を参照してください。
lint.srcDirstringnulllint スキャンのソースディレクトリ。null の場合はフレームワークから自動検出します。
lint.ignorestring[]["node_modules", ...]lint から除外する glob パターン。
lint.minLengthnumber2ハードコードされた文字列としてフラグを立てる最小文字列長。
seo.urlPatternstring"/:locale/:path"hreflang タグ生成用の URL パターンテンプレート。
seo.pagesstring[]nullSEO 用の明示的なページリスト。null の場合はロケールキーから自動検出します。
typegen.outputstringnull生成する TypeScript 型の出力パス。null の場合は無効です。
typegen.autoGeneratebooleanfalse各同期後に型を自動再生成します。

ペア設定

ソース→ターゲットの各ペアを個別に設定できます:

{
"pairs": {
"en:fr": {
"method": "google-translate",
"qualityTier": "high"
},
"en:ja": {
"method": "llm",
"model": "google/gemini-2.5-pro"
},
"en:crk": {
"methodPlugin": "crk-coached-v1"
}
}
}

ペアフィールド

フィールド説明
methodstring翻訳メソッド:llmllm-coachedgoogle-translatedeeplmicrosoft-translatorlibretranslateopenaianthropicgeminiapi
methodPluginstringインストール済みプラグインの名前(.champollion/methods/ から)
modelstringこのペアのデフォルトモデルを上書きします
temperaturenumberこのペアのデフォルト temperature を上書きします
batchSizenumberこのペアのデフォルトバッチサイズを上書きします
registerstringレジスター/トーンの上書き(プリセットキーまたは自由記述テキスト)
endpointstringリモート API エンドポイントの URL。methodapi の場合に必須です。
coachingFilestringこのペア用のコーチングプロンプトファイルへのパス
promptContextstringこのペアのアプリケーションコンテキスト
qualityTierstring表示ティア:standardhighresearchverified

言語設定

言語は3つの形式で指定できます:

コードの配列(最もシンプル)

{
"languages": ["fr", "de", "ja"]
}

各言語は組み込みのレジスターテーブルからデフォルトのレジスターを取得します。デフォルトが存在しない言語には "Professional register." が適用されます。

レジスター文字列を持つオブジェクト

値には言語カードのプリセットキーまたはカスタムレジスターテキストを指定できます:

{
"languages": {
"fr": "casual-tu",
"ko": "formal-hapsyo",
"ja": "Custom: Polite Japanese for a gaming app."
}
}

Champollion は文字列が言語カードのプリセットキーと一致するかどうかを確認します。一致する場合はカードのフルレジスタープロンプトが使用され、一致しない場合は文字列がそのまま使用されます。利用可能なプリセットについてはサポート言語を参照してください。

フル設定を持つオブジェクト

{
"languages": {
"crk": {
"name": "Plains Cree",
"register": "SRO syllabics with grammatical precision.",
"model": "google/gemini-2.5-pro",
"batchSize": 5,
"maxRetries": 5,
"script": "cans"
}
}
}

同じブロック内で短縮形とフルオブジェクトを混在させることができます。

言語フィールド

フィールド説明
registerstringスタイル/トーンの指示。プリセットキー(例:casual-tuformal-hapsyo)またはカスタムテキストを指定できます。言語カードを参照してください。
namestring人間が読める言語名(ステータス表示用)
modelstringデフォルトモデルを上書きします
temperaturenumberデフォルト temperature を上書きします
batchSizenumberデフォルトバッチサイズを上書きします
coachingFilestringこの言語用のコーチングプロンプトファイルへのパス
promptContextstringこの言語のアプリケーションコンテキスト
maxRetriesnumber失敗したバッチの最大リトライ回数(デフォルト:3)
scriptstringISO 15924 スクリプトコード。品質ゲートでのスクリプト検証を有効にします。

:::info 継承チェーン 設定は次の順序で解決されます(先に見つかったものが優先されます):

ペアレベル言語レベルグローバル設定デフォルト

たとえば、pairs["en:fr"]model を設定すると、言語レベルおよびグローバルの model の値の両方が上書きされます。 :::

英語以外のソース言語

ソース言語が英語でない場合:

# CLI flag (one-time)
npx champollion sync --source fr
champollion.config.json (permanent)
{
"inputLocale": "fr"
}

ロックファイル

Champollion は .champollion.lock を作成し、翻訳済みソース値の SHA-256 ハッシュを追跡します。すべての開発者が同じ翻訳ベースラインを共有できるよう、このファイルをコミットしてください

ソース値が変更されるとハッシュが一致しなくなり、次の同期時に Champollion がそのキーを再翻訳します。

.champollionignore

lint スキャンからファイルを除外するには、プロジェクトルートに .champollionignore を作成します。.gitignore と同様に glob パターンを使用します:

.champollionignore
src/components/legacy/**
src/utils/constants.js
**/*.test.js

.champollion/ ディレクトリ

Champollion はプロジェクトルートに .champollion/ ディレクトリを作成し、内部状態を管理します。これはプロジェクトのソースではなくローカルの最適化用データであるため、通常は .gitignore に追加することを推奨します

.champollion/
ファイル用途コミット対象
tm.json翻訳メモリキャッシュ — ソーステキスト・ロケール・メソッドをキーとして過去の翻訳を保存します不要(ローカルキャッシュ)
xliff/*.xliffプロの翻訳者によるレビュー用 XLIFF エクスポートファイル不要(一時ファイル)
methods/インストール済みメソッドプラグインのマニフェスト必要(共有設定)
backups/ラップ前のバックアップ(wrap --undo によって作成)不要(安全網)

tm.json の詳細および API コストの節約方法については、翻訳メモリを参照してください。


プログラマティック API

ビルドスクリプトやカスタム統合では、パッケージから直接インポートできます:

import { GeminiMethod, runSync, resolveConfig } from 'champollion';

// Use a method class directly
const gemini = new GeminiMethod();
const result = await gemini.translate(
['greeting', 'farewell'],
{ greeting: 'Hello', farewell: 'Goodbye' },
{ target: 'fr', name: 'French', register: 'formal', model: 'gemini-2.5-flash' },
{ cwd: process.cwd() }
);
// result = { greeting: 'Bonjour', farewell: 'Au revoir' }

利用可能なエクスポート

エクスポート機能
TranslationMethodすべてのメソッドの基底クラス
LLMMethodLLM メソッドの基底クラス(OpenRouter)
DirectLLMMethod直接 LLM プロバイダーの基底クラス(OpenAI、Anthropic、Gemini)
OpenAIMethodAnthropicMethodGeminiMethod直接 LLM プロバイダークラス
DeepLMethodMicrosoftTranslatorMethodLibreTranslateMethod従来の MT クラス
GoogleTranslateMethodGoogle Cloud Translation
LLMCoachedMethodコーチング付き LLM(OpenRouter + コーチングデータ)
APIMethodリモート API クライアント
runSyncrunContentSyncフル同期パイプライン
resolveConfigresolvePairs設定解決
validateTranslations品質ゲート
loadCoachingDatafindDictionaryMatchesコーチングユーティリティ

カスタムプロバイダーの拡張

DirectLLMMethod を拡張することで、約40行で新しい LLM プロバイダーを追加できます:

import { DirectLLMMethod } from 'champollion';

class MistralMethod extends DirectLLMMethod {
constructor(options) {
super(options);
this.name = 'mistral';
}
_getApiKeyEnvVar() { return 'MISTRAL_API_KEY'; }
_getApiKeyOptionsKey() { return 'mistralApiKey'; }
_getDefaultModel() { return 'mistral-large-latest'; }
_getProviderLabel() { return 'Mistral'; }

_buildApiRequest({ prompt, systemMessage, apiKey, model, temperature }) {
return {
url: 'https://api.mistral.ai/v1/chat/completions',
headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' },
body: {
model,
messages: [
...(systemMessage ? [{ role: 'system', content: systemMessage }] : []),
{ role: 'user', content: prompt },
],
temperature,
},
};
}

_extractResponseText(json) {
return json.choices?.[0]?.message?.content;
}

// Optional but recommended: provider-specific setup help when translation fails
getSetupHelp() {
if (!process.env.MISTRAL_API_KEY) {
return [
'',
' ┌─ Missing API Key ─────────────────────────────────────────────┐',
' │ Mistral requires an API key from https://console.mistral.ai │',
' │ Run: export MISTRAL_API_KEY=... │',
' └────────────────────────────────────────────────────────────────┘',
];
}
return [' API key is set but translation failed. Check your Mistral dashboard.'];
}
}

翻訳、コーチング、リトライループ、モデル検証、品質ティア、セットアップヘルプがすぐに利用できます。プロバイダー固有の実装が必要なのは HTTP リクエストの形式のみです。生の fetch() を使用する非 LLM アダプターの場合は、独自のリトライループを実装する代わりに、lib/methods/fetch-with-retry.js の共有ヘルパー fetchWithRetry() を使用してください。


関連情報