<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="atom.xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://i18n-rosetta.com/pt/blog</id>
    <title>i18n-rosetta Blog</title>
    <updated>2026-05-14T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://i18n-rosetta.com/pt/blog"/>
    <subtitle>i18n-rosetta Blog</subtitle>
    <icon>https://i18n-rosetta.com/pt/img/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[v3.2.0: Infraestrutura de Qualidade de Nível Industrial]]></title>
        <id>https://i18n-rosetta.com/pt/blog/v3-2-quality-infrastructure</id>
        <link href="https://i18n-rosetta.com/pt/blog/v3-2-quality-infrastructure"/>
        <updated>2026-05-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A v3.2.0 é a release de qualidade. 702 testes, 163 suítes de testes, tolerância zero para falhas silenciosas.]]></summary>
        <content type="html"><![CDATA[<p>A v3.2.0 é a release de qualidade. 702 testes, 163 suítes de testes, tolerância zero para falhas silenciosas.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-mudou">O que mudou<a href="https://i18n-rosetta.com/pt/blog/v3-2-quality-infrastructure#o-que-mudou" class="hash-link" aria-label="Link direto para O que mudou" title="Link direto para O que mudou" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="quality-gate-5-verificações">Quality Gate (5 verificações)<a href="https://i18n-rosetta.com/pt/blog/v3-2-quality-infrastructure#quality-gate-5-verifica%C3%A7%C3%B5es" class="hash-link" aria-label="Link direto para Quality Gate (5 verificações)" title="Link direto para Quality Gate (5 verificações)" translate="no">​</a></h3>
<p>Toda tradução agora passa por cinco verificações de validação determinísticas antes de ser gravada em disco:</p>
<ol>
<li class=""><strong>Vazio/em branco</strong> — O modelo não retornou nada</li>
<li class=""><strong>Eco da origem</strong> — O modelo retornou a entrada em inglês</li>
<li class=""><strong>Loop de alucinação</strong> — Padrões de trigramas repetidos</li>
<li class=""><strong>Inflação de tamanho</strong> — Saída 4x+ mais longa que a origem</li>
<li class=""><strong>Conformidade de script</strong> — Script incorreto para a localidade</li>
</ol>
<p>Nenhuma tradução é gravada sem passar por todas as cinco verificações. As traduções que falham são registradas em log e tentadas novamente.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cascata-de-retries">Cascata de retries<a href="https://i18n-rosetta.com/pt/blog/v3-2-quality-infrastructure#cascata-de-retries" class="hash-link" aria-label="Link direto para Cascata de retries" title="Link direto para Cascata de retries" translate="no">​</a></h3>
<p>Quando um lote falha, o rosetta tenta novamente com lotes progressivamente menores:</p>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-text codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">Full batch (30 keys) → parse error</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  └→ Half batch (15 keys) → 2 failures</span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">      └→ Individual keys (1 each) → isolates the problem keys</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="fortalecimento-de-segurança">Fortalecimento de segurança<a href="https://i18n-rosetta.com/pt/blog/v3-2-quality-infrastructure#fortalecimento-de-seguran%C3%A7a" class="hash-link" aria-label="Link direto para Fortalecimento de segurança" title="Link direto para Fortalecimento de segurança" translate="no">​</a></h3>
<ul>
<li class=""><strong>Proteção contra prototype pollution</strong> — Chaves <code>__proto__</code>, <code>constructor</code> rejeitadas em tempo de parse</li>
<li class=""><strong>Proteção contra path traversal</strong> — Códigos de localidade manipulados não conseguem gravar fora dos diretórios configurados</li>
<li class=""><strong>Validação de resposta</strong> — Apenas as chaves que foram enviadas são aceitas de volta</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="infraestrutura-de-testes">Infraestrutura de testes<a href="https://i18n-rosetta.com/pt/blog/v3-2-quality-infrastructure#infraestrutura-de-testes" class="hash-link" aria-label="Link direto para Infraestrutura de testes" title="Link direto para Infraestrutura de testes" translate="no">​</a></h3>



































<table><thead><tr><th>Suíte</th><th>Testes</th><th>O que cobre</th></tr></thead><tbody><tr><td>Core (8 suítes)</td><td>280+</td><td>Config, sync, CLI, watch, audit, pairs, format, init</td></tr><tr><td>Red team</td><td>89</td><td>Entradas adversariais, ataques de codificação</td></tr><tr><td>Contrato</td><td>120</td><td>Contratos de integração de API</td></tr><tr><td>Performance</td><td>36</td><td>Otimização de lote, regressão de throughput</td></tr><tr><td>Cobertura</td><td>702 no total</td><td>Pipeline completo</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cache-de-prompt">Cache de prompt<a href="https://i18n-rosetta.com/pt/blog/v3-2-quality-infrastructure#cache-de-prompt" class="hash-link" aria-label="Link direto para Cache de prompt" title="Link direto para Cache de prompt" translate="no">​</a></h3>
<p>As mensagens do sistema agora são separadas das mensagens do usuário, permitindo hits de cache de prompt em provedores como Anthropic e Google. Isso reduz significativamente os custos de tokens para sincronizações de múltiplos lotes.</p>
<p>Consulte a <a class="" href="https://i18n-rosetta.com/pt/docs/concepts/quality-gate">documentação do Quality Gate</a> e a <a class="" href="https://i18n-rosetta.com/pt/docs/concepts/security">documentação de Segurança</a> para ver todos os detalhes técnicos.</p>]]></content>
        <author>
            <name>Curtis Forbes</name>
            <uri>https://github.com/gamedaysuits</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[v3.1.0: Tradução de conteúdo Hugo Markdown]]></title>
        <id>https://i18n-rosetta.com/pt/blog/v3-1-content-translation</id>
        <link href="https://i18n-rosetta.com/pt/blog/v3-1-content-translation"/>
        <updated>2026-04-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[A v3.1.0 adiciona tradução completa de conteúdo Markdown do Hugo — campos de front matter e conteúdo do corpo, com proteção automática para blocos de código, shortcodes e variáveis de interpolação.]]></summary>
        <content type="html"><![CDATA[<p>A v3.1.0 adiciona tradução completa de conteúdo Markdown do Hugo — campos de front matter e conteúdo do corpo, com proteção automática para blocos de código, shortcodes e variáveis de interpolação.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="tradução-sensível-ao-conteúdo">Tradução Sensível ao Conteúdo<a href="https://i18n-rosetta.com/pt/blog/v3-1-content-translation#tradu%C3%A7%C3%A3o-sens%C3%ADvel-ao-conte%C3%BAdo" class="hash-link" aria-label="Link direto para Tradução Sensível ao Conteúdo" title="Link direto para Tradução Sensível ao Conteúdo" translate="no">​</a></h2>
<p>Ao traduzir Markdown, você não pode simplesmente enviar o arquivo bruto para um LLM. Blocos de código são traduzidos. Shortcodes são corrompidos. Variáveis de template do Hugo são danificadas.</p>
<p>O Rosetta v3.1.0 resolve isso com a <strong>blindagem por sentinelas Unicode</strong>:</p>
<ol>
<li class="">Antes da tradução, blocos estruturados (code fences, shortcodes, código inline, HTML) são substituídos por tokens sentinelas exclusivos</li>
<li class="">O LLM recebe apenas o texto traduzível</li>
<li class="">Após a tradução, as sentinelas são restauradas com o conteúdo original</li>
</ol>
<p>O LLM nunca vê seus blocos de código. Ele não pode corrompê-los.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="suporte-a-front-matter">Suporte a Front Matter<a href="https://i18n-rosetta.com/pt/blog/v3-1-content-translation#suporte-a-front-matter" class="hash-link" aria-label="Link direto para Suporte a Front Matter" title="Link direto para Suporte a Front Matter" translate="no">​</a></h2>
<p>Tanto os delimitadores de front matter YAML (<code>---</code>) quanto TOML (<code>+++</code>) são suportados. Por padrão, <code>title</code>, <code>description</code>, <code>summary</code>, <code>subtitle</code>, <code>caption</code> e <code>linkTitle</code> são traduzidos. Todos os outros campos (date, draft, tags, weight) são preservados.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configuração">Configuração<a href="https://i18n-rosetta.com/pt/blog/v3-1-content-translation#configura%C3%A7%C3%A3o" class="hash-link" aria-label="Link direto para Configuração" title="Link direto para Configuração" translate="no">​</a></h2>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockTitle_OeMC">i18n-rosetta.config.json</div><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"contentDir"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"./content"</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token plain">npx i18n-rosetta </span><span class="token function" style="color:rgb(80, 250, 123)">sync</span><span class="token plain">   </span><span class="token comment" style="color:rgb(98, 114, 164)"># now translates content too</span><br></div></code></pre></div></div>
<p>Consulte o <a class="" href="https://i18n-rosetta.com/pt/docs/guides/content-translation">guia de Tradução de Conteúdo</a> para mais detalhes.</p>]]></content>
        <author>
            <name>Curtis Forbes</name>
            <uri>https://github.com/gamedaysuits</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[i18n-rosetta v3.0.0: Arquitetura de Tradução por Par]]></title>
        <id>https://i18n-rosetta.com/pt/blog/v3-release</id>
        <link href="https://i18n-rosetta.com/pt/blog/v3-release"/>
        <updated>2026-04-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[O i18n-rosetta v3.0.0 introduz a arquitetura de tradução por par — o recurso definidor de todo o sistema.]]></summary>
        <content type="html"><![CDATA[<p>O i18n-rosetta v3.0.0 introduz a arquitetura de tradução por par — o recurso definidor de todo o sistema.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="o-que-mudou">O que mudou<a href="https://i18n-rosetta.com/pt/blog/v3-release#o-que-mudou" class="hash-link" aria-label="Link direto para O que mudou" title="Link direto para O que mudou" translate="no">​</a></h2>
<p>As versões anteriores usavam um único método de tradução para todos os pares de idiomas. A v3.0.0 quebra esse acoplamento: cada par origem→destino pode usar um método, modelo e configuração de qualidade diferentes.</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#F8F8F2"><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"version"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token number">3</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token property">"pairs"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"en:fr"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"method"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"google-translate"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"en:ja"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"method"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"llm"</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"> </span><span class="token property">"model"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"google/gemini-2.5-pro"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token punctuation" style="color:rgb(248, 248, 242)">,</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">    </span><span class="token property">"en:crk"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">{</span><span class="token plain"> </span><span class="token property">"methodPlugin"</span><span class="token operator">:</span><span class="token plain"> </span><span class="token string" style="color:rgb(255, 121, 198)">"crk-coached-v1"</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain">  </span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><span class="token plain"></span><br></div><div class="token-line" style="color:#F8F8F2"><span class="token plain"></span><span class="token punctuation" style="color:rgb(248, 248, 242)">}</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="por-que-por-par">Por que por par?<a href="https://i18n-rosetta.com/pt/blog/v3-release#por-que-por-par" class="hash-link" aria-label="Link direto para Por que por par?" title="Link direto para Por que por par?" translate="no">​</a></h2>
<p>Essa arquitetura existe porque um projeto precisava do Google Translate para francês e de um coached FST pipeline para um idioma indígena, rodando lado a lado no mesmo comando de sincronização.</p>
<p>O Google Translate suporta ~130 idiomas. Existem mais de 7.000. O sistema por par significa que o rosetta pode escalar para qualquer idioma — você só precisa de um método que funcione para esse par.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="outros-destaques">Outros destaques<a href="https://i18n-rosetta.com/pt/blog/v3-release#outros-destaques" class="hash-link" aria-label="Link direto para Outros destaques" title="Link direto para Outros destaques" translate="no">​</a></h2>
<ul>
<li class=""><strong>Sistema de plugins</strong> — Instale métodos de tradução pré-empacotados do eval harness</li>
<li class=""><strong>Config version 3</strong> — Novo schema com overrides no nível do par</li>
<li class=""><strong>Níveis de qualidade</strong> — Standard, High, Research, Verified — exibidos por par no <code>status</code></li>
</ul>
<p>Consulte a <a class="" href="https://i18n-rosetta.com/pt/docs/concepts/architecture">Documentação de arquitetura</a> para ver o design completo do ecossistema.</p>]]></content>
        <author>
            <name>Curtis Forbes</name>
            <uri>https://github.com/gamedaysuits</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
</feed>