Ir para o conteúdo principal

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:

LocaleDeParaTipoFonte Necessária?
crkSRO (Standard Roman Orthography)Cree SyllabicsDeterminísticoNão — Unicode nativo
srLatinCyrillicDeterminísticoNão — Unicode nativo
tlhRomanizaçãopIqaDDeterminísticoSim — PUA U+F8D0–F8FF
x-elvish-sLatinTengwar (Mode of Beleriand)DeterminísticoSim — PUA U+E000–E07F
x-kryptonianLatinKryptonianCifra baseada em fonteSim — 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ão t + l + h)
  • Sérvio: njњ (não н + ј)
  • Cree: twê → syllabic único (não t + 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:

champollion.config.json
{
"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:

  1. Crie o mapa de conversão — um array ordenado de pares [from, to], sequências mais longas primeiro
  2. Crie a função conversor — um scanner guloso da esquerda para a direita (use sroToSyllabics como template)
  3. Registre-o no objeto SCRIPT_CONVERTERS com o código de locale como chave
  4. Adicione o campo script à entrada de registro do idioma em 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,
};

Veja Também