<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Penny Pan</title>
    <description>The latest articles on DEV Community by Penny Pan (@pennypanshdotcom).</description>
    <link>https://dev.to/pennypanshdotcom</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4051336%2Ff464597a-177d-406b-b44c-4646903d0569.png</url>
      <title>DEV Community: Penny Pan</title>
      <link>https://dev.to/pennypanshdotcom</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pennypanshdotcom"/>
    <language>en</language>
    <item>
      <title>Docusaurus i18n automation in 2026: comparing the tools for keeping translated docs in sync</title>
      <dc:creator>Penny Pan</dc:creator>
      <pubDate>Mon, 03 Aug 2026 03:48:16 +0000</pubDate>
      <link>https://dev.to/pennypanshdotcom/docusaurus-i18n-automation-in-2026-comparing-the-tools-for-keeping-translated-docs-in-sync-13l4</link>
      <guid>https://dev.to/pennypanshdotcom/docusaurus-i18n-automation-in-2026-comparing-the-tools-for-keeping-translated-docs-in-sync-13l4</guid>
      <description>&lt;h1&gt;
  
  
  Docusaurus i18n automation in 2026: comparing the tools for keeping translated docs in sync
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Docusaurus i18n handles the file structure. It doesn't handle the actual translation work or keep it from drifting out of date. Here's what's out there for that part, and where each one fits.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The problem this is actually about
&lt;/h2&gt;

&lt;p&gt;Docusaurus's i18n setup is solid — the framework handles locale routing and file structure fine. The part nobody's site config solves is what happens six months later: English docs keep changing, the Chinese (or French, or Japanese) translation was done once by a volunteer, and now it's quietly out of date. Nobody notices until someone files an issue that a code sample in the translated version doesn't match anymore.&lt;/p&gt;

&lt;p&gt;If your team is small and nobody reads the target language well enough to review a translation PR by eye, this gets worse, not better, over time.&lt;/p&gt;

&lt;p&gt;Below is what I found looking at the actual options for docusaurus translation sync — including one I work on, disclosed up front so you can weigh that accordingly.&lt;/p&gt;




&lt;h2&gt;
  
  
  Docusaurus translation tools compared at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Pricing&lt;/th&gt;
&lt;th&gt;Translation Source&lt;/th&gt;
&lt;th&gt;Sync Detection&lt;/th&gt;
&lt;th&gt;PR Workflow&lt;/th&gt;
&lt;th&gt;Best For&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitDocs Sync&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;GitHub Action&lt;/td&gt;
&lt;td&gt;Free / $19/mo Pro&lt;/td&gt;
&lt;td&gt;OpenAI / DeepSeek / BYO key&lt;/td&gt;
&lt;td&gt;Diff-based (only changed sections)&lt;/td&gt;
&lt;td&gt;Auto PR per language&lt;/td&gt;
&lt;td&gt;Teams wanting GitHub-native, set-and-forget&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure Co-op Translator&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python CLI + Action&lt;/td&gt;
&lt;td&gt;Free (Azure subscription required)&lt;/td&gt;
&lt;td&gt;Azure OpenAI&lt;/td&gt;
&lt;td&gt;Full file re-translation&lt;/td&gt;
&lt;td&gt;Manual or CI script&lt;/td&gt;
&lt;td&gt;Teams already on Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;PageTurner&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Managed CI/CD&lt;/td&gt;
&lt;td&gt;Not public&lt;/td&gt;
&lt;td&gt;Proprietary LLM&lt;/td&gt;
&lt;td&gt;Full site rebuild&lt;/td&gt;
&lt;td&gt;Managed service&lt;/td&gt;
&lt;td&gt;Teams wanting hands-off managed solution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;docusaurus-i18n&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;npm CLI&lt;/td&gt;
&lt;td&gt;Free (bring OpenAI key)&lt;/td&gt;
&lt;td&gt;OpenAI&lt;/td&gt;
&lt;td&gt;None (full re-run)&lt;/td&gt;
&lt;td&gt;None (local only)&lt;/td&gt;
&lt;td&gt;Quick one-off translations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Crowdin&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;SaaS Platform&lt;/td&gt;
&lt;td&gt;From $40/mo&lt;/td&gt;
&lt;td&gt;Human + Machine&lt;/td&gt;
&lt;td&gt;Per-string versioning&lt;/td&gt;
&lt;td&gt;Crowdin UI / API&lt;/td&gt;
&lt;td&gt;Large teams with dedicated localization staff&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Detailed Breakdown
&lt;/h2&gt;

&lt;h3&gt;
  
  
  GitDocs Sync
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A GitHub Action that watches your English docs, detects what changed, translates only the changed sections, and opens a PR per target language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You push an update to &lt;code&gt;website/docs/introduction.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;The Action diffs the change against the last translated version&lt;/li&gt;
&lt;li&gt;Only the new/modified paragraphs get translated (using OpenAI, DeepSeek, or your own API key)&lt;/li&gt;
&lt;li&gt;A PR opens with &lt;code&gt;[i18n] Update zh-CN: introduction.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;You review and merge — no manual diffing, no full re-translation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Translation memory — repeated phrases aren't re-translated&lt;/li&gt;
&lt;li&gt;Per-language PRs — merge Chinese updates independently from Japanese&lt;/li&gt;
&lt;li&gt;Configurable review flow — require human approval or auto-merge&lt;/li&gt;
&lt;li&gt;Works entirely inside GitHub — no external platform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pricing:&lt;/strong&gt; Free for public repos. Pro at $19/mo for private repos + priority translation queue.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/pennypansh-dotcom/gitdocs-sync" rel="noopener noreferrer"&gt;github.com/pennypansh-dotcom/gitdocs-sync&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Azure Co-op Translator
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Microsoft's open-source Python package for translating Markdown documentation, powered by Azure AI Services (Azure OpenAI or Azure AI Translator).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install the Python package: &lt;code&gt;pip install co-op-translator&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Configure Azure credentials&lt;/li&gt;
&lt;li&gt;Run as a CLI command or in CI/CD&lt;/li&gt;
&lt;li&gt;Translates entire Markdown files, including images (via Azure AI Vision)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image translation (screenshots, diagrams)&lt;/li&gt;
&lt;li&gt;Supports multiple Azure AI backends&lt;/li&gt;
&lt;li&gt;Can run as a GitHub Action&lt;/li&gt;
&lt;li&gt;MIT licensed, open source&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires Azure subscription (not free even for open source)&lt;/li&gt;
&lt;li&gt;Full-file translation only — no incremental diff&lt;/li&gt;
&lt;li&gt;Python-based, not native to Docusaurus/Node.js ecosystem&lt;/li&gt;
&lt;li&gt;No built-in PR workflow — you write your own CI script&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/Azure/co-op-translator" rel="noopener noreferrer"&gt;github.com/Azure/co-op-translator&lt;/a&gt; — actively maintained by Microsoft (check the repo for current star count and release cadence, both move fast). Worth a look if you're already deep in the Azure ecosystem.&lt;/p&gt;




&lt;h3&gt;
  
  
  PageTurner
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A managed translation service for open-source documentation. They host translated versions of your docs on their subdomain (e.g., &lt;code&gt;yourproject.page-turner.com/zh-Hans/&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;They connect to your docs repo&lt;/li&gt;
&lt;li&gt;Automatically translate and deploy translated versions&lt;/li&gt;
&lt;li&gt;Keep translations in sync via their CI/CD pipeline&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fully managed — no setup required&lt;/li&gt;
&lt;li&gt;Claims to maintain translations for 87+ projects&lt;/li&gt;
&lt;li&gt;Live demo available before commitment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Translations hosted on their domain, not yours — worth checking how that interacts with your existing deploy setup&lt;/li&gt;
&lt;li&gt;Pricing and service details aren't publicly documented; you'd need to request a demo to see specifics&lt;/li&gt;
&lt;li&gt;No public GitHub repository or self-hosted option, so you can't inspect how translations are generated or run it yourself&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; page-turner.com&lt;/p&gt;




&lt;h3&gt;
  
  
  docusaurus-i18n
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; A lightweight npm CLI that runs OpenAI translation against your Docusaurus i18n directory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;OPENAI_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sk-xxxxxx npx docusaurus-i18n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dead simple — one command&lt;/li&gt;
&lt;li&gt;Works with your existing Docusaurus i18n setup&lt;/li&gt;
&lt;li&gt;Free (you bring your own OpenAI key)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No sync detection — retranslates everything every time&lt;/li&gt;
&lt;li&gt;No PR workflow — runs locally, you commit manually&lt;/li&gt;
&lt;li&gt;Small project, low star count — check the repo's commit history before depending on it for anything ongoing&lt;/li&gt;
&lt;li&gt;No translation memory or incremental updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/moonrailgun/docusaurus-i18n" rel="noopener noreferrer"&gt;github.com/moonrailgun/docusaurus-i18n&lt;/a&gt; — worth noting it's listed as a community resource on the &lt;a href="https://docusaurus.io/docs/i18n/introduction" rel="noopener noreferrer"&gt;official Docusaurus i18n docs&lt;/a&gt;, which says something about it being a known quantity even at a small scale.&lt;/p&gt;




&lt;h3&gt;
  
  
  Crowdin
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; The enterprise localization platform. Supports Docusaurus via a dedicated integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Connect your Docusaurus repo to Crowdin&lt;/li&gt;
&lt;li&gt;Source strings are extracted and uploaded&lt;/li&gt;
&lt;li&gt;Translators work in Crowdin's web UI&lt;/li&gt;
&lt;li&gt;Translated content is synced back as a PR&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Key features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human + machine translation workflows&lt;/li&gt;
&lt;li&gt;Translation memory and glossary&lt;/li&gt;
&lt;li&gt;Review and approval workflows&lt;/li&gt;
&lt;li&gt;Enterprise-grade security and compliance&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pricing starts at $40/mo (free for OSS with approval)&lt;/li&gt;
&lt;li&gt;External platform — translators work outside GitHub&lt;/li&gt;
&lt;li&gt;Overkill for teams with &amp;lt;100 documentation pages&lt;/li&gt;
&lt;li&gt;Docusaurus integration requires configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Website:&lt;/strong&gt; crowdin.com&lt;/p&gt;




&lt;h2&gt;
  
  
  Which Docusaurus translation tool fits your team
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Go with GitDocs Sync if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You want everything in GitHub — no external platforms&lt;/li&gt;
&lt;li&gt;You need incremental translation (only changed content, not full re-runs)&lt;/li&gt;
&lt;li&gt;You maintain 2-5 languages with a small team&lt;/li&gt;
&lt;li&gt;You want auto-PRs you can review and merge&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Go with Azure Co-op Translator if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You're already on Azure and have credits&lt;/li&gt;
&lt;li&gt;You need image translation (screenshots with text)&lt;/li&gt;
&lt;li&gt;You're comfortable writing your own CI/CD scripts&lt;/li&gt;
&lt;li&gt;You don't need per-language PR separation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Go with Crowdin if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You have a dedicated localization team&lt;/li&gt;
&lt;li&gt;You need human review workflows with multiple translators&lt;/li&gt;
&lt;li&gt;Budget isn't a constraint&lt;/li&gt;
&lt;li&gt;You're managing 10+ languages across a large organization&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Go with docusaurus-i18n if:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You just need a one-time bulk translation&lt;/li&gt;
&lt;li&gt;You don't plan to update translations regularly&lt;/li&gt;
&lt;li&gt;You're comfortable running CLI commands locally&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I just use Google Translate on my Markdown files?&lt;/strong&gt;&lt;br&gt;
A: You can, but you'll break Docusaurus's MDX syntax, code blocks, and frontmatter. Documentation-specific tools handle these edge cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Do I need Crowdin if Docusaurus already supports i18n?&lt;/strong&gt;&lt;br&gt;
A: No. Docusaurus's built-in i18n handles the file structure. You only need a translation tool if you want to automate the actual translation work and keep it in sync.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do I detect which translations are out of date?&lt;/strong&gt;&lt;br&gt;
A: GitDocs Sync and Co-op Translator both detect changes automatically. For a manual check, compare last-commit dates between your English docs and translated copies. If &lt;code&gt;built-with.md&lt;/code&gt; was updated in English 3 months ago but the Chinese version hasn't been touched since 2022, it's out of date.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I use my own OpenAI/DeepSeek API key with these tools?&lt;/strong&gt;&lt;br&gt;
A: GitDocs Sync and docusaurus-i18n support BYO key. Co-op Translator requires Azure. PageTurner uses their own model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What about VitePress and Nextra?&lt;/strong&gt;&lt;br&gt;
A: GitDocs Sync currently focuses on Docusaurus (the most widely-used docs framework with built-in i18n). VitePress and Nextra support is on the roadmap.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I work on GitDocs Sync, one of the tools covered above (&lt;a href="https://github.com/pennypansh-dotcom/gitdocs-sync" rel="noopener noreferrer"&gt;repo&lt;/a&gt; · &lt;a href="https://pawsitivetime.com" rel="noopener noreferrer"&gt;pricing &amp;amp; docs&lt;/a&gt;). Tried to be straight about where it isn't the right fit — Crowdin and Azure Co-op Translator both cover real cases GitDocs Sync doesn't.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Last updated: August 2026 — tools, pricing, and star counts change, so check each project's page for anything current before you decide.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docusaurus</category>
      <category>i18n</category>
      <category>documentation</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Docusaurus i18n: How to keep translations in sync (manual vs Crowdin vs GitHub Action)</title>
      <dc:creator>Penny Pan</dc:creator>
      <pubDate>Tue, 28 Jul 2026 12:37:28 +0000</pubDate>
      <link>https://dev.to/pennypanshdotcom/docusaurus-i18n-how-to-keep-translations-in-sync-manual-vs-crowdin-vs-github-action-3h5</link>
      <guid>https://dev.to/pennypanshdotcom/docusaurus-i18n-how-to-keep-translations-in-sync-manual-vs-crowdin-vs-github-action-3h5</guid>
      <description>&lt;p&gt;If you maintain a Docusaurus site in more than one language, you already know the actual problem isn't translation — it's &lt;em&gt;staying in sync&lt;/em&gt;. Someone updates three paragraphs in the English docs, and six months later the Chinese (or Spanish, or whatever) version is quietly wrong, and nobody notices until a user files an issue about it.&lt;/p&gt;

&lt;p&gt;I went looking at how teams actually solve this, and it mostly comes down to three approaches. Writing this down mostly for my own reference, but sharing in case it saves someone else the research.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach 1: Just do it manually
&lt;/h2&gt;

&lt;p&gt;This is what most small-to-mid docs sites do, at least at first. A maintainer (or a translator on Slack) watches for doc PRs and manually updates the other language folders.&lt;/p&gt;

&lt;p&gt;It works fine until it doesn't. The failure mode is always the same: it's invisible. Nobody gets paged when a translated page goes stale — it just sits there, slightly wrong, until a reader notices the code sample doesn't match anymore. For a project with a handful of docs and one contributor doing translations, this is honestly fine. Past ~50-100 pages or more than one language, it stops scaling — not because the translation work is hard, but because &lt;em&gt;tracking what changed&lt;/em&gt; becomes a full-time job nobody signed up for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach 2: A translation management platform (Crowdin, Lokalise, etc.)
&lt;/h2&gt;

&lt;p&gt;These are built for exactly this problem and they're genuinely good at it — string extraction, translator workflows, in-context editing, the works. If you have a dedicated localization team or professional translators involved, this is probably still the right call.&lt;/p&gt;

&lt;p&gt;The tradeoff for a docs-only, engineering-driven project: they're built around the assumption that there's a human translator (or a review pipeline) doing the actual translating, plus a separate sync step to pull translations back into your repo. That's the right tool when translation quality and nuance matter enormously (marketing copy, legal text) or when you have translators who aren't developers and shouldn't be touching YAML or Git directly. For a docs site where the content is mostly technical explanation, code samples, and API reference, it's often more infrastructure than the problem needs — you're paying (in setup complexity, sometimes in dollars) for a workflow built around human translators when what you actually want is "keep the mirror in sync automatically, and let a human review before it ships."&lt;/p&gt;

&lt;h2&gt;
  
  
  Approach 3: Diff-based translation directly in CI
&lt;/h2&gt;

&lt;p&gt;This is the category we ended up building in (GitDocs Sync, disclosure up front), and the design point is narrow on purpose: only translate what changed, open it as a normal PR, let translation memory handle repeats.&lt;/p&gt;

&lt;p&gt;The mechanics, roughly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A GitHub Action watches your docs/ directory for changes on push&lt;/li&gt;
&lt;li&gt;It diffs the Markdown/MDX against what was last translated — untouched paragraphs get skipped entirely, so you're not re-translating (and re-paying for) content that hasn't moved&lt;/li&gt;
&lt;li&gt;Front matter, code blocks, links, and HTML tags are left alone; only prose gets sent to the model&lt;/li&gt;
&lt;li&gt;It opens a normal pull request with the translated content, so review happens the same way every other doc change gets reviewed&lt;/li&gt;
&lt;li&gt;Once merged, the source/translation pair gets stored, so identical strings anywhere else in the repo reuse it instead of hitting the API again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There's also a dry-run mode that just produces an audit — "these pages are missing translations, these are stale" — without spending any translation budget, which is useful for figuring out how big the problem actually is before turning anything on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Rough comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Manual&lt;/th&gt;
&lt;th&gt;Crowdin / TMS&lt;/th&gt;
&lt;th&gt;Diff-based Action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Setup time&lt;/td&gt;
&lt;td&gt;none&lt;/td&gt;
&lt;td&gt;hours–days&lt;/td&gt;
&lt;td&gt;~3 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Who reviews&lt;/td&gt;
&lt;td&gt;whoever remembers to&lt;/td&gt;
&lt;td&gt;dedicated translators&lt;/td&gt;
&lt;td&gt;anyone, via normal PR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cost model&lt;/td&gt;
&lt;td&gt;your time&lt;/td&gt;
&lt;td&gt;seats / word volume&lt;/td&gt;
&lt;td&gt;per translated doc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Re-translates unchanged content?&lt;/td&gt;
&lt;td&gt;no (if you remember)&lt;/td&gt;
&lt;td&gt;depends on config&lt;/td&gt;
&lt;td&gt;no, by design&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best fit&lt;/td&gt;
&lt;td&gt;tiny docs, 1 language&lt;/td&gt;
&lt;td&gt;big team, human translators, non-technical content&lt;/td&gt;
&lt;td&gt;solo/small teams, technical docs, English + a couple langs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Where this actually falls down
&lt;/h2&gt;

&lt;p&gt;Worth being upfront about this since it's easy to gloss over in anything written by the people who built the tool: diff-based translation is only as good as the underlying model for your target language pair, and for languages with fewer high-quality training resources, you'll want a human pass before you fully trust it. It's also not a fit if your "translation" is really localization — adapting examples, currency, cultural references — rather than a faithful port of the same content into another language. For straight technical docs where the English version is the source of truth and you want the other languages to track it closely, it's a good fit. For a marketing site that needs each locale to feel native, it isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does this replace a translation management platform for large teams?&lt;/strong&gt;&lt;br&gt;
No — if you have dedicated translators and a formal localization workflow, a TMS is still the right tool. This is for teams that don't have that and just want the docs to stop drifting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens to code blocks and links?&lt;/strong&gt;&lt;br&gt;
They're left untouched. Only the prose gets sent for translation; Markdown/MDX structure, front matter, and code fences are protected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it re-translate the whole file every time?&lt;/strong&gt;&lt;br&gt;
No — that's the whole point. Only the changed paragraphs get sent for translation; unchanged content is skipped and translation memory covers repeats.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure: I work on GitDocs Sync, mentioned above as one of the options. Wrote this comparison to be useful even if you land on a different tool for your situation.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>docusaurus</category>
      <category>i18n</category>
      <category>github</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
