Mag-skip sa main content

Script Converters

Ang mga script converter ay mga deterministic at LLM-free na post-translation hook na nagko-convert ng text mula sa isang writing system papunta sa iba. Ine-enable ng mga ito ang isang "translate once, render in multiple scripts" na workflow — magta-translate ka sa isang working script (kadalasan ay Latin), tapos automatic itong iko-convert sa display script.

Bakit Script Converters?

May mga language na gumagamit ng multiple scripts para sa iisang spoken language:

  • Plains Cree: SRO (Latin) para sa editing → Syllabics (ᓀᐦᐃᔭᐍᐏᐣ) para sa display
  • Serbian: Latin para sa international use → Cyrillic para sa domestic use
  • Klingon: Romanization para sa typing → pIqaD ( ) para sa display

Ang direktang pag-translate sa mga non-Latin script ay nagdudulot ng mga problema: nagha-hallucinate ng characters ang mga LLM, nagiging mahirap i-version-control ang mga JSON file, at hindi ma-compare ng mga diff tool ang mga changes. Sinosolve ito ng mga script converter sa pamamagitan ng pag-keep ng mga translation sa isang version-control-friendly na script at pag-convert nang deterministic sa sync time.

Available na mga Converter

May kasamang limang built-in na script converter ang Rosetta:

LocaleFromToTypeFont Required?
crkSRO (Standard Roman Orthography)Cree SyllabicsDeterministicHindi — native Unicode
srLatinCyrillicDeterministicHindi — native Unicode
tlhRomanizationpIqaDDeterministicOo — PUA U+F8D0–F8FF
x-elvish-sLatinTengwar (Mode of Beleriand)DeterministicOo — PUA U+E000–E07F
x-kryptonianLatinKryptonianFont-based cipherOo — PUA U+E100–E119

Deterministic vs. Font-Based

  • Ang mga deterministic converter (Cree, Serbian, Klingon, Tengwar) ay nagpe-perform ng totoong character-to-character mapping gamit ang mga linguistic rule. Ang output ay naglalaman ng mga totoong Unicode character.
  • Ang mga font-based converter (Kryptonian) ay mga 1:1 substitution cipher kung saan ang output ay mga Unicode PUA character na magre-render lang nang tama kapag may naka-load na specific na font.

Paano Sila Gumagana

Nagra-run ang mga script converter pagkatapos ng translation bilang isang post-processing step. Ang pipeline ay:

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

Halimbawa, sa Plains Cree:

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

Greedy Left-to-Right Matching

Parehong algorithm ang ginagamit ng lahat ng converter: sa bawat character position, ita-try muna ang longest possible match, tapos progressively shorter matches. Ang mga character na hindi nagma-match sa kahit anong pattern (spaces, punctuation, numbers) ay magpa-pass through nang walang pagbabago.

Hinahandle nito nang tama ang mga digraph at trigraph:

  • Klingon: tlh → single pIqaD character (hindi t + l + h)
  • Serbian: njњ (hindi н + ј)
  • Cree: twê → single syllabic (hindi t + w + ê)

Paggamit ng mga Script Converter

Automatic na nag-a-activate ang mga script converter kapag nag-match ang locale code sa isang registered converter. Hindi na kailangan ng configuration — i-set lang po ang inyong target locale:

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

Kapag nag-sync ang rosetta sa en:crk pair, ang mga translation ay ipo-produce muna sa SRO, tapos automatic na iko-convert sa Syllabics bago i-write sa crk.json.

Pag-check ng Converter Status

npx i18n-rosetta status

Ipinapakita ng status output kung aling mga pair ang may active na script converter at kung anong conversion ang ginagawa nila.

Mga Web Font Requirement

Tatlong converter ang nag-o-output ng mga Unicode Private Use Area (PUA) character na nangangailangan ng mga custom web font:

Klingon (pIqaD)

Mag-install ng CSUR-compatible na pIqaD font (hal., "pIqaD qolqoS" o "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)

Mag-install ng CSUR-compatible na Tengwar font (hal., "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

Mag-install ng Kryptonian font na naka-map sa mga PUA codepoint na 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 Alternative approach para sa Kryptonian Dahil ang Kryptonian ay isang pure A-Z cipher, pwede niyo pong i-skip nang buo ang script converter at i-apply ang font sa Latin text via CSS. Kadalasan ay mas simple ito para sa mga web deployment — i-serve lang ang Kryptonian font at i-set ang font-family sa mga relevant na element. :::

Pag-add ng Custom Converter

Para mag-add ng converter para sa isang bagong language, i-edit ang lib/scripts.js:

  1. I-create ang conversion map — isang ordered array ng mga [from, to] pair, unahin ang longest sequences
  2. I-create ang converter function — isang greedy left-to-right scanner (gamitin ang sroToSyllabics bilang template)
  3. I-register ito sa SCRIPT_CONVERTERS object gamit ang locale code bilang key
  4. I-add ang script field sa register entry ng language sa 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,
};

Tingnan Din