<?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/vi/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/vi/blog"/>
    <subtitle>i18n-rosetta Blog</subtitle>
    <icon>https://i18n-rosetta.com/vi/img/favicon.svg</icon>
    <entry>
        <title type="html"><![CDATA[v3.2.0: Hạ tầng chất lượng cấp độ công nghiệp]]></title>
        <id>https://i18n-rosetta.com/vi/blog/v3-2-quality-infrastructure</id>
        <link href="https://i18n-rosetta.com/vi/blog/v3-2-quality-infrastructure"/>
        <updated>2026-05-14T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[v3.2.0 là bản phát hành tập trung vào chất lượng. 702 bài kiểm tra, 163 bộ kiểm tra, không khoan nhượng với các lỗi ngầm.]]></summary>
        <content type="html"><![CDATA[<p>v3.2.0 là bản phát hành tập trung vào chất lượng. 702 bài kiểm tra, 163 bộ kiểm tra, không khoan nhượng với các lỗi ngầm.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="những-thay-đổi">Những thay đổi<a href="https://i18n-rosetta.com/vi/blog/v3-2-quality-infrastructure#nh%E1%BB%AFng-thay-%C4%91%E1%BB%95i" class="hash-link" aria-label="Liên kết trực tiếp đến Những thay đổi" title="Liên kết trực tiếp đến Những thay đổi" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="quality-gate-5-bước-kiểm-tra">Quality Gate (5 bước kiểm tra)<a href="https://i18n-rosetta.com/vi/blog/v3-2-quality-infrastructure#quality-gate-5-b%C6%B0%E1%BB%9Bc-ki%E1%BB%83m-tra" class="hash-link" aria-label="Liên kết trực tiếp đến Quality Gate (5 bước kiểm tra)" title="Liên kết trực tiếp đến Quality Gate (5 bước kiểm tra)" translate="no">​</a></h3>
<p>Mỗi bản dịch giờ đây sẽ đi qua năm bước kiểm tra xác thực tất định trước khi được ghi vào ổ đĩa:</p>
<ol>
<li class=""><strong>Empty/blank</strong> — Model không trả về gì cả</li>
<li class=""><strong>Source echo</strong> — Model trả về đầu vào tiếng Anh</li>
<li class=""><strong>Hallucination loop</strong> — Các mẫu trigram lặp lại</li>
<li class=""><strong>Length inflation</strong> — Đầu ra dài gấp 4 lần trở lên so với bản gốc</li>
<li class=""><strong>Script compliance</strong> — Sai hệ thống chữ viết (script) cho locale</li>
</ol>
<p>Không có bản dịch nào được ghi lại nếu không vượt qua cả năm bước kiểm tra. Các bản dịch thất bại sẽ được ghi log và thử lại.</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="retry-cascade">Retry Cascade<a href="https://i18n-rosetta.com/vi/blog/v3-2-quality-infrastructure#retry-cascade" class="hash-link" aria-label="Liên kết trực tiếp đến Retry Cascade" title="Liên kết trực tiếp đến Retry Cascade" translate="no">​</a></h3>
<p>Khi một batch thất bại, rosetta sẽ thử lại với các batch nhỏ dần:</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="tăng-cường-bảo-mật">Tăng cường bảo mật<a href="https://i18n-rosetta.com/vi/blog/v3-2-quality-infrastructure#t%C4%83ng-c%C6%B0%E1%BB%9Dng-b%E1%BA%A3o-m%E1%BA%ADt" class="hash-link" aria-label="Liên kết trực tiếp đến Tăng cường bảo mật" title="Liên kết trực tiếp đến Tăng cường bảo mật" translate="no">​</a></h3>
<ul>
<li class=""><strong>Prototype pollution guard</strong> — Các key <code>__proto__</code>, <code>constructor</code> bị từ chối tại thời điểm phân tích cú pháp (parse time)</li>
<li class=""><strong>Path traversal guard</strong> — Các mã locale bị thao túng không thể ghi ra ngoài các thư mục đã cấu hình</li>
<li class=""><strong>Response validation</strong> — Chỉ những key đã được gửi đi mới được chấp nhận trả về</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="cơ-sở-hạ-tầng-kiểm-tra">Cơ sở hạ tầng kiểm tra<a href="https://i18n-rosetta.com/vi/blog/v3-2-quality-infrastructure#c%C6%A1-s%E1%BB%9F-h%E1%BA%A1-t%E1%BA%A7ng-ki%E1%BB%83m-tra" class="hash-link" aria-label="Liên kết trực tiếp đến Cơ sở hạ tầng kiểm tra" title="Liên kết trực tiếp đến Cơ sở hạ tầng kiểm tra" translate="no">​</a></h3>



































<table><thead><tr><th>Bộ kiểm tra</th><th>Số bài kiểm tra</th><th>Nội dung bao phủ</th></tr></thead><tbody><tr><td>Core (8 bộ)</td><td>280+</td><td>Config, sync, CLI, watch, audit, pairs, format, init</td></tr><tr><td>Red team</td><td>89</td><td>Các đầu vào đối kháng, tấn công mã hóa</td></tr><tr><td>Contract</td><td>120</td><td>Các hợp đồng tích hợp API</td></tr><tr><td>Performance</td><td>36</td><td>Tối ưu hóa batch, suy giảm thông lượng</td></tr><tr><td>Coverage</td><td>Tổng cộng 702</td><td>Toàn bộ pipeline</td></tr></tbody></table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="prompt-caching">Prompt Caching<a href="https://i18n-rosetta.com/vi/blog/v3-2-quality-infrastructure#prompt-caching" class="hash-link" aria-label="Liên kết trực tiếp đến Prompt Caching" title="Liên kết trực tiếp đến Prompt Caching" translate="no">​</a></h3>
<p>Các system message hiện đã được tách khỏi user message, cho phép tận dụng prompt cache trên các nhà cung cấp như Anthropic và Google. Điều này giúp giảm đáng kể chi phí token cho các quá trình đồng bộ đa batch.</p>
<p>Xem <a class="" href="https://i18n-rosetta.com/vi/docs/concepts/quality-gate">tài liệu về Quality Gate</a> và <a class="" href="https://i18n-rosetta.com/vi/docs/concepts/security">tài liệu về Bảo mật</a> để biết đầy đủ chi tiết kỹ thuật.</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: Dịch nội dung Hugo Markdown]]></title>
        <id>https://i18n-rosetta.com/vi/blog/v3-1-content-translation</id>
        <link href="https://i18n-rosetta.com/vi/blog/v3-1-content-translation"/>
        <updated>2026-04-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[v3.1.0 bổ sung tính năng dịch toàn bộ nội dung Hugo Markdown — các trường front matter và nội dung phần thân, với khả năng bảo vệ tự động cho các khối mã, shortcode và các biến nội suy.]]></summary>
        <content type="html"><![CDATA[<p>v3.1.0 bổ sung tính năng dịch toàn bộ nội dung Hugo Markdown — các trường front matter và nội dung phần thân, với khả năng bảo vệ tự động cho các khối mã, shortcode và các biến nội suy.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="dịch-thuật-nhận-biết-nội-dung">Dịch thuật nhận biết nội dung<a href="https://i18n-rosetta.com/vi/blog/v3-1-content-translation#d%E1%BB%8Bch-thu%E1%BA%ADt-nh%E1%BA%ADn-bi%E1%BA%BFt-n%E1%BB%99i-dung" class="hash-link" aria-label="Liên kết trực tiếp đến Dịch thuật nhận biết nội dung" title="Liên kết trực tiếp đến Dịch thuật nhận biết nội dung" translate="no">​</a></h2>
<p>Khi dịch Markdown, bạn không thể chỉ gửi tệp thô cho một LLM. Các khối mã sẽ bị dịch. Các shortcode sẽ bị hỏng. Các biến mẫu Hugo sẽ bị xáo trộn.</p>
<p>Rosetta v3.1.0 giải quyết vấn đề này bằng <strong>cơ chế bảo vệ Unicode sentinel</strong>:</p>
<ol>
<li class="">Trước khi dịch, các khối có cấu trúc (khối mã, shortcode, mã nội tuyến, HTML) được thay thế bằng các token sentinel duy nhất</li>
<li class="">LLM chỉ nhận được văn bản có thể dịch</li>
<li class="">Sau khi dịch, các sentinel được khôi phục lại với nội dung gốc</li>
</ol>
<p>LLM không bao giờ nhìn thấy các khối mã của bạn. Nó không thể làm hỏng chúng.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="hỗ-trợ-front-matter">Hỗ trợ Front Matter<a href="https://i18n-rosetta.com/vi/blog/v3-1-content-translation#h%E1%BB%97-tr%E1%BB%A3-front-matter" class="hash-link" aria-label="Liên kết trực tiếp đến Hỗ trợ Front Matter" title="Liên kết trực tiếp đến Hỗ trợ Front Matter" translate="no">​</a></h2>
<p>Cả dấu phân cách front matter YAML (<code>---</code>) và TOML (<code>+++</code>) đều được hỗ trợ. Theo mặc định, <code>title</code>, <code>description</code>, <code>summary</code>, <code>subtitle</code>, <code>caption</code>, và <code>linkTitle</code> sẽ được dịch. Tất cả các trường khác (date, draft, tags, weight) đều được giữ nguyên.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="thiết-lập">Thiết lập<a href="https://i18n-rosetta.com/vi/blog/v3-1-content-translation#thi%E1%BA%BFt-l%E1%BA%ADp" class="hash-link" aria-label="Liên kết trực tiếp đến Thiết lập" title="Liên kết trực tiếp đến Thiết lập" 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>Xem <a class="" href="https://i18n-rosetta.com/vi/docs/guides/content-translation">Hướng dẫn dịch nội dung</a> để biết thêm chi tiết.</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: Kiến trúc dịch thuật theo từng cặp]]></title>
        <id>https://i18n-rosetta.com/vi/blog/v3-release</id>
        <link href="https://i18n-rosetta.com/vi/blog/v3-release"/>
        <updated>2026-04-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[i18n-rosetta v3.0.0 giới thiệu kiến trúc dịch thuật theo từng cặp — tính năng cốt lõi của toàn bộ hệ thống.]]></summary>
        <content type="html"><![CDATA[<p>i18n-rosetta v3.0.0 giới thiệu kiến trúc dịch thuật theo từng cặp — tính năng cốt lõi của toàn bộ hệ thống.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="những-thay-đổi">Những thay đổi<a href="https://i18n-rosetta.com/vi/blog/v3-release#nh%E1%BB%AFng-thay-%C4%91%E1%BB%95i" class="hash-link" aria-label="Liên kết trực tiếp đến Những thay đổi" title="Liên kết trực tiếp đến Những thay đổi" translate="no">​</a></h2>
<p>Các phiên bản trước sử dụng một phương pháp dịch duy nhất cho tất cả các cặp ngôn ngữ. v3.0.0 loại bỏ sự ràng buộc đó: mỗi cặp nguồn→đích có thể sử dụng một phương pháp, mô hình và cấu hình chất lượng khác nhau.</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="tại-sao-lại-theo-từng-cặp">Tại sao lại theo từng cặp?<a href="https://i18n-rosetta.com/vi/blog/v3-release#t%E1%BA%A1i-sao-l%E1%BA%A1i-theo-t%E1%BB%ABng-c%E1%BA%B7p" class="hash-link" aria-label="Liên kết trực tiếp đến Tại sao lại theo từng cặp?" title="Liên kết trực tiếp đến Tại sao lại theo từng cặp?" translate="no">​</a></h2>
<p>Kiến trúc này ra đời vì một dự án cần dùng Google Translate cho tiếng Pháp và một pipeline FST được huấn luyện cho một ngôn ngữ bản địa, chạy song song trong cùng một lệnh sync.</p>
<p>Google Translate hỗ trợ ~130 ngôn ngữ. Trên thế giới có hơn 7.000 ngôn ngữ. Hệ thống theo từng cặp đồng nghĩa với việc rosetta có thể mở rộng để hỗ trợ bất kỳ ngôn ngữ nào — bạn chỉ cần một phương pháp hoạt động hiệu quả cho cặp ngôn ngữ đó.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="các-điểm-nổi-bật-khác">Các điểm nổi bật khác<a href="https://i18n-rosetta.com/vi/blog/v3-release#c%C3%A1c-%C4%91i%E1%BB%83m-n%E1%BB%95i-b%E1%BA%ADt-kh%C3%A1c" class="hash-link" aria-label="Liên kết trực tiếp đến Các điểm nổi bật khác" title="Liên kết trực tiếp đến Các điểm nổi bật khác" translate="no">​</a></h2>
<ul>
<li class=""><strong>Hệ thống plugin</strong> — Cài đặt các phương pháp dịch được đóng gói sẵn từ eval harness</li>
<li class=""><strong>Config version 3</strong> — Schema mới với khả năng ghi đè ở cấp độ cặp</li>
<li class=""><strong>Các cấp độ chất lượng</strong> — Standard, High, Research, Verified — được hiển thị theo từng cặp trong <code>status</code></li>
</ul>
<p>Xem <a class="" href="https://i18n-rosetta.com/vi/docs/concepts/architecture">Tài liệu kiến trúc</a> để biết thiết kế của toàn bộ hệ sinh thái.</p>]]></content>
        <author>
            <name>Curtis Forbes</name>
            <uri>https://github.com/gamedaysuits</uri>
        </author>
        <category label="release" term="release"/>
    </entry>
</feed>