인공어, 스크립트 및 정자법
champollion은 LLM 레지스터와 결정론적 스크립트 변환기를 통해 인공어를 일급으로 지원해요. 이 가이드에서는 인공어 지원이 어떻게 작동하는지, 어떤 폰트가 필요한지, 그리고 직접 추가하는 방법을 다뤄요.
:::tip 인공어가 중요한 이유 인공어는 단순한 신기한 기능이 아니에요 — 실제로 소외된 언어에 사용되는 것과 정확히 동일한 인프라를 활용해요. 품질 게이트, 코칭 시스템, 스크립트 변환 파이프라인은 Klingon과 Plains Cree에 동일하게 작동해요. 인공어 파이프라인이 작동한다면, 저자원 언어 파이프라인도 작동할 거예요. :::
지원되는 인공어
| 언어 | 코드 | 스크립트 변환기 | 폰트 필요 |
|---|---|---|---|
| Klingon | tlh | ✅ 로마자 표기 → pIqaD | PUA 폰트 (예: pIqaD qolqoS) |
| Sindarin (Tolkien Elvish) | x-elvish-s | ✅ 라틴 문자 → Tengwar | CSUR PUA 폰트 |
| Kryptonian | x-kryptonian | ✅ 라틴 문자 → Kryptonian | PUA 폰트 |
| Pirate English | x-pirate | ❌ 레지스터만 | 없음 |
| Shakespearean English | x-shakespeare | ❌ 레지스터만 | 없음 |
| Yoda-speak | x-yoda | ❌ 레지스터만 | 없음 |
인공어 코드는 BCP-47 사용자 정의 규칙에 따라 x- 접두사를 사용하지만, SIL International에서 ISO 639-3 코드를 할당받은 Klingon (tlh)은 예외예요.
Unicode, PUA 및 폰트 요구 사항
Private Use Area
Klingon (pIqaD), Sindarin (Tengwar), Kryptonian은 Unicode Private Use Area (PUA) 문자를 사용해요. PUA는 U+E000–U+F8FF 범위예요 — 이 코드포인트들은 표준 할당이 없어요. ConScript Unicode Registry (CSUR)는 가상 스크립트에 대한 커뮤니티 합의 매핑을 관리하지만, 이는 Unicode 표준의 일부가 아니에요.
실제로 이것이 의미하는 바는 다음과 같아요:
- PUA 텍스트는 올바른 폰트가 로드되지 않으면 빈 상자(□□□)로 렌더링돼요
- 폰트마다 동일한 PUA 코드포인트에 서로 다른 글리프를 매핑할 수 있어요
- champollion은 PUA 폰트를 번들로 제공하지 않아요 — 직접 로드해야 해요
- 시스템 폰트는 이 문자들을 절대 렌더링하지 않아요
스크립트별 PUA 범위
| 스크립트 | PUA 범위 | CSUR 참조 |
|---|---|---|
| Klingon (pIqaD) | U+F8D0–U+F8FF | CSUR Klingon |
| Tengwar (Elvish) | U+E000–U+E07F | CSUR Tengwar |
| Kryptonian | 폰트에 따라 다름 | CSUR 표준 없음 |
PUA 웹 폰트 로드하기
champollion에는 PUA 웹 폰트를 다운로드하고 관리하는 내장 명령이 포함되어 있어요:
# See which fonts are needed for your configured languages
champollion fonts list
# Download all needed fonts (auto-detects project type for output directory)
champollion fonts install
# Also generate a CSS snippet with @font-face declarations
champollion fonts install --css
fonts install 명령은 검증된 오픈소스 저장소에서 다운로드해요:
| 폰트 | 스크립트 | 라이선스 | 출처 |
|---|---|---|---|
| pIqaD qolqoS | Klingon | SIL Open Font License 1.1 | GitHub |
| FreeMonoTengwar | Tengwar | GNU GPL v3 (폰트 예외 포함) | SourceForge |
| (사용자 제공) | Kryptonian | 다양함 | 사용 가능한 오픈소스 PUA 폰트 없음 |
출력 디렉터리는 프로젝트 구조에서 자동으로 감지돼요 (Docusaurus → static/fonts/, Hugo → static/fonts/, 기본값 → public/fonts/). --dir로 재정의할 수 있어요.
폰트를 수동으로 관리하고 싶다면, CSS에 @font-face 규칙을 추가하세요:
@font-face {
font-family: 'pIqaD';
src: url('/fonts/pIqaDqolqoS.ttf') format('truetype');
font-display: swap;
unicode-range: U+F8D0-F8FF;
}
/* Apply to Klingon text elements */
[lang="tlh"], [data-script="piqad"] {
font-family: 'pIqaD', sans-serif;
}
:::warning Unicode 지원은 보장되지 않아요 Unicode Consortium은 가상 스크립트를 표준으로 인코딩하기를 명시적으로 거부했어요. PUA 할당은 커뮤니티에서 관리되며 폰트 구현 간에 충돌할 수 있어요. 항상 프로젝트가 사용하는 정확한 폰트를 지정하고, 브라우저 전반에서 렌더링을 테스트하세요. :::
스크립트 변환기
작동 방식
champollion의 스크립트 변환은 번역 후 후크예요:
- LLM이 텍스트를 작업 스크립트(보통 라틴 문자 또는 SRO)로 번역해요
- 품질 게이트가 출력을 검증해요
- 결정론적 변환기가 검증된 텍스트를 표시 스크립트로 변환해요
- 변환된 텍스트가 디스크에 기록돼요
이 2단계 방식은 LLM이 라틴 기반 스크립트로 작업할 때 더 나은 출력을 생성하기 때문에 작동해요. 결정론적 변환기는 모델의 (종종 신뢰할 수 없는) 스크립트 지식에 의존하지 않고 올바른 스크립트 출력을 보장해요.
다섯 가지 변환기 모두
champollion에는 다섯 가지 내장 스크립트 변환기가 포함되어 있어요:
Plains Cree: SRO → Syllabics (crk)
Standard Roman Orthography에서 Canadian Aboriginal Syllabics로 변환해요.
Input: "tawâw"
Output: "ᑕᐚᐤ"
장모음은 마크론/곡절 부호를 사용해요: ê, î, ô, â. 변환기는 모든 SRO 발음 구별 부호를 처리하고 올바른 음절 문자로 매핑해요. 전체 Cree 파이프라인은 저자원 언어 지원하기를 참조하세요.
Serbian: Latin → Cyrillic (sr)
세르비아어를 위한 결정론적 라틴 문자에서 키릴 문자로의 변환이에요.
Input: "zdravo"
Output: "здраво"
이는 이중 문자(lj → љ, nj → њ, dž → џ)를 포함한 전체 세르비아어 알파벳 매핑을 처리해요.
Klingon: Romanization → pIqaD (tlh)
Marc Okrand의 로마자 표기 시스템에서 pIqaD PUA 문자로 변환해요.
Input: "Qapla'" (romanized Klingon)
Output: [pIqaD PUA] (requires pIqaD font to render)
Sindarin: Latin → Tengwar (x-elvish-s)
Tolkien의 Sindarin 모드 Tengwar 매핑이에요.
Input: "elen síla" (Latin Sindarin)
Output: [Tengwar PUA] (requires Tengwar font to render)
Kryptonian: Latin → Kryptonian (x-kryptonian)
팬 어휘집 Kryptonian 스크립트 매핑이에요.
Input: "Kal-El"
Output: [Kryptonian PUA] (requires Kryptonian font to render)
변환기 트리거하기
언어 설정에서 scripts 필드를 설정하세요. 내장 변환기의 경우, 이는 언어 코드에서 자동으로 감지돼요:
{
"languages": {
"sr": { "scripts": "sr" },
"crk": {}
}
}
Plains Cree (crk)는 자동으로 감지돼요 — scripts을 명시적으로 설정할 필요가 없어요.
다중 스크립트 언어
일부 실제 언어는 여러 활성 스크립트를 사용해요:
| 언어 | 스크립트 | champollion 접근 방식 |
|---|---|---|
| Serbian | Latin + Cyrillic | 스크립트 변환기 (sr) — 라틴 문자로 번역한 후 키릴 문자로 변환 |
| Chinese | Simplified + Traditional | 별개의 레지스터를 가진 별도의 로케일 코드 (zh vs zh-TW) |
두 스크립트가 동일한 대상에게 사용되는 언어(Serbian)의 경우, 스크립트 변환기를 사용하세요. 스크립트가 서로 다른 대상에게 사용되는 언어(중국 본토용 중국어 간체, 대만/홍콩용 번체)의 경우, 별도의 로케일 코드를 사용하세요.
정자법 노트
레지스터는 단순한 어조가 아니에요 — 정자법 지침을 담고 있어 LLM이 올바른 작성 관습을 따르도록 유도해요.
격식 호칭 형태
champollion의 내장 레지스터는 각 언어에 문화적으로 적절한 격식 호칭을 포함해요:
| 언어 | 격식 형태 | 레지스터 지침 |
|---|---|---|
| German | Sie | Use Sie-form for formal address |
| French | vous | Use vous-form |
| Russian | вы | Professional register with вы-form |
| Turkish | siz | Professional register with siz-form |
| Korean | 합쇼체 | Formal Korean (합쇼체) |
| Japanese | です/ます | Polite professional register (です/ます form) |
| Polish | Pan/Pani | Professional register with Pan/Pani form |
성 포용적 글쓰기
각 언어 카드에는 언어별 조언이 담긴 gender.inclusiveGuidance 필드가 있어요. 이는 레지스터 프리셋과는 별도로 LLM 번역 프롬프트에 주입되므로, 사용자가 어떤 격식 프리셋을 선택하든 일관되게 적용돼요:
- French: 가운뎃점 표기를 사용하는 Écriture inclusive (예: "Connecté·e")
- German: 쌍점 표기 (예: "Benutzer:innen")
- Spanish: 성 중립적 재구성 선호; 대체 방안으로 슬래시 표기 (예: "usuario/a")
카드에 특정 지침이 없는 언어(예: Korean, 인공어)의 경우, 시스템은 일반적인 규칙으로 대체돼요: "성 중립적 형태나 사용 가능한 가장 포용적인 옵션을 선호하세요."
RTL 스크립트 요구 사항
Arabic, Hebrew, Persian, Urdu 레지스터는 모두 오른쪽에서 왼쪽으로 쓰는 요구 사항을 명시해요: Ensure text reads naturally in RTL layout contexts.
모든 레지스터 재정의하기
모든 레지스터는 설정 값이에요 — 프로젝트의 목소리에 맞게 재정의하세요:
{
"languages": {
"fr": {
"register": "Casual French. Use tu-form. Conversational blog tone. Gender-neutral when possible."
},
"de": {
"register": "Informal German. Use du-form. Tech startup voice."
}
}
}
전체 설정 참조는 Configuration을 참조하세요.
새로운 인공어 추가하기
단계별 안내
-
BCP-47 사용자 정의 코드 선택:
x-접두사를 사용하세요 (예:x-dothraki,x-valyrian). -
설정에 추가:
{
"languages": {
"x-dothraki": {
"register": "Dothraki language. Use David J. Peterson's vocabulary from the Living Language Dothraki textbook. Harsh, direct tone. No articles, no verb 'to be'."
}
}
}
-
(선택 사항) 스크립트 변환기 추가: 인공어가 라틴 문자가 아닌 표시 스크립트를 사용한다면,
lib/scripts.js에 변환기를 추가하고SCRIPT_CONVERTERS에 등록하세요. -
테스트:
champollion sync --dry를 실행해 파일을 작성하지 않고 번역을 미리 보세요. -
품질 게이트 확인: 품질 게이트는 인공어에 맞게 조정이 필요할 수 있어요 — 특히 인공어가 PUA 문자를 사용한다면
requireNonLatin검사가 그래요.
:::note 인공어 품질은 LLM 지식에 따라 달라져요 LLM은 훈련 데이터에서 본 적이 있는 인공어로만 번역할 수 있어요. 잘 문서화된 인공어(Klingon, Sindarin, Dothraki)는 잘 작동해요. 잘 알려지지 않았거나 새로 만들어진 인공어는 일관성 없는 결과를 낼 수 있어요. 코칭 데이터를 사용해 품질을 개선하세요. :::
함께 보기
- Supported Languages — 방법별 사용 가능 여부가 포함된 전체 언어 표
- Script Converters — 변환 파이프라인의 기술적 세부 사항
- Translation Methods — 각 번역 방법의 작동 방식
- Configuration — 언어 및 레지스터 설정을 포함한 설정 참조
- 저자원 언어 지원하기 — 실제로 소외된 언어에 적용된 동일한 인프라