Script Converters
Script converters는 LLM을 사용하지 않는 결정론적 번역 후 후크로, 텍스트를 한 문자 체계에서 다른 문자 체계로 변환해요. 이를 통해 "한 번 번역하고 여러 문자 체계로 렌더링하는" 워크플로가 가능해요 — 작업용 문자 체계(일반적으로 Latin)로 번역한 다음, 자동으로 표시용 문자 체계로 변환하는 방식이에요.
왜 Script Converters인가요?
일부 언어는 같은 구어에 대해 여러 문자 체계를 사용해요:
- Plains Cree: 편집용 SRO (Latin) → 표시용 Syllabics (ᓀᐦᐃᔭᐍᐏᐣ)
- Serbian: 국제용 Latin → 국내용 Cyrillic
- Klingon: 입력용 로마자 표기 → 표시용 pIqaD ( )
비(非)Latin 문자 체계로 직접 번역하면 문제가 생겨요: LLM이 문자를 환각(hallucinate)하고, JSON 파일은 버전 관리가 어려워지며, diff 도구가 변경 사항을 비교할 수 없어요. Script converters는 번역을 버전 관리에 친화적인 문자 체계로 유지하고 sync 시점에 결정론적으로 변환함으로써 이 문제를 해결해요.
사용 가능한 Converters
Champollion에는 다섯 개의 내장 script converter가 함께 제공돼요:
| Locale | From | To | Type | Font Required? |
|---|---|---|---|---|
crk | SRO (Standard Roman Orthography) | Cree Syllabics | Deterministic | No — native Unicode |
sr | Latin | Cyrillic | Deterministic | No — native Unicode |
tlh | Romanization | pIqaD | Deterministic | Yes — PUA U+F8D0–F8FF |
x-elvish-s | Latin | Tengwar (Mode of Beleriand) | Deterministic | Yes — PUA U+E000–E07F |
x-kryptonian | Latin | Kryptonian | Font-based cipher | Yes — PUA U+E100–E119 |
결정론적 방식 대 폰트 기반 방식
- 결정론적 converters (Cree, Serbian, Klingon, Tengwar)는 언어학적 규칙을 사용하여 실제 문자 대 문자 매핑을 수행해요. 출력에는 실제 Unicode 문자가 포함돼요.
- 폰트 기반 converters (Kryptonian)는 1:1 치환 암호(cipher)로, 출력이 특정 폰트가 로드되어야만 올바르게 렌더링되는 Unicode PUA 문자예요.
작동 방식
Script converters는 번역 이후에 후처리 단계로 실행돼요. 파이프라인은 다음과 같아요:
Source (English) → LLM Translation → Working Script → Script Converter → Display Script
예를 들어, Plains Cree의 경우:
"Welcome" → LLM → "tānisi" (SRO) → Converter → "ᑖᓂᓯ" (Syllabics)
탐욕적 좌-우 매칭
모든 converters는 동일한 알고리즘을 사용해요: 각 문자 위치에서 먼저 가능한 가장 긴 매칭을 시도하고, 그다음 점점 더 짧은 매칭을 시도해요. 어떤 패턴과도 매칭되지 않는 문자(공백, 구두점, 숫자)는 변경되지 않고 그대로 통과해요.
이는 이중자(digraph)와 삼중자(trigraph)를 올바르게 처리해요:
- Klingon:
tlh→ 단일 pIqaD 문자 (t+l+h가 아님) - Serbian:
nj→њ(н+ј가 아님) - Cree:
twê→ 단일 음절 문자 (t+w+ê가 아님)
Script Converters 사용하기
Script converters는 locale 코드가 등록된 converter와 일치할 때 자동으로 활성화돼요. 별도의 설정은 필요 없어요 — 대상 locale만 설정하면 돼요:
{
"pairs": {
"en:crk": {
"method": "llm-coached",
"model": "google/gemini-2.5-pro"
}
}
}
champollion이 en:crk 쌍을 sync할 때, 번역은 먼저 SRO로 생성된 다음, crk.json에 기록되기 전에 자동으로 Syllabics로 변환돼요.
Converter 상태 확인하기
npx champollion status
상태 출력은 어떤 쌍에 활성화된 script converter가 있는지, 그리고 어떤 변환을 수행하는지를 보여줘요.
웹 폰트 요구 사항
세 개의 converters는 커스텀 웹 폰트가 필요한 Unicode Private Use Area (PUA) 문자를 출력해요:
Klingon (pIqaD)
CSUR 호환 pIqaD 폰트(예: "pIqaD qolqoS" 또는 "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)
CSUR 호환 Tengwar 폰트(예: "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
PUA 코드포인트 U+E100–E119에 매핑된 Kryptonian 폰트를 설치하세요:
@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 Kryptonian을 위한 대안적 접근
Kryptonian은 순수한 A-Z 암호이므로, script converter를 완전히 건너뛰고 CSS를 통해 Latin 텍스트에 폰트를 적용할 수 있어요. 이 방법은 웹 배포에서 종종 더 간단해요 — Kryptonian 폰트를 제공하고 관련 요소에 font-family를 설정하기만 하면 돼요.
:::
커스텀 Converter 추가하기
새 언어를 위한 converter를 추가하려면 lib/scripts.js를 편집하세요:
- 변환 맵 생성 —
[from, to]쌍의 순서가 있는 배열로, 가장 긴 시퀀스를 먼저 배치 - converter 함수 생성 — 탐욕적 좌-우 스캐너 (
sroToSyllabics를 템플릿으로 사용) - locale 코드를 키로 하여
SCRIPT_CONVERTERS객체에 등록 registers.js의 언어 register 항목에script필드 추가
// 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,
};
함께 보기
- Conlangs, Scripts & Orthography — PUA 폰트, Unicode, 새 converter 추가하기
- Quality Gate — script 변환 전에 실행되는 검증
- Supported Languages — 어떤 언어에 script converter가 있는지
- Support a Low-Resource Language — 맥락 속에서의 SRO→Syllabics
- Cookbook: FST-Gated Pipeline — 다단계 파이프라인에서의 script 변환