Ga naar hoofdinhoud

Scriptconverters

Scriptconverters zijn deterministische, LLM-vrije post-translation hooks die tekst van het ene schrijfsysteem naar het andere converteren. Ze maken een "één keer vertalen, in meerdere schriften weergeven"-workflow mogelijk — u vertaalt naar een werkschrift (meestal Latijns) en converteert dit vervolgens automatisch naar het weergaveschrift.

Waarom Scriptconverters?

Sommige talen gebruiken meerdere schriften voor dezelfde gesproken taal:

  • Plains Cree: SRO (Latijns) voor bewerking → Syllabics (ᓀᐦᐃᔭᐍᐏᐣ) voor weergave
  • Servisch: Latijns voor internationaal gebruik → Cyrillisch voor binnenlands gebruik
  • Klingon: Romanisatie voor typen → pIqaD ( ) voor weergave

Direct vertalen naar niet-Latijnse schriften levert problemen op: LLM's hallucineren tekens, JSON-bestanden worden moeilijk te beheren in versiebeheer en diff-tools kunnen wijzigingen niet vergelijken. Scriptconverters lossen dit op door vertalingen in een versiebeheervriendelijk schrift te houden en deze deterministisch te converteren tijdens het synchroniseren.

Beschikbare converters

Rosetta wordt geleverd met vijf ingebouwde scriptconverters:

LocaleVanNaarTypeLettertype vereist?
crkSRO (Standard Roman Orthography)Cree SyllabicsDeterministischNee — native Unicode
srLatijnsCyrillischDeterministischNee — native Unicode
tlhRomanisatiepIqaDDeterministischJa — PUA U+F8D0–F8FF
x-elvish-sLatijnsTengwar (Mode of Beleriand)DeterministischJa — PUA U+E000–E07F
x-kryptonianLatijnsKryptonianFont-gebaseerde cipherJa — PUA U+E100–E119

Deterministisch vs. Font-gebaseerd

  • Deterministische converters (Cree, Servisch, Klingon, Tengwar) voeren een echte teken-naar-teken mapping uit met behulp van taalkundige regels. De uitvoer bevat daadwerkelijke Unicode-tekens.
  • Font-gebaseerde converters (Kryptonian) zijn 1:1 substitutie-ciphers waarbij de uitvoer bestaat uit Unicode PUA-tekens die alleen correct worden weergegeven wanneer een specifiek lettertype is geladen.

Hoe ze werken

Scriptconverters worden na de vertaling uitgevoerd als een post-processing stap. De pijplijn is als volgt:

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

Bijvoorbeeld, Plains Cree:

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

Alle converters gebruiken hetzelfde algoritme: probeer op elke tekenpositie eerst de langst mogelijke match en vervolgens steeds kortere matches. Tekens die met geen enkel patroon overeenkomen (spaties, leestekens, getallen) worden ongewijzigd doorgegeven.

Dit verwerkt digrafen en trigrafen correct:

  • Klingon: tlh → enkel pIqaD-teken (niet t + l + h)
  • Servisch: njњ (niet н + ј)
  • Cree: twê → enkel syllabisch teken (niet t + w + ê)

Scriptconverters gebruiken

Scriptconverters worden automatisch geactiveerd wanneer de locale-code overeenkomt met een geregistreerde converter. Er is geen configuratie nodig — u hoeft alleen uw doel-locale in te stellen:

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

Wanneer Rosetta het en:crk-paar synchroniseert, worden vertalingen eerst in SRO geproduceerd en vervolgens automatisch geconverteerd naar Syllabics voordat ze naar crk.json worden geschreven.

Converterstatus controleren

npx i18n-rosetta status

De statusuitvoer toont welke paren actieve scriptconverters hebben en welke conversie zij uitvoeren.

Vereisten voor weblettertypen

Drie converters produceren Unicode Private Use Area (PUA)-tekens die aangepaste weblettertypen vereisen:

Klingon (pIqaD)

Installeer een CSUR-compatibel pIqaD-lettertype (bijv. "pIqaD qolqoS" of "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;
}

Tengwar (Sindarin)

Installeer een CSUR-compatibel Tengwar-lettertype (bijv. "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;
}

Kryptonian

Installeer een Kryptonian-lettertype dat is toegewezen aan PUA-codepoints 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 Alternatieve benadering voor Kryptonian Aangezien Kryptonian een pure A-Z cipher is, kunt u de scriptconverter volledig overslaan en het lettertype via CSS toepassen op Latijnse tekst. Dit is vaak eenvoudiger voor webimplementaties — u hoeft alleen het Kryptonian-lettertype aan te bieden en font-family in te stellen op de relevante elementen. :::

Een aangepaste converter toevoegen

Om een converter voor een nieuwe taal toe te voegen, bewerkt u lib/scripts.js:

  1. Maak de conversiemap — een geordende array van [from, to]-paren, met de langste reeksen eerst
  2. Maak de converterfunctie — een greedy links-naar-rechts scanner (gebruik sroToSyllabics als sjabloon)
  3. Registreer deze in het SCRIPT_CONVERTERS-object met de locale-code als sleutel
  4. Voeg het script-veld toe aan de registervermelding van de taal in 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,
};

Zie ook