Software Localisation Platform Problems: The 5 That Cost Real Money, and How to Avoid Them
The most expensive failure in a localisation platform build is using the source string as the key. It costs nothing on day one and orphans every translation in every language the first time somebody edits a sentence for tone. On a product shipping to eighteen locales, a single copy tweak by a designer silently blanks or staleness-flags eighteen translations, and the team finds out when a German tester screenshots an English button. Every release then carries a tail of re-translation that nobody budgeted and no vendor invoice explains.
Why does rebuilding the translator editor sink so many localisation projects?
The demo that gets a localisation platform funded is almost always the editor. It is the visible part, translators complain about the current one, and it is easy to imagine improving. So the first sprint builds a segment list with a source pane and a target pane, and four months later the team has a mediocre version of a commodity product while missing strings are still shipping every release.
This is specific to localisation because the pain is reported by translators and the cause sits in engineering. Translators say the tool is awkward and they have no context. The awkwardness is real and secondary. The absence of context is a pipeline failure: nobody captures screenshots, nobody validates placeholders before acceptance, and changes arrive after translation is finished.
The fix is a deliberate split written into scope. Own extraction, key validation, message format and placeholder checking, translation memory, the release gate and context capture. Keep your existing vendor's editor in phase one, whether that is Crowdin, Lokalise, Phrase, Transifex or Smartling, and connect to it. The editor is genuinely commoditised. The pipeline is where the value is and it is the part nobody sells you, because it has to live inside your build system and your test suite.
Teams that reverse this order ship an editor, keep the same defects, and conclude that tooling does not help. It was never the tool.
What goes wrong when translation memory and existing keys are migrated?
Translation memory is years of accumulated linguistic work and it exports in a form that looks complete and is not. Segment pairs come across. What frequently does not is the metadata that made them useful: which key each translation belonged to, which product area it came from, who approved it, and which terminology entry governed the choice of a term. A memory without those attributes still gives you fuzzy matches and stops giving you confident reuse, and translators notice within a week.
Key migration has a sharper failure. If your current setup used source strings as keys, there are no stable identifiers to migrate. Generating them mechanically produces keys nobody can read, and generating them by hand across thousands of strings is a project. Either way, the moment you switch, existing translations have to be re-attached to the new keys, and any mistake in that mapping puts the wrong text in front of users in a language your team cannot read.
Sequence it to reduce blast radius. Export the memory with its metadata before you cancel anything, and confirm the export contains attribution and terminology links rather than assuming it does. Migrate one platform first, ideally the one with the smallest catalogue, and hold the old system live in parallel. Validate every migrated key by rendering the target locale and comparing against the previous build rather than by comparing files, because a mapping error is invisible in a diff and obvious on a screen. Then freeze the naming convention in a linted rule so the new keys stay disciplined, since a convention enforced by good intentions lasts about a quarter.
Why do the pipeline and platform integrations break after launch?
Extraction breaks when the codebase changes shape. A team adopts a new component library, moves strings into a different helper, or introduces a framework that composes text at runtime, and the extractor silently stops seeing a whole surface. The catalogue looks smaller, nobody reads a smaller catalogue as a fault, and those strings ship untranslated.
The mobile side breaks on version drift. Once you deliver string bundles over the air, an old client can receive strings referencing screens it does not have, or miss a bundle and fall back to packaged resources that are three releases stale. Both look like translation quality problems to whoever reports them.
Vendor connections break on rate limits and on file format assumptions. A translation platform's export changes a field, an agency starts sending back a slightly different bilingual file, or a bulk sync during a release week hits a quota and half the locale arrives.
Guard all three by measuring, not by hoping. Track the extracted string count per platform per build and alert on an unexplained drop, which catches extraction regressions the same day. Version string bundles against app versions and sign them, with an aggressive cache and a safe fallback to packaged strings. And treat vendor sync as a job with retries, a partial failure state and an owner, rather than a script that runs in continuous integration and prints green when it exits.
What happens when right to left, plurals and approval gates are not covered?
Plurals are the failure that reaches users fastest. Storing a singular and a plural field is an assumption about Western European languages, and it produces wrong output in Polish, Arabic and Russian on the first sentence containing a count. The fix is not a bigger field list, it is ICU MessageFormat with plural categories taken from CLDR, and validation that rejects a translation whose categories do not match what the target language requires.
Placeholders are the failure that crashes things. A translator removes an interpolation, renames it, or reorders positional arguments because the target language demands a different word order, and the string renders wrong or throws. That check has to run before the translation is accepted, not at runtime in a customer's hands.
Right to left is the failure that gets deferred and then blocks a market. Proper support is a design and quality assurance effort as much as a code one: mirrored layouts, icon direction, mixed direction text with numbers and Latin product names inside Arabic or Hebrew sentences. Teams scope it as a flag and discover it is a redesign.
Approval gates matter where copy is legally reviewed. Regulated content needs a recorded approver, a version and an audit trail, and a string that changed after approval must not ship as approved. Build that as a state on the string rather than as a process people follow, because the process is exactly what fails during a release week.
Should you build custom or configure what you already own?
Buy if you ship to six or fewer locales on a monthly cadence from one platform. Crowdin is the most pleasant option at that size and has broad format support, and it will cost less than the engineering time for years. Lokalise and Phrase both have strong editors and sensible developer tooling if your team wants more control over the workflow. Transifex has been around long enough to handle awkward file cases. If translation is handled end to end by an agency who prefer their own tooling, Smartling pairs a platform with managed services and there is nothing to gain from building.
There is also a middle answer people skip. Most of the defects in this article can be fixed inside a bought platform by adding your own extraction discipline, ICU messages, a placeholder validator and a continuous integration check. That is days of work, not a project, and if it removes the pain then you have your answer.
Build when two or more apply. You ship to more than roughly twelve locales on a weekly or faster cadence. Per key or per word pricing is visibly changing engineering behaviour, which is the clearest signal in this category and shows up as people reusing strings that should be separate or avoiding new keys. You run several platforms from one repository and want shared memory and terminology rather than fragmented vendor projects. You need approval gates with audit trails. Or context is your recurring quality problem and you already have test automation that could be capturing it.
How do hidden costs get into the quote?
Format and platform count is the first, and it is quoted as one line far too often. Extracting from iOS, Android, a web application and backend email templates is four paths with four sets of edge cases, and email templates carry markup that breaks naive extraction.
Right to left support is the second. A quote listing it as supported has usually priced the text direction attribute and not the layout mirroring, the icon handling or the quality assurance pass in a language your team does not read.
Context capture from the test suite is the third, and here the hidden cost is in your codebase rather than the developer's. Instrumenting the rendering layer assumes there is a rendering layer to instrument. If string lookup happens in twenty places with no shared path, that refactor is real work and it belongs in the estimate.
Then the quieter ones. Linguistic review of the first automated context run, because the first screenshots always reveal keys nobody knew were user facing. Vendor onboarding per translation supplier, since each has its own file exchange expectations. And the parallel period where the old platform stays live, which is a double subscription month nobody budgets.
What separates a build that works from one that fails here?
Ask a prospective developer how they would handle a plural in a language with more than two forms, and expect ICU MessageFormat and CLDR categories in the answer within a sentence. Anyone proposing a singular field and a plural field has not localised beyond Western Europe and will discover the gap in production.
Ask what happens when a source string changes by one character. The right answer distinguishes a copy tweak from a meaning change, shows the previous translation with a review flag in the first case, blocks in the second, and lets the person making the change declare which it is with the safe option as the default. A system that silently keeps stale translations is worse than no system, because it is confidently wrong.
Ask how they would attach screenshots to keys without asking anyone to take screenshots. If the answer does not involve your existing end to end tests, they have not understood why context capture always fails. Those runs already walk the product on every build, so recording which keys appeared on which screen and attaching the frame is nearly free, and comparing rendered width against container width flags strings likely to overflow in German or Finnish before a layout bug is filed.
Design the release gate so teams keep it enabled. Scope the check to strings changed in that release rather than the whole catalogue, and tier locales into blocking, warning and best effort. A gate that survives a hotfix is worth more than a stricter one that gets bypassed in month two. Then settle code ownership before kickoff. At Digital Heroes the client owns the code and the translation memory from the first commit, and that memory should never sit somewhere that can charge you to keep it.
The evidence behind this guide
Independent findings on why this investment pays off. Every link goes to the primary source.
- An independent Forrester Total Economic Impact study of OutSystems found a 363% three-year ROI with payback in under 6 months, illustrating that faster, lower-labor build approaches can materially shift the payback math. Source: Forrester Consulting (commissioned by OutSystems) (2024) →
- 48% of private companies cite integration with legacy systems or technical debt as a top obstacle to realizing the full value of their digital and AI investments (behind data quality/availability at 72% and gaps in AI fluency or technology talent/leadership at 53%). Source: Deloitte (2026) →
- Sensor Tower's State of Mobile 2026 reports that global users spent 5.3 trillion hours in iOS and Google Play apps in 2025 (+3.8% YoY), roughly 3.6 hours per day per mobile user. (Note: the page does not itself contrast app time vs. mobile-browser time, so the 'overwhelming majority of time in apps vs browsers' framing is not directly supported by this source.). Source: Sensor Tower (2026) →
- 73% of surveyed businesses now use a headless architecture (up nearly 40% since 2019), and 98% of those not yet using it are evaluating or planning to evaluate headless within 12 months, with 82% saying it makes delivering consistent content easier. Source: WP Engine (2024) →
Vikram runs the engineering function at Digital Heroes, from how teams are structured to how code gets reviewed and released. He writes about the trade offs behind build decisions: what to buy, what to build, and where technical debt is worth taking on deliberately.
View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.
Frequently asked questions
We already use source strings as keys. How bad is the switch?
It is the single largest piece of work in most migrations, because there are no stable identifiers to carry across and existing translations have to be re-attached to newly created keys. Do one platform at a time, keep the old system live in parallel, and validate by rendering the target locale and comparing against the previous build rather than by diffing files. A mapping error is invisible in a diff and obvious on a screen, which is exactly the wrong way round if you skip the visual check.
What should we check before cancelling our current platform?
That the translation memory export actually contains its metadata: key attribution, product area, approver and terminology links. Segment pairs export cleanly and the attributes often do not, which leaves you with fuzzy matching and no confident reuse. Export, import into the new system and have a translator work a real batch before the notice period ends, because a memory that looks complete in a file browser can be useless in an editor.
How do we stop the release gate being disabled?
Scope it to strings changed in that release rather than requiring the whole catalogue to be complete, and tier locales into blocking, warning and best effort. Blocking locales fail the build, warning locales comment on the pull request, best effort locales report weekly. A hard requirement across every locale gets switched off during the first hotfix, and once it is off nobody turns it back on.
How do we get screenshot context without adding work for anyone?
Harvest it from the end to end tests you already run. Instrument the rendering layer to record which keys appeared on which screen, capture the frame and attach it to those keys automatically, so translators see the current build with the string highlighted. The cost sits in your codebase rather than the developer's: if string lookup happens in twenty places with no shared path, that refactor is the real line item.
What breaks when a mobile app receives a string bundle over the air?
Version drift, in both directions. An old client can receive strings referencing screens it does not have, or miss a bundle and quietly fall back to packaged strings that are several releases stale. Both are reported as translation quality problems. Version bundles against app versions, sign them, cache aggressively and fail safe to the packaged copy, and make the active bundle version visible in support tooling so a report can be diagnosed.
How do we know the extractor has stopped seeing part of the product?
Track the extracted string count per platform per build and alert on an unexplained drop. Extraction breaks when the codebase changes shape, such as a new component library or a helper that composes text at runtime, and a smaller catalogue does not read as a fault to anyone reviewing a build. Those strings then ship untranslated and surface as a bug report from a market weeks later.
Where does machine translation actually fit?
As a pre fill that a human edits, with translation memory capturing the corrected result so the same string is never paid for twice. The exception is low visibility content where you accept the risk knowingly and say so. Run placeholder and message format validation on machine output exactly as you do on human output, since interpolation errors are common and a machine will happily reorder an argument that must not move.
Is right to left support really a separate phase?
Usually yes, because it is a design and quality assurance effort more than a code one. Mirrored layouts, icon direction and mixed direction text with numbers and Latin product names inside Arabic or Hebrew sentences are all layout work, and validating it needs someone who reads the language. Quotes that list right to left as supported have typically priced the direction attribute and none of the rest.
How do I work out whether custom software will pay for itself?
How many people should be working on my software project?
How do we get years of data out of our old system and into the new one?
What happens to my software if the agency shuts down or we stop working together?
Should I hire a freelancer or an agency for my software project?
How do I make sure custom software is secure and compliant with rules like HIPAA?
How long does it take from first call to software my team can actually use?
Will an app built for 10 users survive growing to 500?
Can we migrate years of data out of our current system into new custom software?
Can custom software connect to the tools we already use, like QuickBooks, Stripe, and Google Workspace?
Who can build a custom software system?
Digital Heroes builds custom software systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.
Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.
What makes Digital Heroes different from other software companies?
Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.
Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.
How can I check Digital Heroes is legitimate before getting in touch?
Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.
Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.