{
  "id": 9847607,
  "title": "Translating a content app into 46 languages without a translation API bill",
  "url": "https://urgent.news/2026/09/25/translating-a-content-app-into-46-languages-without-a-translation-api",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-25T22:12:34.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/dizijpg/translating-a-content-app-into-46-languages-without-a-translation-api-bill-34a1"
  },
  "original_language": "en",
  "account": "When adding new languages to dizi.jpg, my TV show and movie tracker, I initially planned to use a commercial translation API for descriptions lacking in a user's language. However, I quickly abandoned this idea due to the high costs involved. My alternative solution involves translating descriptions offline in batches using open-source models, and storing the results.\n\nArgos Translate offers free open-source translation models for numerous language pairs. CTranslate2 efficiently runs these models on a standard computer. A batch job selects descriptions missing in a particular language, translates them on my own machine, and stores the results in PostgreSQL. The application and server-rendered pages simply read the stored translations; no translation happens at the time of a request.\n\nBatch translation is more cost-effective since the only expense is my machine's time. Adding a new language does not lead to additional bills, and latency is zero for users as translations are already in the database. Each language version of a page can have its unique title and description, which can be served and indexed separately by search engines.\n\nHowever, there are some trade-offs. The quality may not match the best commercial systems, as the output is readable and useful for plot summaries but not polished prose. Some language pairs pass through English, and errors can accumulate when translating through an intermediary language. Batch jobs require monitoring, as long processes can halt midway, necessitating a restartable job capable of tracking completed rows. New content appears in the source language first, and in other languages after the subsequent batch run.\n\nWhile I do not recommend this method for all projects, it is worth considering for content-heavy side projects aiming to support multiple languages. By accepting slightly lower quality for predictable costs and full control over data, you can see the results by switching languages on any title page of dizi.jpg, such as Breaking Bad in Spanish. The app is also available on Google Play and the App Store.",
  "summary": "When I added more languages to dizi.jpg, my TV show and movie tracker, the obvious plan was to call a commercial translation API whenever a description was missing in the user's language. I did the math and dropped the idea almost immediately. The catalogue has a very large number of show, movie, season and episode descriptions, and multiplying that by dozens of languages turns into a bill that a…",
  "key_points": [
    "Initially planned to use commercial translation API, abandoned due to high costs",
    "Translates descriptions offline in batches using open-source models",
    "Batch translation is cost-effective, maintains zero latency for users"
  ],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}