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:
| Locale | Van | Naar | Type | Lettertype vereist? |
|---|---|---|---|---|
crk | SRO (Standard Roman Orthography) | Cree Syllabics | Deterministisch | Nee — native Unicode |
sr | Latijns | Cyrillisch | Deterministisch | Nee — native Unicode |
tlh | Romanisatie | pIqaD | Deterministisch | Ja — PUA U+F8D0–F8FF |
x-elvish-s | Latijns | Tengwar (Mode of Beleriand) | Deterministisch | Ja — PUA U+E000–E07F |
x-kryptonian | Latijns | Kryptonian | Font-gebaseerde cipher | Ja — 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)
Greedy links-naar-rechts matching
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 (niett+l+h) - Servisch:
nj→њ(nietн+ј) - Cree:
twê→ enkel syllabisch teken (niett+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:
{
"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:
- Maak de conversiemap — een geordende array van
[from, to]-paren, met de langste reeksen eerst - Maak de converterfunctie — een greedy links-naar-rechts scanner (gebruik
sroToSyllabicsals sjabloon) - Registreer deze in het
SCRIPT_CONVERTERS-object met de locale-code als sleutel - Voeg het
script-veld toe aan de registervermelding van de taal inregisters.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
- Conlangs, schriften & orthografie — PUA-lettertypen, Unicode, nieuwe converters toevoegen
- Quality Gate — validatie die wordt uitgevoerd vóór scriptconversie
- Ondersteunde talen — welke talen scriptconverters hebben
- Een taal met weinig bronnen ondersteunen — SRO→Syllabics in context
- Kookboek: FST-Gated pijplijn — scriptconversie in een multi-stage pijplijn