A quick app localization cost estimate often multiplies source words by a translation rate. That number may cover the language work while omitting the engineering, review, testing, store assets, and release coordination needed to ship. The result is a budget that looks precise and fails as soon as the first localized build reaches a device. A defensible estimate starts with a versioned release scope, separates measured inventory from assumptions, applies the right quality route to each content class, and prices verification by risk. This guide gives you a worksheet and decision rules for doing that before you request or approve a quote.
Why the per-word estimate fails
Translation volume matters, but an app is not a document. User-visible text sits inside resource formats, runtime messages, permission prompts, notifications, images, store listings, and third-party interfaces. Apple's localization overview describes text, images, string catalogs, plurals, layout, formatting, and storefront expansion as parts of the localization surface. Android's guide to localizing an app requires a complete default resource set and locale-specific alternatives that Android can select at runtime.
A word rate cannot tell you whether the source is ready for translation. It does not expose hard-coded strings, concatenated messages, ambiguous keys, broken placeholders, missing screenshots, or a checkout flow owned by an SDK. It also says nothing about who reviews legal copy, how many devices need testing, or whether the App Store listing belongs in the same release.
Current cost pages recognize this broader scope. The Stepes app localization cost guide separates translation, engineering, review, testing, and release support. Those categories beat a universal price, but they still need inputs from your catalog, architecture, release risk, and update pattern. Without those inputs, there is nothing concrete to approve against.
Freeze the scope before pricing it
Start by defining the release whose cost you want to estimate. Do not ask for "Spanish" or "five languages" without naming the surfaces and completion criteria. A useful scope snapshot includes:
- Source commit and catalog version.
- Target locales, including script and region variants.
- App platforms, minimum supported versions, and shared modules.
- Included screens, journeys, notifications, emails, and dynamic content.
- Store listing copy, screenshots, release notes, and purchase metadata.
- Accessibility labels and other nonvisual strings.
- In-scope legal or regulated copy.
- Expected release date and update cadence.
- Explicit exclusions, owners, and acceptance tests.
The source commit matters because a live catalog changes while quotes are being prepared. If 300 strings change after the estimate, the original total is not "wrong". It describes an older input. Without a snapshot, nobody can distinguish scope growth from estimation error.
Locale detail matters too. Portuguese is not a release unit if the product needs Brazilian Portuguese in the app and European Portuguese in support content. Chinese needs a script decision rather than a country guess. Treat each shipped locale as an explicit row with its own content, review, and test requirements.
The closest i18nAgent article, choosing app locales from store data, helps decide which markets deserve investment. Complete that decision first. This estimate answers the next question: what will it take to deliver the selected locales to an agreed standard?
Measure linguistic volume without double counting
Export a source inventory from the frozen catalog and classify each unit. At minimum, record its key, source text, content class, word count, change state, repetition group, technical risk, and owner. Exclude nontranslatable identifiers and approved do-not-translate terms, but keep them visible in the audit trail.
Count strings for handling effort, but use changed source words for linguistic volume.
Pricing summaries often collapse both measures into word count. Keep them separate. A settings screen with 200 one-word labels may contain fewer words than three help articles, yet it can require more contextual decisions and more individual checks. String count signals handling and ambiguity. Source words signal language production. Changed source words separate new work from content that may qualify for approved reuse.
Use four change states:
- New: no approved target exists.
- Changed: source meaning or variables changed since the approved target.
- Reusable: source and context match an approved target under your reuse policy.
- Review-only: text is unchanged, but a new screen, market, or risk classification requires another check.
Do not assume every repeated source phrase is reusable. "Save" can be a verb on one screen and a noun on another. Reuse should depend on semantic context, not exact characters alone. Conversely, do not charge full translation effort for an approved message repeated across platforms when both products share the same meaning and constraints.
A compact inventory produces totals that a vendor or internal team can challenge without guessing:
scope_version: app-8.4-localization-estimate-2
source_commit: release-candidate
locales:
- es-MX
- pt-BR
content_classes:
product_ui:
strings: 1840
new_words: 6200
changed_words: 1100
reusable_words: 9400
review_route: translator-plus-in-context-review
store_listing:
strings: 28
new_words: 1300
reusable_words: 0
review_route: market-copy-review
legal:
strings: 12
new_words: 2400
reusable_words: 0
review_route: specialist-plus-legal-approval
assumptions:
- source catalog remains frozen after estimate approval
- one review round per content class
exclusions:
- support knowledge base
- user-generated content
The numbers above illustrate structure, not a benchmark. Replace them with an export from your release.
Route quality by content risk
One quality route rarely fits the whole app. A low-risk settings label, marketing headline, medical instruction, and privacy disclosure do not need identical production and approval paths.
Divide content into classes and choose a route for each:
- Product UI may use translation plus in-context linguistic review.
- Repeated low-risk utility text may use approved translation memory or machine-assisted production with targeted review.
- Store copy may need market adaptation rather than literal translation.
- Legal, safety, or regulated text may require a specialist and named approver.
- Screenshots and images may require design production after copy approval.
For each route, price the production pass, reviewer time, expected revision rounds, and approval delay. Record which work is internal. "No vendor charge" is not the same as zero cost if product, legal, and engineering staff spend time on it.
A public Grid-Mobile localization planning issue illustrates the actual choice teams face: paid automation, contributor translation, or free manual services. It also notes that localization touches at least every screen. This is one maintainer's planning report, not a universal cost model, but it shows why the chosen workflow changes both cash expense and internal effort.
Estimate engineering and integration work
Run a readiness audit before assigning hours. Sample every resource format and critical runtime surface. Look for:
- User-facing literals outside catalogs.
- Concatenated messages and unsafe placeholders.
- Duplicate keys with different meanings.
- Missing source comments or screenshots.
- Server-authored display text.
- Locale-sensitive dates, numbers, units, and sorting.
- Custom fonts and fixed layouts.
- Locale state that does not reach widgets, extensions, emails, or SDKs.
- Build, import, export, and validation gaps.
Turn findings into tasks with an owner and estimate range. Keep one-time setup separate from per-release work. Extracting hard-coded text or adding CI validation may be expensive during the first launch and cheap afterward. Treating setup as a permanent per-locale charge overstates later costs. Hiding it inside the first translation quote understates the initial release.
Use ranges where uncertainty is real. For example, estimate a known catalog conversion separately from an investigation into third-party SDK behavior. A single total should contain a base estimate, identified risks, contingency tied to those risks, and assumptions that would trigger repricing.
Price QA from risk instead of a Cartesian product
Price localization QA from risky journeys and representative devices, not every language-device combination.
The reviewed pricing pages list QA as a cost category but do not build the estimate from a risk matrix. A risk-based matrix keeps coverage tied to likely damage instead of producing an unaffordable test plan or an arbitrary cut. First identify journeys where a localization defect blocks revenue, consent, account access, or comprehension. Then identify platform differences likely to change rendering or locale behavior.
Build three layers:
- Automated checks for every locale: file parsing, key parity, placeholders, plural structure, forbidden fallback, truncation signals, and build success.
- Representative visual and functional checks: every locale on a reference device, plus representative small, large, and right-to-left layouts where applicable.
- Deep journey checks by risk: sign-up, payment, recovery, consent, notifications, and other business-critical paths across the platform and locale combinations most likely to fail differently.
Do not test only the source language on every device and only one device in every locale. That misses interactions between translation length, script, font, layout direction, and platform behavior. Also avoid claiming that every locale requires every physical device unless a regulation or product risk actually demands it.
Estimate setup for test data, automation, and screenshots separately from execution time. Include defect triage, fixes, retesting, and one bounded regression cycle. A budget that prices finding defects but not verifying repairs is incomplete.
Include storefront and release operations
The localized build is only one deliverable. Add separate rows for store descriptions, promotional text, keywords where the store supports them, screenshots, preview media, release notes, purchase metadata, review submissions, and phased rollout checks. Name the owner for each surface.
Then include coordination work:
- Preparing and validating handoff packages.
- Answering translator questions.
- Managing version changes and late source edits.
- Tracking approvals and exceptions.
- Integrating final resources and resolving build failures.
- Producing a locale-level release report.
- Monitoring fallback and support signals after launch.
These tasks should not become a vague percentage with no explanation. If you use a project-management allowance, show what it covers and which events consume it.
Separate first launch from recurring updates
The first multilingual release establishes catalogs, context, terminology, automation, test fixtures, and ownership. Later releases usually translate a smaller diff, but they also carry maintenance costs. Forecast both.
Use historical source change volume when available. If the app changes 1,500 source words each month, estimate recurring language work from that measured rate. Add fixed release work for validation, integration, storefront updates, and regression checks. Model a low, expected, and high change scenario if the roadmap is uncertain.
Version every estimate and reconcile it with actual work so later releases use evidence instead of the first quote.
The reviewed one-off pricing pages answer "how much" at a point in time but do not turn the estimate into a reusable baseline. Actuals show which drivers you can improve. Record final new and changed words, reuse accepted, engineering hours, review rounds, QA runs, defect categories, and scope changes. Compare them with the estimate without rewriting the original assumptions.
A large variance should lead to a specific action. Unexpected engineering time may justify extraction or validation automation. Repeated legal revisions may require an earlier source freeze. Low reuse may expose unstable source copy or weak context matching. The next estimate should update the relevant driver, not simply add a blanket buffer.
Make the approval decision
Summarize the worksheet in a decision table with these columns:
| Cost area | Measured input | Rate or effort assumption | Range | Owner | Reprice trigger |
|---|---|---|---|---|---|
| Linguistic production | New and changed source words by class and locale | Approved quality route | Low to high | Localization | Source diff exceeds freeze threshold |
| Review and approval | Strings or hours by content class | Review rounds and specialist needs | Low to high | Product, market, legal | New regulated content enters scope |
| Engineering | Readiness audit tasks | Estimated hours by task | Low to high | Engineering | New runtime surface or file format |
| QA | Risk journeys and representative matrix | Setup, execution, triage, retest | Low to high | QA | Device or platform scope changes |
| Storefront and release | Deliverables by store and locale | Production and coordination effort | Low to high | Growth, release | New assets or store variant added |
| Recurring updates | Historical or forecast changed words | Release cadence and fixed checks | Low to high | Product operations | Roadmap changes materially |
Approve the plan only when the scope version, assumptions, exclusions, quality routes, acceptance criteria, and owners are explicit. Compare providers on the same worksheet. A low quote that excludes engineering and testing is not cheaper than a complete quote; it describes less work.
Your next action is to export one release-candidate catalog, classify its units, and complete the worksheet for one target locale. Review the unknowns with engineering, QA, and the language owner before requesting prices for the remaining locales.
Scope is easiest to count when strings leave in one clean package; see how to hand off app strings to translation vendors.
