Conversores de Script
Conversores de script são hooks pós-tradução determinísticos e livres de LLM que convertem texto de um sistema de escrita para outro. Eles habilitam um fluxo de trabalho "traduzir uma vez, renderizar em múltiplos scripts" — você traduz para um script funcional (tipicamente Latin), depois converte para o script de exibição automaticamente.
Por que Conversores de Script?
Alguns idiomas usam múltiplos scripts para a mesma língua falada:
- Plains Cree: SRO (Latin) para edição → Syllabics (ᓀᐦᐃᔭᐍᐏᐣ) para exibição
- Sérvio: Latin para uso internacional → Cyrillic para uso doméstico
- Klingon: Romanização para digitação → pIqaD ( ) para exibição
Traduzir diretamente para scripts não-Latin cria problemas: LLMs alucinam caracteres, arquivos JSON ficam difíceis de controlar versão, e ferramentas de diff não conseguem comparar mudanças. Conversores de script resolvem isso mantendo traduções em um script amigável ao controle de versão e convertendo deterministicamente no momento da sincronização.
Conversores Disponíveis
Champollion vem com cinco conversores de script integrados:
| Locale | De | Para | Tipo | Fonte Necessária? |
|---|---|---|---|---|
crk | SRO (Standard Roman Orthography) | Cree Syllabics | Determinístico | Não — Unicode nativo |
sr | Latin | Cyrillic | Determinístico | Não — Unicode nativo |
tlh | Romanização | pIqaD | Determinístico | Sim — PUA U+F8D0–F8FF |
x-elvish-s | Latin | Tengwar (Mode of Beleriand) | Determinístico | Sim — PUA U+E000–E07F |
x-kryptonian | Latin | Kryptonian | Cifra baseada em fonte | Sim — PUA U+E100–E119 |
Determinístico vs. Baseado em Fonte
- Conversores determinísticos (Cree, Sérvio, Klingon, Tengwar) realizam mapeamento real de caractere para caractere usando regras linguísticas. A saída contém caracteres Unicode reais.
- Conversores baseados em fonte (Kryptonian) são cifras de substituição 1:1 onde a saída são caracteres Unicode PUA que só renderizam corretamente com uma fonte específica carregada.
Como Funcionam
Conversores de script executam após a tradução como uma etapa de pós-processamento. O pipeline é:
Source (English) → LLM Translation → Working Script → Script Converter → Display Script
Por exemplo, Plains Cree:
"Welcome" → LLM → "tānisi" (SRO) → Converter → "ᑖᓂᓯ" (Syllabics)
Correspondência Gulosa da Esquerda para a Direita
Todos os conversores usam o mesmo algoritmo: em cada posição de caractere, tente a correspondência mais longa possível primeiro, depois progressivamente correspondências mais curtas. Caracteres que não correspondem a nenhum padrão (espaços, pontuação, números) passam inalterados.
Isso trata dígrafos e trígrafos corretamente:
- Klingon:
tlh→ caractere pIqaD único (nãot+l+h) - Sérvio:
nj→њ(nãoн+ј) - Cree:
twê→ syllabic único (nãot+w+ê)
Usando Conversores de Script
Conversores de script ativam automaticamente quando o código de locale corresponde a um conversor registrado. Nenhuma configuração necessária — apenas defina seu locale de destino:
{
"pairs": {
"en:crk": {
"method": "llm-coached",
"model": "google/gemini-2.5-pro"
}
}
}
Quando champollion sincroniza o par en:crk, as traduções são primeiro produzidas em SRO, depois automaticamente convertidas para Syllabics antes de escrever em crk.json.
Verificando o Status do Conversor
npx champollion status
A saída de status mostra quais pares têm conversores de script ativos e qual conversão eles realizam.
Requisitos de Fonte Web
Três conversores produzem caracteres Unicode de Área de Uso Privado (PUA) que requerem fontes web customizadas:
Klingon (pIqaD)
Instale uma fonte pIqaD compatível com CSUR (ex: "pIqaD qolqoS" ou "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)
Instale uma fonte Tengwar compatível com CSUR (ex: "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
Instale uma fonte Kryptonian mapeada para codepoints PUA 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 Abordagem alternativa para Kryptonian
Como Kryptonian é uma cifra pura A-Z, você pode pular o conversor de script inteiramente e aplicar a fonte ao texto Latin via CSS. Isso geralmente é mais simples para deployments web — apenas sirva a fonte Kryptonian e defina font-family nos elementos relevantes.
:::
Adicionando um Conversor Customizado
Para adicionar um conversor para um novo idioma, edite lib/scripts.js:
- Crie o mapa de conversão — um array ordenado de pares
[from, to], sequências mais longas primeiro - Crie a função conversor — um scanner guloso da esquerda para a direita (use
sroToSyllabicscomo template) - Registre-o no objeto
SCRIPT_CONVERTERScom o código de locale como chave - Adicione o campo
scriptà entrada de registro do idioma emregisters.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,
};
Veja Também
- Conlangs, Scripts & Orthography — fontes PUA, Unicode, adicionando novos conversores
- Quality Gate — validação que executa antes da conversão de script
- Supported Languages — quais idiomas têm conversores de script
- Support a Low-Resource Language — SRO→Syllabics em contexto
- Cookbook: FST-Gated Pipeline — conversão de script em um pipeline multi-estágio