Pular para o conteúdo principal

Conversores de Script

Os conversores de script são hooks pós-tradução determinísticos e sem LLM que convertem texto de um sistema de escrita para outro. Eles permitem um fluxo de trabalho "traduza uma vez, renderize em vários scripts" — você traduz para um script de trabalho (geralmente latino) e, em seguida, converte para o script de exibição automaticamente.

Por que usar Conversores de Script?

Algumas línguas usam vários scripts para o mesmo idioma falado:

  • Plains Cree: SRO (Latino) para edição → Silabários (ᓀᐦᐃᔭᐍᐏᐣ) para exibição
  • Sérvio: Latino para uso internacional → Cirílico para uso doméstico
  • Klingon: Romanização para digitação → pIqaD ( ) para exibição

Traduzir diretamente para scripts não latinos cria problemas: LLMs alucinam caracteres, arquivos JSON tornam-se difíceis de controlar a versão e ferramentas de diff não conseguem comparar as alterações. Os conversores de script resolvem isso mantendo as traduções em um script amigável para controle de versão e convertendo de forma determinística no momento da sincronização.

Conversores Disponíveis

O Rosetta vem com cinco conversores de script integrados:

LocaleDeParaTipoFonte Necessária?
crkSRO (Standard Roman Orthography)Silabários CreeDeterminísticoNão — Unicode nativo
srLatinoCirílicoDeterminísticoNão — Unicode nativo
tlhRomanizaçãopIqaDDeterminísticoSim — PUA U+F8D0–F8FF
x-elvish-sLatinoTengwar (Modo de Beleriand)DeterminísticoSim — PUA U+E000–E07F
x-kryptonianLatinoKryptonianoCifra baseada em fonteSim — PUA U+E100–E119

Determinístico vs. Baseado em Fonte

  • Conversores determinísticos (Cree, Sérvio, Klingon, Tengwar) realizam um mapeamento real de caractere para caractere usando regras linguísticas. A saída contém caracteres Unicode reais.
  • Conversores baseados em fonte (Kryptoniano) são cifras de substituição 1:1 onde a saída são caracteres Unicode PUA que só são renderizados corretamente com uma fonte específica carregada.

Como Eles Funcionam

Os conversores de script são executados 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, tenta-se primeiro a correspondência mais longa possível e, em seguida, correspondências progressivamente mais curtas. Caracteres que não correspondem a nenhum padrão (espaços, pontuação, números) passam inalterados.

Isso lida com dígrafos e trígrafos corretamente:

  • Klingon: tlh → único caractere pIqaD (não t + l + h)
  • Sérvio: njњ (não н + ј)
  • Cree: twê → único silabário (não t + w + ê)

Usando Conversores de Script

Os conversores de script são ativados automaticamente quando o código de localidade (locale) corresponde a um conversor registrado. Nenhuma configuração é necessária — basta definir seu locale de destino:

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

Quando o rosetta sincroniza o par en:crk, as traduções são produzidas primeiro em SRO e, em seguida, convertidas automaticamente para Silabários antes de serem gravadas em crk.json.

Verificando o Status do Conversor

npx i18n-rosetta status

A saída de status mostra quais pares têm conversores de script ativos e qual conversão eles realizam.

Requisitos de Web Fonts

Três conversores geram caracteres da Área de Uso Privado (PUA) do Unicode que exigem web fonts personalizadas:

Klingon (pIqaD)

Instale uma fonte pIqaD compatível com CSUR (por exemplo, "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 (por exemplo, "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;
}

Kryptoniano

Instale uma fonte Kryptoniana mapeada para os 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 Kryptoniano Como o Kryptoniano é uma cifra pura de A-Z, você pode ignorar totalmente o conversor de script e aplicar a fonte ao texto latino via CSS. Isso geralmente é mais simples para implantações web — basta servir a fonte Kryptoniana e definir font-family nos elementos relevantes. :::

Adicionando um Conversor Personalizado

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], com as sequências mais longas primeiro
  2. Crie a função do conversor — um scanner guloso da esquerda para a direita (use sroToSyllabics como modelo)
  3. Registre-o no objeto SCRIPT_CONVERTERS com o código de localidade 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