<?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: Ash</title>
    <description>The latest articles on DEV Community by Ash (@ashley_dd429e3cba38).</description>
    <link>https://dev.to/ashley_dd429e3cba38</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3963699%2F92f91e90-c09c-43ee-9feb-69b0357ab761.webp</url>
      <title>DEV Community: Ash</title>
      <link>https://dev.to/ashley_dd429e3cba38</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashley_dd429e3cba38"/>
    <language>en</language>
    <item>
      <title>Adding a translation MCP server to my i18n workflow: setup, real responses, and gotchas</title>
      <dc:creator>Ash</dc:creator>
      <pubDate>Mon, 07 Sep 2026 21:19:42 +0000</pubDate>
      <link>https://dev.to/ashley_dd429e3cba38/adding-a-translation-mcp-server-to-my-i18n-workflow-setup-real-responses-and-gotchas-3254</link>
      <guid>https://dev.to/ashley_dd429e3cba38/adding-a-translation-mcp-server-to-my-i18n-workflow-setup-real-responses-and-gotchas-3254</guid>
      <description>&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; two tools (&lt;code&gt;smart_translate&lt;/code&gt;, &lt;code&gt;list_languages&lt;/code&gt;), a remote MCP server at &lt;code&gt;https://www.machinetranslation.com/mcp&lt;/code&gt;, no API key, about a minute to connect. Every response below is real output from my own runs.&lt;/p&gt;

&lt;p&gt;Last sprint I shipped a settings page into eight locales. The strings lived in &lt;code&gt;en.json&lt;/code&gt;. The workflow was: open a translation tab, paste a value, copy the result, paste it into &lt;code&gt;de.json&lt;/code&gt;, repeat about forty times, then sit there wondering whether the German I just pasted said "Discard" or "Throw away."&lt;/p&gt;

&lt;p&gt;The tab switching was not the problem. The problem was that every string went through one model, and I had no idea when that model was guessing. Short UI strings are where machine translation is weakest. "Save" with no context can come back as the verb for saving a file, saving money, or rescuing someone, and nothing in the output tells you which one you got.&lt;/p&gt;

&lt;p&gt;So I moved translation into the assistant I already have open, using an MCP server.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclosure: I work on MachineTranslation.com, which builds the server below.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the server does
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://modelcontextprotocol.io/" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; is the open standard that lets an assistant call external tools inside a conversation. This server exposes two:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;smart_translate(text, source_language_code, target_language_code)
list_languages()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;smart_translate&lt;/code&gt; is the interesting one. Instead of routing your text to a single model, it runs it through 22 AI models in parallel and returns the translation they converge on. MachineTranslation.com calls this SMART consensus and puts the error reduction at roughly 90% against single-model output. Take the number as the vendor's, which it is.&lt;/p&gt;

&lt;p&gt;The mechanism is the part I care about. On a short, context-free string, disagreement between models is the signal that the string is risky. Consensus acts on that signal without me prompting three assistants and eyeballing the difference myself.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;No config file to hand-edit, no API key to paste. It is a remote server behind a login.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your assistant's connector, integration, or MCP settings.&lt;/li&gt;
&lt;li&gt;Choose the custom or "add by URL" option.&lt;/li&gt;
&lt;li&gt;Paste &lt;code&gt;https://www.machinetranslation.com/mcp&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Log in with your MachineTranslation.com account when the OAuth prompt appears.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Authorization sticks across sessions, so this is a one-time thing. It works in Claude, ChatGPT, Cursor, and anything else that supports custom MCP connectors.&lt;/p&gt;

&lt;p&gt;One caveat before you spend time on it: the MCP server is on paid plans only, including the 24-hour pass. If you want it for a single afternoon of locale work, the day pass covers it.&lt;/p&gt;

&lt;h2&gt;
  
  
  First call: the language list
&lt;/h2&gt;

&lt;p&gt;I ran &lt;code&gt;list_languages()&lt;/code&gt; first, because the codes decide whether this fits an existing locale structure or fights it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"languages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"af"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Afrikaans"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"es-419"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Spanish (Latin America)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"es-MX"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Spanish (Mexico)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pt"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Portuguese (Brazil)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pt-PT"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Portuguese (Portugal)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sr-Latn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Serbian (Latin)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sr-Cyrl"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Serbian (Cyrillic)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"zh-TW"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Chinese (Traditional)"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;333&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;333 codes, and the regional splits are the reason to read the list rather than assume.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pt&lt;/code&gt; and &lt;code&gt;pt-PT&lt;/code&gt; are separate targets. So are &lt;code&gt;es-419&lt;/code&gt;, &lt;code&gt;es-MX&lt;/code&gt;, &lt;code&gt;es-AR&lt;/code&gt;, &lt;code&gt;es-CO&lt;/code&gt;, and &lt;code&gt;es-ES&lt;/code&gt;. Serbian ships in both scripts, Somali in Latin and Arabic, Uzbek in Latin.&lt;/p&gt;

&lt;p&gt;If your locale directories are already named &lt;code&gt;pt-BR&lt;/code&gt; and &lt;code&gt;pt-PT&lt;/code&gt;, you can map them one to one instead of translating once into "Portuguese" and hoping nobody in Lisbon files a bug.&lt;/p&gt;

&lt;h2&gt;
  
  
  The test that decided it
&lt;/h2&gt;

&lt;p&gt;Machine translation eats interpolation placeholders. That is the most common way a translated string breaks a build or renders &lt;code&gt;{count}&lt;/code&gt; as literal text to a user. So this was the first real string I sent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;smart_translate(
  text: "Delete {count} items from your workspace?",
  source_language_code: "en",
  target_language_code: "de"
)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Response:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"translation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"{count} Elemente aus Ihrem Arbeitsbereich löschen?"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source_language_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target_language_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"de"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"word_count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"credits_used"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"b0cea79d-fa11-4d21-be6a-9f2b0ef79b3c"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The placeholder survived, and it moved to the front, which is where German syntax wants it. That reordering is what a naive find-and-replace pipeline gets wrong.&lt;/p&gt;

&lt;p&gt;Second test, a longer engineering sentence into Japanese:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"translation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"デプロイメントが失敗しました。キャッシュが冷えていたためです。以前のビルドにロールバックしてください。"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"source_language_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"target_language_code"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ja"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"word_count"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"source"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"target"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;51&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"credits_used"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"request_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"3b577571-1ead-4e7a-950e-aae1e69eb3b6"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It split one English sentence into three Japanese ones, which reads better than a single clause would have.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the response fields
&lt;/h2&gt;

&lt;p&gt;Three of them do real work once you are doing this at any volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;request_id&lt;/code&gt;&lt;/strong&gt; is a traceable ID per translation. I paste it into the PR next to any string I did not review by hand, so there is a record of which lines came from a machine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;credits_used&lt;/code&gt;&lt;/strong&gt; came back as 30 on both calls, one for a six-word string and one for a fifteen-word string. Budget per call, not per word, until you have measured your own mix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;word_count&lt;/code&gt;&lt;/strong&gt; is counted the way the target language works. English to German came back 6 and 6. English to Japanese came back 15 and 51, because Japanese has no spaces and the count is character-based. If you log these for cost or capacity, source and target are not comparable across scripts.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it fits the day
&lt;/h2&gt;

&lt;p&gt;I paste a block of English strings into the assistant, name the locales I need, and it calls the tool once per string and hands back JSON shaped the way my locale file already is. I read the output, fix the two or three strings I disagree with, and commit. No tab, no clipboard, no losing my place in the file.&lt;/p&gt;

&lt;p&gt;It works in the other direction too. When a translation arrives from somewhere else and I cannot read it, running the same string through consensus tells me fast whether it is in the neighborhood of correct.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does not do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It is not a TMS.&lt;/strong&gt; Two tools, text in and text out. No translation memory, no glossary enforcement, no term base. If you need "Workspace" to render identically across 400 strings, you still enforce that yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;There is no batch or file tool in the MCP surface.&lt;/strong&gt; You loop over strings in the conversation. Fine for a feature's worth of copy, wrong for a 4,000-key migration. For build-time or CI work, use the API instead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consensus is not review.&lt;/strong&gt; It lowers the odds of a bad string, it does not certify one. Legal copy, medical text, and anything on a pricing page still gets a human.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Paid only.&lt;/strong&gt; No free tier for the MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Server URL for your connector settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://www.machinetranslation.com/mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Docs and tool reference: &lt;a href="https://developer.machinetranslation.com/mcp" rel="noopener noreferrer"&gt;developer.machinetranslation.com/mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The platform, if you want to see consensus output in a browser first: &lt;a href="https://www.machinetranslation.com/" rel="noopener noreferrer"&gt;machinetranslation.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;How far apart single models land on the same text: &lt;a href="https://www.machinetranslation.com/blog/claude-ai-vs-chatgpt" rel="noopener noreferrer"&gt;Claude vs. ChatGPT for translation&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you connect it, run &lt;code&gt;list_languages()&lt;/code&gt; before you translate anything and check your locale codes against the list. The regional variants are the difference between a string that ships and a string that gets reported.&lt;/p&gt;

&lt;p&gt;What locale codes does your project actually use, and has anyone here found a reliable placeholder-safety check.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>i18n</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Have You Heard About MachineTranslation.com? It Compares Multiple AI Translators Instead of One</title>
      <dc:creator>Ash</dc:creator>
      <pubDate>Mon, 22 Jun 2026 11:58:40 +0000</pubDate>
      <link>https://dev.to/ashley_dd429e3cba38/have-you-heard-about-machinetranslationcom-it-compares-multiple-ai-translators-instead-of-one-5c65</link>
      <guid>https://dev.to/ashley_dd429e3cba38/have-you-heard-about-machinetranslationcom-it-compares-multiple-ai-translators-instead-of-one-5c65</guid>
      <description>&lt;p&gt;Most AI translation tools give you a single answer and expect you to trust it.&lt;/p&gt;

&lt;p&gt;But recently, I came across &lt;strong&gt;&lt;a href="https://www.machinetranslation.com/" rel="noopener noreferrer"&gt;MachineTranslation.com&lt;/a&gt;&lt;/strong&gt;, and one thing stood out to me: instead of relying on one model, it compares outputs from multiple AI translators and uses &lt;strong&gt;consensus technology&lt;/strong&gt; to help determine the strongest translation.&lt;/p&gt;

&lt;p&gt;That got me thinking.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Do We Trust Just One AI?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you've ever used AI for translation, you've probably noticed that different models often produce different results.&lt;/p&gt;

&lt;p&gt;Sometimes one sounds more natural.&lt;/p&gt;

&lt;p&gt;Another preserves technical accuracy better.&lt;/p&gt;

&lt;p&gt;And another might capture the tone you're aiming for.&lt;/p&gt;

&lt;p&gt;So why should we assume that one AI model always knows best?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Consensus Approach
&lt;/h2&gt;

&lt;p&gt;MachineTranslation.com takes a different route.&lt;/p&gt;

&lt;p&gt;Rather than providing a single translation, it analyzes outputs from multiple AI translation engines and identifies areas where those models agree.&lt;/p&gt;

&lt;p&gt;In other words, it tries to answer a different question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What happens when multiple AI systems collaborate instead of competing?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The concept reminds me of ensemble methods in machine learning, where combining several models often produces better and more reliable results than relying on a single one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Translation isn't just about converting words.&lt;/p&gt;

&lt;p&gt;Context, tone, terminology, and intent all matter.&lt;/p&gt;

&lt;p&gt;And AI models don't always agree on those things.&lt;/p&gt;

&lt;p&gt;That's actually useful.&lt;/p&gt;

&lt;p&gt;When several models independently arrive at similar wording, confidence in the translation increases. When they disagree, it highlights sections that might deserve a closer look.&lt;/p&gt;

&lt;p&gt;That seems especially valuable for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Technical documentation&lt;/li&gt;
&lt;li&gt;Localization projects&lt;/li&gt;
&lt;li&gt;Marketing content&lt;/li&gt;
&lt;li&gt;Product descriptions&lt;/li&gt;
&lt;li&gt;Multilingual SEO&lt;/li&gt;
&lt;li&gt;User manuals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of hiding the differences between models, MachineTranslation.com turns those differences into information.&lt;/p&gt;

&lt;h2&gt;
  
  
  Transparency Over Blind Trust
&lt;/h2&gt;

&lt;p&gt;I think one of the more interesting aspects of this approach is transparency.&lt;/p&gt;

&lt;p&gt;Many AI tools aim to hide complexity and provide a single "best" answer.&lt;/p&gt;

&lt;p&gt;MachineTranslation.com exposes alternatives and lets users compare them.&lt;/p&gt;

&lt;p&gt;In a way, it's less about asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Which AI model is the smartest?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And more about asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What can we learn when several AI models agree—or disagree?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As AI continues to evolve, I wonder whether consensus-based systems will become more common across other domains, not just translation.&lt;/p&gt;




&lt;p&gt;I'm curious what other developers think.&lt;/p&gt;

&lt;p&gt;If you had to choose between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One AI model giving you a single answer, or&lt;/li&gt;
&lt;li&gt;Multiple AI models whose outputs are compared through a consensus system,&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;which approach would you trust more?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>machinelearning</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Your app doesn’t break in translation… it mutates</title>
      <dc:creator>Ash</dc:creator>
      <pubDate>Mon, 08 Jun 2026 05:49:55 +0000</pubDate>
      <link>https://dev.to/ashley_dd429e3cba38/your-app-doesnt-break-in-translation-it-mutates-3kc9</link>
      <guid>https://dev.to/ashley_dd429e3cba38/your-app-doesnt-break-in-translation-it-mutates-3kc9</guid>
      <description>&lt;p&gt;I used to think localization was simple.&lt;/p&gt;

&lt;p&gt;You take your English UI → translate it → ship → done.&lt;/p&gt;

&lt;p&gt;Then I saw a Spanish version of a feature I built and realized something uncomfortable:&lt;/p&gt;

&lt;p&gt;The app still worked…&lt;br&gt;
but it didn’t feel like my app anymore.&lt;/p&gt;

&lt;p&gt;Same screens. Same flow.&lt;br&gt;
Different personality.&lt;/p&gt;

&lt;p&gt;That’s when it clicked: translation doesn’t just convert text, it changes behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The bug no one logs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In code, we track:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;crashes&lt;/li&gt;
&lt;li&gt;latency&lt;/li&gt;
&lt;li&gt;UI breaks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But there’s a silent failure that never shows up in logs:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The product’s intent changes across languages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A button that feels “friendly” in English might feel “commanding” in another language.&lt;br&gt;
A “quick tip” might sound like a warning.&lt;br&gt;
A “simple onboarding step” might suddenly feel like bureaucracy.&lt;/p&gt;

&lt;p&gt;Nothing is technically wrong…&lt;br&gt;
but user trust quietly drops.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I tried stress-testing translations differently&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of asking “Is this correct?”, I started asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does this still sound like us?&lt;/li&gt;
&lt;li&gt;Would a user behave differently after reading this?&lt;/li&gt;
&lt;li&gt;Does this feel consistent across 5 different language versions?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s how I ended up digging into &lt;a href="https://www.machinetranslation.com/" rel="noopener noreferrer"&gt;MachineTranslation.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What stood out wasn’t the translation itself, it was the variance.&lt;/p&gt;

&lt;p&gt;Seeing multiple translation outputs side by side exposes something most devs never notice:&lt;/p&gt;

&lt;p&gt;There is no single “correct” translation.&lt;/p&gt;

&lt;p&gt;There are only tradeoffs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tone vs precision&lt;/li&gt;
&lt;li&gt;literal vs contextual&lt;/li&gt;
&lt;li&gt;safe vs expressive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And each choice slightly reshapes the product.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;The part most dev teams miss&lt;br&gt;
*&lt;/em&gt;&lt;br&gt;
We obsess over:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;UI polish&lt;/li&gt;
&lt;li&gt;performance&lt;/li&gt;
&lt;li&gt;onboarding funnels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But ignore the fact that:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Language is part of the interface.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And unlike design systems, translation systems drift unless you actively control them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A weird realization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you localize early enough, you’re not translating an app.&lt;/p&gt;

&lt;p&gt;You’re designing multiple versions of the same product personality, one per language.&lt;/p&gt;

&lt;p&gt;And they will not naturally stay aligned.&lt;/p&gt;

&lt;p&gt;Not without intention.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Curious how others handle this&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For devs building multilingual products:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have you ever noticed your product “feels different” in another language?&lt;/li&gt;
&lt;li&gt;Do you review translations as a team, or trust tools and move on?&lt;/li&gt;
&lt;li&gt;Would you rather optimize for consistency or speed of shipping?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m genuinely curious where people draw the line between:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“localized product” vs “same product in different languages”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Because that line seems a lot blurrier in practice than in docs.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>devops</category>
      <category>discuss</category>
    </item>
    <item>
      <title>I thought translation was “solved”… until I shipped an app to users who didn’t speak my language</title>
      <dc:creator>Ash</dc:creator>
      <pubDate>Mon, 08 Jun 2026 05:36:47 +0000</pubDate>
      <link>https://dev.to/ashley_dd429e3cba38/i-thought-translation-was-solved-until-i-shipped-an-app-to-users-who-didnt-speak-my-language-c3c</link>
      <guid>https://dev.to/ashley_dd429e3cba38/i-thought-translation-was-solved-until-i-shipped-an-app-to-users-who-didnt-speak-my-language-c3c</guid>
      <description>&lt;p&gt;Most developers don’t think about translation until it hurts.&lt;/p&gt;

&lt;p&gt;It usually starts like this:&lt;/p&gt;

&lt;p&gt;You launch your app in English → you get traction → then suddenly users from Brazil, Japan, or Germany start showing up.&lt;/p&gt;

&lt;p&gt;And that’s when reality hits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your UI breaks in other languages&lt;/li&gt;
&lt;li&gt;Auto-translation changes meaning in weird ways&lt;/li&gt;
&lt;li&gt;Your “simple” onboarding flow suddenly feels confusing&lt;/li&gt;
&lt;li&gt;You realize localization is not just “text replacement”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I went down that rabbit hole recently while experimenting with multilingual product flows, and I ended up revisiting a category I used to ignore: professional translation services like &lt;a href="https://www.tomedes.com/" rel="noopener noreferrer"&gt;Tomedes&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Their approach is interesting because it’s not just “translate this text,” but more like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Here’s the context of your product, now preserve meaning across languages.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That distinction matters more than most devs expect.&lt;/p&gt;

&lt;p&gt;Because in real apps, you’re not translating words.&lt;/p&gt;

&lt;p&gt;You’re translating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;intent&lt;/li&gt;
&lt;li&gt;UX flow&lt;/li&gt;
&lt;li&gt;tone&lt;/li&gt;
&lt;li&gt;edge cases users complain about in feedback forms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Where devs usually underestimate localization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A few things I’ve personally seen break:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Product UI strings&lt;br&gt;
“Cancel” vs “Stop” vs “Dismiss”, some languages don’t treat these as interchangeable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Error messages&lt;br&gt;
A “soft error” in English can sound like a critical failure in another language.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Onboarding flows&lt;br&gt;
Step-by-step instructions can become culturally awkward or too literal.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Marketing copy inside the product&lt;br&gt;
This is where most “machine-only translation” approaches fall apart.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The uncomfortable truth&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re building indie SaaS or side projects:&lt;/p&gt;

&lt;p&gt;You can’t always brute-force your way with automated translation and hope UX stays intact.&lt;/p&gt;

&lt;p&gt;At some point, you either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;localize properly&lt;/li&gt;
&lt;li&gt;or accept that non-English users are getting a degraded experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Curious how others handle this&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For devs here who’ve shipped multilingual products:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do you rely purely on AI translation?&lt;/li&gt;
&lt;li&gt;Do you mix human + AI workflows?&lt;/li&gt;
&lt;li&gt;Or do you just stay English-first until it hurts too much?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m especially curious how you handle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;maintaining tone consistency across languages without slowing down shipping velocity&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Drop your setup or workflow, I’m trying to compare approaches.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>devops</category>
    </item>
    <item>
      <title>I built/played with two language tools and it changed how I think about “learning vs translating”</title>
      <dc:creator>Ash</dc:creator>
      <pubDate>Thu, 04 Jun 2026 03:31:23 +0000</pubDate>
      <link>https://dev.to/ashley_dd429e3cba38/i-builtplayed-with-two-language-tools-and-it-changed-how-i-think-about-learning-vs-translating-287a</link>
      <guid>https://dev.to/ashley_dd429e3cba38/i-builtplayed-with-two-language-tools-and-it-changed-how-i-think-about-learning-vs-translating-287a</guid>
      <description>&lt;p&gt;I didn’t expect to care this much about language tools.&lt;/p&gt;

&lt;p&gt;I started messing around with two different projects, &lt;strong&gt;Linguaboard&lt;/strong&gt; and &lt;strong&gt;Parley&lt;/strong&gt;, mostly out of curiosity. What I got was a surprisingly clear look at two very different ways we interact with language as developers and builders.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Linguaboard: translation as exploration, not just output&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.machinetranslation.com/games/linguaboard" rel="noopener noreferrer"&gt;Linguaboard&lt;/a&gt; isn’t trying to give you the translation.&lt;/p&gt;

&lt;p&gt;Instead, it feels more like it’s saying: “Here are several valid ways this could be expressed, pick what fits your intent.”&lt;/p&gt;

&lt;p&gt;That shift is subtle but important.&lt;/p&gt;

&lt;p&gt;Most translation tools optimize for a single “correct” answer. Linguaboard leans into ambiguity in a way that actually helps you understand nuance instead of hiding it.&lt;/p&gt;

&lt;p&gt;I found myself thinking less like:&lt;/p&gt;

&lt;p&gt;“What does this mean?”&lt;/p&gt;

&lt;p&gt;and more like:&lt;/p&gt;

&lt;p&gt;“How should this sound in context?”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Parley: learning through interaction, not memorization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.tomedes.com/games/parley" rel="noopener noreferrer"&gt;Parley&lt;/a&gt; takes a completely different angle.&lt;/p&gt;

&lt;p&gt;Instead of treating language as something to decode, it treats it as something to use. You’re not just passively consuming translations, you’re engaging with patterns, context, and recall in a more active loop.&lt;/p&gt;

&lt;p&gt;What stood out to me is how quickly it shifts you out of “study mode” and into “usage mode.”&lt;/p&gt;

&lt;p&gt;It feels closer to building intuition than studying rules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The interesting contrast&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What I didn’t expect is how well these two complement each other:&lt;/p&gt;

&lt;p&gt;Linguaboard → helps you understand nuance and meaning&lt;br&gt;
Parley → helps you internalize and use language&lt;/p&gt;

&lt;p&gt;One is about interpretation, the other about retention through interaction.&lt;/p&gt;

&lt;p&gt;Put together, they highlight something a lot of dev tools miss:&lt;/p&gt;

&lt;p&gt;Language work isn’t one problem. It’s at least two: understanding, and using.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters (especially for devs)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you’re building anything with multilingual UX, AI translation, or global audiences, you’ve probably hit this wall:&lt;/p&gt;

&lt;p&gt;Translation APIs give you “correct” text&lt;br&gt;
But correctness ≠ clarity, tone, or intent&lt;/p&gt;

&lt;p&gt;These tools made that gap feel very obvious to me.&lt;/p&gt;

&lt;p&gt;And once you see it, you can’t unsee it.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>gamedev</category>
      <category>learning</category>
    </item>
    <item>
      <title>I Thought Translation Was a Solved Problem. Then I Tried Shipping a Multilingual Product.</title>
      <dc:creator>Ash</dc:creator>
      <pubDate>Wed, 03 Jun 2026 02:52:10 +0000</pubDate>
      <link>https://dev.to/ashley_dd429e3cba38/i-thought-translation-was-a-solved-problem-then-i-tried-shipping-a-multilingual-product-3f39</link>
      <guid>https://dev.to/ashley_dd429e3cba38/i-thought-translation-was-a-solved-problem-then-i-tried-shipping-a-multilingual-product-3f39</guid>
      <description>&lt;p&gt;Like many developers, I assumed translation was basically a solved problem.&lt;/p&gt;

&lt;p&gt;Need another language? Send the text to an AI model, get the output, ship it.&lt;/p&gt;

&lt;p&gt;Simple.&lt;/p&gt;

&lt;p&gt;Then I started working on a project with users from different countries, and I quickly discovered that "technically translated" and "actually understandable" are two very different things.&lt;/p&gt;

&lt;p&gt;One model would translate a phrase perfectly.&lt;/p&gt;

&lt;p&gt;Another would miss the context entirely.&lt;/p&gt;

&lt;p&gt;A third would sound fluent but subtly change the meaning.&lt;/p&gt;

&lt;p&gt;The frustrating part wasn't that AI made mistakes. It was that different AI models made &lt;em&gt;different&lt;/em&gt; mistakes.&lt;/p&gt;

&lt;p&gt;So I started comparing outputs instead of trusting a single model.&lt;/p&gt;

&lt;p&gt;What surprised me was how often the best translation wasn't from the model I expected. Sometimes the strongest result was the one that multiple models independently agreed on.&lt;/p&gt;

&lt;p&gt;That got me thinking about a broader pattern in software development.&lt;/p&gt;

&lt;p&gt;We rarely trust a single source of truth.&lt;/p&gt;

&lt;p&gt;We use multiple tests.&lt;/p&gt;

&lt;p&gt;Multiple monitoring signals.&lt;/p&gt;

&lt;p&gt;Multiple reviewers.&lt;/p&gt;

&lt;p&gt;Redundancy is everywhere.&lt;/p&gt;

&lt;p&gt;But with AI, many of us still send a request to one model and assume the answer is correct.&lt;/p&gt;

&lt;p&gt;Now whenever I'm working with multilingual content, I compare outputs from several models before making decisions. I eventually landed on &lt;a href="https://www.machinetranslation.com/" rel="noopener noreferrer"&gt;MachineTranslation.com&lt;/a&gt; because it let me compare outputs from multiple AI models at once rather than trusting a single translation.&lt;/p&gt;

&lt;p&gt;The bigger lesson wasn't about translation.&lt;/p&gt;

&lt;p&gt;It was about AI in general.&lt;/p&gt;

&lt;p&gt;The most useful AI workflow I've found isn't asking, "Which model is best?"&lt;/p&gt;

&lt;p&gt;It's asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"What happens when several models disagree?"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's usually where the interesting insights start.&lt;/p&gt;

&lt;p&gt;Have you run into situations where multiple AI models gave completely different answers to the same prompt? I'd love to hear the weirdest example you've seen.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>I Let AI Teach Me a Language. It Failed in a Way I Didn't Expect.</title>
      <dc:creator>Ash</dc:creator>
      <pubDate>Wed, 03 Jun 2026 02:45:01 +0000</pubDate>
      <link>https://dev.to/ashley_dd429e3cba38/i-let-ai-teach-me-a-language-it-failed-in-a-way-i-didnt-expect-2hbc</link>
      <guid>https://dev.to/ashley_dd429e3cba38/i-let-ai-teach-me-a-language-it-failed-in-a-way-i-didnt-expect-2hbc</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdyvkpt5j4us2jk3mgbcu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdyvkpt5j4us2jk3mgbcu.gif" alt=" " width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Like a lot of developers, I got excited when AI tutors started appearing everywhere.&lt;/p&gt;

&lt;p&gt;The promise sounded amazing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Personalized lessons&lt;/li&gt;
&lt;li&gt;Instant feedback&lt;/li&gt;
&lt;li&gt;Infinite conversations&lt;/li&gt;
&lt;li&gt;No expensive tutors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So I decided to build &lt;a href="https://www.tomedes.com/games/parley" rel="noopener noreferrer"&gt;Parley&lt;/a&gt;, a language learning game that uses AI as the teacher.&lt;/p&gt;

&lt;p&gt;What I expected was that the biggest challenge would be translation accuracy.&lt;/p&gt;

&lt;p&gt;I was wrong.&lt;/p&gt;

&lt;p&gt;The real problem was boredom.&lt;/p&gt;

&lt;p&gt;Most AI language apps are technically impressive, but after a few days they start feeling like the same conversation repeated forever:&lt;/p&gt;

&lt;p&gt;"How are you?"&lt;/p&gt;

&lt;p&gt;"What is your favorite food?"&lt;/p&gt;

&lt;p&gt;"Tell me about your hobbies."&lt;/p&gt;

&lt;p&gt;The AI wasn't bad.&lt;/p&gt;

&lt;p&gt;The experience was.&lt;/p&gt;

&lt;p&gt;That realization completely changed how I approached building Parley.&lt;/p&gt;

&lt;p&gt;Instead of treating AI as the product, I started treating it as a game engine.&lt;/p&gt;

&lt;p&gt;Players aren't just chatting with a bot. They're completing missions, unlocking new scenarios, making choices, and using language to achieve goals.&lt;/p&gt;

&lt;p&gt;Something interesting happened during testing.&lt;/p&gt;

&lt;p&gt;People spent less time worrying about grammar mistakes and more time trying to complete the objective.&lt;/p&gt;

&lt;p&gt;And that's exactly what happens in real life.&lt;/p&gt;

&lt;p&gt;When you're ordering food in another country, you're not thinking about perfect grammar. You're trying to get the food.&lt;/p&gt;

&lt;p&gt;The language becomes a tool instead of the goal.&lt;/p&gt;

&lt;p&gt;Ironically, making learning feel less like learning made people practice more.&lt;/p&gt;

&lt;p&gt;It reminded me of something many AI builders overlook:&lt;/p&gt;

&lt;p&gt;Users don't care how intelligent the AI is.&lt;/p&gt;

&lt;p&gt;They care whether the experience is engaging enough to come back tomorrow.&lt;/p&gt;

&lt;p&gt;Sometimes the hardest problem isn't building better AI.&lt;/p&gt;

&lt;p&gt;It's building something people actually want to use.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>gamedev</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>Building a Language Learning Game Taught Me Something Unexpected About AI</title>
      <dc:creator>Ash</dc:creator>
      <pubDate>Tue, 02 Jun 2026 03:41:14 +0000</pubDate>
      <link>https://dev.to/ashley_dd429e3cba38/building-a-language-learning-game-taught-me-something-unexpected-about-ai-47ek</link>
      <guid>https://dev.to/ashley_dd429e3cba38/building-a-language-learning-game-taught-me-something-unexpected-about-ai-47ek</guid>
      <description>&lt;p&gt;When we started experimenting with AI translations, we assumed the biggest challenge would be accuracy.&lt;/p&gt;

&lt;p&gt;We were wrong.&lt;/p&gt;

&lt;p&gt;The harder problem was preference.&lt;/p&gt;

&lt;p&gt;Give two AI models the same sentence, and both translations can be technically correct. Yet people almost always have a favorite.&lt;/p&gt;

&lt;p&gt;One sounds more natural.&lt;/p&gt;

&lt;p&gt;One feels more human.&lt;/p&gt;

&lt;p&gt;One is the version they'd actually use.&lt;/p&gt;

&lt;p&gt;That observation eventually led us to build &lt;a href="https://www.tomedes.com/games/parley" rel="noopener noreferrer"&gt;Parley&lt;/a&gt;, a simple game where players compare two translations and choose the better one.&lt;/p&gt;

&lt;p&gt;What happened next surprised us.&lt;/p&gt;

&lt;p&gt;People became highly engaged with a task that looked almost trivial. They started debating word choices, discussing tone, and noticing subtle differences between translations. Some users spent far longer interacting with translation examples than they ever would reading documentation or language-learning materials.&lt;/p&gt;

&lt;p&gt;It highlighted something interesting about AI products: evaluation can be more engaging than generation.&lt;/p&gt;

&lt;p&gt;Most AI interfaces focus on creating content. But humans are often much better at judging quality than producing it from scratch. Asking someone to choose between two outputs requires less effort while still training their intuition.&lt;/p&gt;

&lt;p&gt;The experiment also changed how I think about language learning.&lt;/p&gt;

&lt;p&gt;Traditional language apps often rely on memorization and repetition. But comparing alternatives forces you to think about meaning, context, and natural expression. You're not just learning vocabulary, you're developing taste.&lt;/p&gt;

&lt;p&gt;And in a world where AI can generate endless content, taste might become one of the most valuable skills we can build.&lt;/p&gt;

&lt;p&gt;Have you seen similar patterns in AI products where evaluation turns out to be more engaging than creation?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>gamedev</category>
      <category>nlp</category>
      <category>ux</category>
    </item>
  </channel>
</rss>
