Configuratie
Champollion werkt zonder configuratie — het detecteert automatisch localebestanden, indeling en doeltalen vanuit uw project. Voor meer controle maakt u champollion.config.json aan in de hoofdmap van uw project, of voert u het volgende uit:
npx champollion init
Volledige configuratiereferentie
{
"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 is nog niet geïmplementeerd
Het typegen configuratieblok wordt herkend en bewaard door de configuratielader, maar het genereren van TypeScript-typen is nog niet geïmplementeerd. Dit is een tijdelijke aanduiding voor een geplande functie. Het instellen van deze waarden heeft geen effect.
:::
Velden
| Veld | Type | Standaard | Beschrijving |
|---|---|---|---|
version | number | 3 | Versie van het configuratieschema. Altijd 3. |
inputLocale | string | "en" | Brontalcode (BCP 47). |
localesDir | string | "./locales" | Pad naar localebestanden. Champollion scant deze map. |
contentDir | string | null | Hugo-inhoudsmap. Schakelt vertaling van Markdown-inhoud in. |
translatableFields | string[] | null | Overschrijf de standaard vertaalbare frontmatter-velden voor inhoudsvertaling. null gebruikt ingebouwde standaardwaarden (title, description, summary). |
format | string | "auto" | Bestandsindeling: json, toml, yaml, of auto (detecteren op basis van extensie). |
model | string | "google/gemini-3.5-flash" | Standaardmodel voor LLM-methoden. Accepteert volledige OpenRouter-slugs (provider/model) of korte aliassen uit shared/model-aliases.json (bijv. gemini-flash). Directe providers gebruiken kale namen (bijv. gpt-4o). |
temperature | number | 0.3 | LLM-temperatuur (0,0–2,0). Lager = meer deterministisch. |
defaultMethod | string | "llm" | Standaard vertaalmethode: llm, llm-coached, google-translate, deepl, microsoft-translator, libretranslate, openai, anthropic, gemini, api. Overschreven door de --method CLI-vlag. |
batchSize | number | 80 | Sleutels per vertaalbatch. Hoger = minder API-aanroepen, maar grotere prompts. |
coachingFile | string | null | Pad naar een vrije-tekst coaching-promptbestand (relatief ten opzichte van de projecthoofdmap). De inhoud wordt bij het opstarten gelezen en als een Coaching guidance:-blok in de systeemprompt ingevoegd. |
promptContext | string | null | Toepassingscontextreeks die in de systeemprompt wordt ingevoegd (bijv. "Productbeschrijvingen voor e-commerce"). Helpt het model vertalingen af te stemmen op uw domein. |
jsonConcurrency | number | 200 | Maximaal aantal parallelle localevertaling voor JSON-sleutelsynchronisatie. Overschreven door de --json-concurrency CLI-vlag. |
contentConcurrency | number | 48 | Maximaal aantal parallelle API-aanroepen voor inhoudsvertaling (Markdown/MDX). Overschreven door de --content-concurrency CLI-vlag. |
fallbackPrefix | string | "[EN] " | Markeringsprefix die door audit en verify wordt gebruikt om verouderde onvertaalde waarden uit eerdere uitvoeringen te detecteren. Champollion schrijft dit prefix niet — het leest het alleen voor detectie. |
apiKeyEnvVar | string | "OPENROUTER_API_KEY" | Naam van de omgevingsvariabele voor de API-sleutel. Overschrijven voor aangepaste namen van omgevingsvariabelen. |
baseUrl | string | "" | Basis-URL voor het genereren van SEO-artefacten (hreflang, sitemaps, JSON-LD). |
pairs | object | {} | Methode-, model- en kwaliteitsoverschrijvingen per paar. Zie Paarconfiguratie. |
languages | object | {} | Overschrijvingen per taal. Zie Taalconfiguratie. |
lint.srcDir | string | null | Bronmap voor lint-scanning. null = automatisch detecteren op basis van framework. |
lint.ignore | string[] | ["node_modules", ...] | Globpatronen om uit te sluiten van lint. |
lint.minLength | number | 2 | Minimale tekenreekslengte om als hardgecodeerd te markeren. |
seo.urlPattern | string | "/:locale/:path" | URL-patroonsjabloon voor het genereren van hreflang-tags. |
seo.pages | string[] | null | Expliciete paginalijst voor SEO. null = automatisch detecteren op basis van localesleutels. |
typegen.output | string | null | Uitvoerpad voor gegenereerde TypeScript-typen. null = uitgeschakeld. |
typegen.autoGenerate | boolean | false | Typen automatisch opnieuw genereren na elke synchronisatie. |
Paarconfiguratie
Elk bron→doelpaar kan onafhankelijk worden geconfigureerd:
{
"pairs": {
"en:fr": {
"method": "google-translate",
"qualityTier": "high"
},
"en:ja": {
"method": "llm",
"model": "google/gemini-2.5-pro"
},
"en:crk": {
"methodPlugin": "crk-coached-v1"
}
}
}
Paarvelden
| Veld | Type | Beschrijving |
|---|---|---|
method | string | Vertaalmethode: llm, llm-coached, google-translate, deepl, microsoft-translator, libretranslate, openai, anthropic, gemini, api |
methodPlugin | string | Naam van een geïnstalleerde plugin (uit .champollion/methods/) |
model | string | Overschrijf het standaardmodel voor dit paar |
temperature | number | Overschrijf de standaardtemperatuur voor dit paar |
batchSize | number | Overschrijf de standaard batchgrootte voor dit paar |
register | string | Register-/toonoverride (vooringestelde sleutel of vrije tekst) |
endpoint | string | URL van het externe API-eindpunt. Vereist wanneer method api is. |
coachingFile | string | Pad naar een coaching-promptbestand voor dit paar |
promptContext | string | Toepassingscontext voor dit paar |
qualityTier | string | Weergaveniveau: standard, high, research, verified |
Taalconfiguratie
Talen accepteren drie indelingen:
Array van codes (eenvoudigst)
{
"languages": ["fr", "de", "ja"]
}
Elke taal krijgt zijn standaardregister uit de ingebouwde registertabel. Talen zonder standaard krijgen "Professional register.".
Object met registerreeksen
De waarde kan een vooringestelde sleutel uit de taalkaart zijn, of aangepaste registertekst:
{
"languages": {
"fr": "casual-tu",
"ko": "formal-hapsyo",
"ja": "Custom: Polite Japanese for a gaming app."
}
}
Champollion controleert of de reeks overeenkomt met een vooringestelde sleutel in de taalkaart. Als dat het geval is, wordt de volledige registerprompt uit de kaart gebruikt. Als dat niet het geval is, wordt de reeks ongewijzigd gebruikt. Zie Ondersteunde talen voor beschikbare voorinstellingen.
Object met volledige configuratie
{
"languages": {
"crk": {
"name": "Plains Cree",
"register": "SRO syllabics with grammatical precision.",
"model": "google/gemini-2.5-pro",
"batchSize": 5,
"maxRetries": 5,
"script": "cans"
}
}
}
U kunt verkorte notaties en volledige objecten door elkaar gebruiken in hetzelfde blok.
Taalvelden
| Veld | Type | Beschrijving |
|---|---|---|
register | string | Stijl-/tooninstructies. Kan een vooringestelde sleutel zijn (bijv. casual-tu, formal-hapsyo) of aangepaste tekst. Zie Taalkaarten. |
name | string | Leesbare taalnaam (voor statusweergave) |
model | string | Overschrijf het standaardmodel |
temperature | number | Overschrijf de standaardtemperatuur |
batchSize | number | Overschrijf de standaard batchgrootte |
coachingFile | string | Pad naar een coaching-promptbestand voor deze taal |
promptContext | string | Toepassingscontext voor deze taal |
maxRetries | number | Maximaal herhalingsbudget voor mislukte batches (standaard: 3) |
script | string | ISO 15924-scriptcode. Activeert scriptvalidatie in de kwaliteitspoort. |
:::info Overerveringsketen Instellingen worden in deze volgorde opgelost (eerste wint):
paar-niveau → taal-niveau → globale configuratie → standaardwaarden
Als pairs["en:fr"] bijvoorbeeld model instelt, overschrijft dit zowel de model-waarden op taal- als op globaal niveau.
:::
Niet-Engelse bron
Als uw brontaal geen Engels is:
# CLI flag (one-time)
npx champollion sync --source fr
{
"inputLocale": "fr"
}
Vergrendelingsbestand
Champollion maakt .champollion.lock aan om SHA-256-hashes van vertaalde bronwaarden bij te houden. Commit dit bestand zodat alle ontwikkelaars dezelfde vertaalbasis delen.
Wanneer een bronwaarde verandert, komt de hash niet meer overeen en vertaalt Champollion die sleutel opnieuw bij de volgende synchronisatie.
.champollionignore
Maak .champollionignore aan in de hoofdmap van uw project om bestanden uit te sluiten van lint-scanning. Gebruikt globpatronen, zoals .gitignore:
src/components/legacy/**
src/utils/constants.js
**/*.test.js
.champollion/-map
Champollion maakt een .champollion/-map aan in de hoofdmap van uw project voor interne status. U dient dit over het algemeen toe te voegen aan .gitignore — het is lokale optimalisatie, geen projectbron:
.champollion/
| Bestand | Doel | Committen? |
|---|---|---|
tm.json | Cache voor vertaalgeheugen — slaat eerdere vertalingen op, geïndexeerd op brontekst + locale + methode | Nee (lokale cache) |
xliff/*.xliff | XLIFF-exportbestanden voor beoordeling door professionele vertalers | Nee (tijdelijk) |
methods/ | Manifesten van geïnstalleerde methode-plugins | Ja (gedeelde configuratie) |
backups/ | Back-ups vóór omloop (aangemaakt door wrap --undo) | Nee (veiligheidsnet) |
Zie Vertaalgeheugen voor meer informatie over tm.json en hoe het API-kosten bespaart.
Programmatische API
Voor bouwscripts en aangepaste integraties importeert u rechtstreeks vanuit het pakket:
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' }
Beschikbare exports
| Export | Functie |
|---|---|
TranslationMethod | Basisklasse voor alle methoden |
LLMMethod | Basisklasse voor LLM-methoden (OpenRouter) |
DirectLLMMethod | Basisklasse voor directe LLM-providers (OpenAI, Anthropic, Gemini) |
OpenAIMethod, AnthropicMethod, GeminiMethod | Directe LLM-providerklassen |
DeepLMethod, MicrosoftTranslatorMethod, LibreTranslateMethod | Traditionele MT-klassen |
GoogleTranslateMethod | Google Cloud Translation |
LLMCoachedMethod | Coached LLM (OpenRouter + coachinggegevens) |
APIMethod | Externe API-client |
runSync, runContentSync | Volledige synchronisatiepijplijn |
resolveConfig, resolvePairs | Configuratieresolutie |
validateTranslations | Kwaliteitspoort |
loadCoachingData, findDictionaryMatches | Coaching-hulpprogramma's |
Uitbreiding met aangepaste provider
Breid DirectLLMMethod uit om een nieuwe LLM-provider toe te voegen in ~40 regels:
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.'];
}
}
U krijgt vertaling, coaching, herhalingslussen, modelvalidatie, kwaliteitsniveaus en installatiehulp gratis meegeleverd. Alleen de vorm van het HTTP-verzoek is providerspecifiek. Voor niet-LLM-adapters die gebruikmaken van ruwe fetch(), gebruikt u de gedeelde fetchWithRetry()-helper uit lib/methods/fetch-with-retry.js in plaats van uw eigen herhalingslus te schrijven.
Zie ook
- CLI-referentie — alle opdrachten en vlaggen
- Vertaalmethoden — methoden kiezen en combineren
- Vertaalgeheugen — caching en kostenbesparing
- Werken met professionele vertalers — XLIFF-workflow
- Pluginspecificatie — indeling van methode-pluginmanifesten
- Architectuur — hoe de onderdelen samenhangen
- Ondersteunde talen — ingebouwde taalondersteuning
- Hoe synchronisatie werkt — de vertaalpijplijn