<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[VeluTranslate]]></title><description><![CDATA[VeluTranslate]]></description><link>https://velutranslate.hashnode.dev</link><image><url>https://cdn.hashnode.com/res/hashnode/image/upload/v1593680282896/kNC7E8IR4.png</url><title>VeluTranslate</title><link>https://velutranslate.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 12 Oct 2026 07:58:28 GMT</lastBuildDate><atom:link href="https://velutranslate.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Cloudflare Went Down. It Made Us Rethink How Our Games Load Translations.]]></title><description><![CDATA[When we were building VeluTranslate, one of the things we wanted was pretty simple: developers should be able to update their game's translations without shipping a new build every time.
We eventually]]></description><link>https://velutranslate.hashnode.dev/cloudflare-went-down-it-made-us-rethink-how-our-games-load-translations</link><guid isPermaLink="true">https://velutranslate.hashnode.dev/cloudflare-went-down-it-made-us-rethink-how-our-games-load-translations</guid><category><![CDATA[cloudflare]]></category><category><![CDATA[GameDev]]></category><category><![CDATA[webdevelopment]]></category><category><![CDATA[unreal-engine]]></category><dc:creator><![CDATA[velu]]></dc:creator><pubDate>Fri, 09 Oct 2026 16:09:38 GMT</pubDate><content:encoded><![CDATA[<p>When we were building VeluTranslate, one of the things we wanted was pretty simple: developers should be able to update their game's translations without shipping a new build every time.</p>
<p>We eventually ended up using Cloudflare CDN to deliver translation files to games, while the web application handled editing, managing projects, and publishing updates.</p>
<p>It made sense for what we were doing. Translation files don't change every few seconds, and there wasn't much reason for every game client to keep requesting the same files from our main server.</p>
<p>We also had synchronization and cache purging in place, so updated translations could be published without waiting for a fixed cache expiration.</p>
<p>Everything seemed fine.</p>
<p>Then Cloudflare actually went down.</p>
<h2>This wasn't a test</h2>
<p>We hadn't planned a failure simulation or anything like that. Cloudflare was simply unavailable for a while.</p>
<p>And that's when we started thinking more seriously about how much our system depended on it.</p>
<p>If Cloudflare is down, our website might be unavailable too. Developers may not be able to log in, edit translations, or manage their projects.</p>
<p>That's annoying, obviously.</p>
<p>But there's a difference between a developer not being able to update a translation for an hour and a player not being able to load the translations that already exist.</p>
<p>A player doesn't care whether our admin dashboard is working.</p>
<p>They just want to launch their game, open the menu, and play.</p>
<p>So we started asking ourselves: why should an outage affecting the management side also affect translation delivery?</p>
<p>That question is what pushed us toward an independent fallback server.</p>
<h2>Keeping a copy outside Cloudflare</h2>
<p>The idea wasn't to replace Cloudflare. We still wanted it to handle normal translation delivery.</p>
<p>But we needed another place where the published translations would be available.</p>
<p>So we added a separate fallback server, outside Cloudflare, with its own copy of the translation files.</p>
<p>Under normal conditions, the game can load translations through the CDN.</p>
<p>If that route isn't available, it can try the fallback source instead.</p>
<p>The fallback doesn't need the whole translation management system. It doesn't need an editor, project settings, or all the other features of VeluTranslate.</p>
<p>Its job is much simpler: have a copy of the files ready when the primary delivery path isn't working.</p>
<p>We liked that separation. Even if the website used for managing translations is temporarily unavailable, there can still be another way for a game to retrieve its existing language files.</p>
<p>Of course, this doesn't mean every possible outage is solved. The fallback server can fail too, and clients still need a working connection to reach it.</p>
<p>But we no longer have to rely entirely on one delivery provider.</p>
<h2>There's a trade-off: the fallback may be slightly behind</h2>
<p>Here's one detail we had to accept.</p>
<p>Our fallback server isn't synchronized with every translation change in real time.</p>
<p>It keeps its own copy, updated through a separate synchronization process.</p>
<p>In normal operation, that copy might be around <strong>5–10 minutes behind</strong>, depending on when the latest sync completed.</p>
<p>Let's say a developer fixes a translation and publishes the update.</p>
<p>The new version reaches the primary delivery system, but the fallback hasn't completed its next synchronization yet.</p>
<p>If Cloudflare becomes unavailable at that exact moment, a player might receive the previous version of that string.</p>
<p>And for us, that's usually fine.</p>
<p>Would we prefer the latest translation? Sure.</p>
<p>But if the choice is between a slightly older translation and not being able to retrieve one at all, we'd rather have the older one.</p>
<p>It's worth noting that 5–10 minutes isn't a guaranteed maximum delay. If synchronization stops working or an outage lasts longer, the fallback copy could become older.</p>
<p>That's something we have to account for.</p>
<p>Still, for the kind of content we're delivering, this trade-off makes sense to us.</p>
<h2>What the setup looks like now</h2>
<p>We've ended up with a few separate responsibilities.</p>
<p><strong>The web application</strong> is where developers manage projects, languages, and translations.</p>
<p><strong>The synchronization process</strong> handles publishing translation updates.</p>
<p><strong>Cloudflare CDN</strong> is the primary way games retrieve published language files.</p>
<p><strong>The fallback server</strong> keeps a separate copy outside Cloudflare, ready to serve those files if the primary route isn't available.</p>
<p>It isn't an especially complicated idea when written down like that.</p>
<p>Getting there took a little longer, though. :)</p>
<p>And there are still plenty of details behind it, especially around keeping the copies synchronized and making sure clients behave correctly when something fails.</p>
<p>For now, the important part is that our translation management interface and our translation delivery paths don't all have to share exactly the same availability.</p>
<h2>And what if the player has no internet at all?</h2>
<p>The fallback server helps when Cloudflare is unavailable but the player still has internet access.</p>
<p>It doesn't help much if the player is completely offline.</p>
<p>That's where local translations come in.</p>
<p>Our Unreal Engine plugin can keep previously downloaded translations on the player's device. Once they're available locally, the game can continue using them without connecting to a server.</p>
<p>Developers can also bundle language JSON files directly into their game build.</p>
<p>We actually recommend doing that when possible.</p>
<p>It means the game already has translations available on its very first launch, even if the player has never connected to the internet.</p>
<p>If the files aren't bundled, the plugin can download and store them during a successful online session.</p>
<p>For other integrations using our Runtime API, developers handle local caching and offline behavior in their own applications.</p>
<p>So we now think about translation availability in a few different situations: normal online delivery, a problem with the primary CDN, and a player who has no connection at all.</p>
<p>They need slightly different solutions.</p>
<h2>What we took away from the outage</h2>
<p>The funny thing is, we didn't add this fallback because we were sitting around planning for every possible disaster.</p>
<p>A real outage happened, and it made us question something we'd previously been comfortable with.</p>
<p>Until then, we'd spent a lot of time thinking about how to publish translations efficiently and how to push updates without rebuilding a game.</p>
<p>We hadn't paid quite as much attention to what would happen if the service delivering those files became unavailable.</p>
<p>That experience changed how we looked at it.</p>
<p>We realized that <strong>being unable to edit translations and being unable to use existing translations shouldn't automatically be the same problem</strong>.</p>
<p>The website might be temporarily unreachable. A developer might have to wait before updating a string.</p>
<p>But the game should still have a reasonable chance of loading the language files it needs.</p>
<p>We're not claiming the system is immune to outages. It isn't.</p>
<p>We simply removed one dependency that became much more obvious when it failed in real life.</p>
<p>And sometimes that's how these things get built. You solve one problem, something unexpected happens, and suddenly you've got another piece of infrastructure to maintain. :D</p>
<h2>A little about VeluTranslate</h2>
<p>This fallback setup is now part of <strong>VeluTranslate</strong>, the localization platform we're building for games and applications.</p>
<p>Alongside translation delivery, it provides project and language management, an Unreal Engine plugin, and a Runtime API for other engines and custom integrations.</p>
<p>We're still developing it, and we'd like to see how it works outside our own projects.</p>
<p>That's why we've opened the <strong>VeluTranslate Pilot Program</strong> for developers who want to try it and give us feedback.</p>
<p>Selected projects can get 60 days of free access to the platform. AI translation is optional, and AI credits are billed separately if used.</p>
<p>If you're interested, you can find more details here:</p>
<p><a href="https://velutranslate.games/?utm_source=hashnode&amp;utm_medium=article&amp;utm_campaign=pilot_program#pilot-program">VeluTranslate – Pilot Program</a></p>
<h2>How would you handle this?</h2>
<p>I'm curious how other developers deal with similar situations.</p>
<p>If your game or application loads content from an external service, what happens when that service goes down?</p>
<p>Do you keep a local copy, use a second server, or just wait for the primary service to come back?</p>
<p>And for something like game translations, would you rather have the latest version at all times, or a slightly older version that's still available during an outage?</p>
<p>Would be interesting to hear how others approach it. We might learn something useful from your setups too.</p>
]]></content:encoded></item></channel></rss>