GoLocalise

OTA localization engineering guide

OTA localization architecture and implementation guide

OTA localization delivers versioned translation data after an application is installed. A safe implementation publishes reviewed snapshots, validates downloaded artifacts, caches the last-known-good release, and always retains a bundled fallback.

What is OTA localization?

Over-the-air localization is the delivery of translation data to an application independently of its binary release. Instead of reading only strings packaged at build time, the app may use a newer reviewed translation snapshot downloaded from a localization service.

OTA is a content-delivery mechanism, not remote code execution. It is appropriate for text and localization metadata the app already knows how to render. New screens, behavior, assets, and layout capabilities still require the normal application release process.

Bundled localization versus OTA delivery

Bundled strings

  • Installed and versioned with the application binary.
  • Available on first launch with no network dependency.
  • Updated through an app, web, or server deployment.
  • Remain the safest final fallback for critical copy.

OTA strings

  • Published as a separate reviewed content release.
  • Can correct or extend supported copy after installation.
  • Require manifest, integrity, cache, and rollback design.
  • Must degrade safely when the network or service is unavailable.

The OTA localization lifecycle

  1. Translate and review.Stable keys, placeholders, plurals, and locale values are reviewed before becoming eligible for release.
  2. Publish an immutable snapshot.Each environment receives a versioned manifest and deterministic locale artifacts rather than a mutable live document.
  3. Fetch outside the lookup path.The client asks for a manifest with a read-only credential, then downloads only the artifact for the active locale.
  4. Validate and cache atomically.Scope, release order, origin, byte size, and content hash are checked before the last-known-good cache is replaced.
  5. Resolve locally and roll forward.Lookup stays synchronous. A rollback is published as another release, preserving history and client version ordering.

How does OTA localization work offline?

Network access should never sit inside a string lookup. A resilient client initializes local state from persistent cache, optionally refreshes in the background, and resolves from in-memory OTA content. If no OTA value is available, it uses content bundled with the app, then a caller fallback or the key.

GoLocalise's JavaScript, Swift, and Kotlin clients follow this model. Failed requests and invalid artifacts do not replace the last-known-good cache. Applications can therefore start and resolve translations during an API or CDN outage.

Failure scenarios to design and test

No network or timeout

Continue with memory, persistent cache, or bundled strings.

Invalid or partial artifact

Reject it before installation and retain the previous cache.

Wrong project or environment

Validate manifest scope rather than trusting the request URL.

Older release returned

Keep the newer local version and do not move backward silently.

Missing key

Use bundled content, an explicit fallback, or the stable key.

Bad published copy

Publish a new rollback release from known historical content.

A practical GoLocalise manifest request

Runtime clients use a public, read-only gl_sdk_ credential. The manifest identifies the current immutable release and the locale artifact's URL, hash, and byte size. SDKs perform this exchange during initialization or refresh—not during synchronous translation lookup.

OTA manifest
curl --fail \
  -H "Authorization: Bearer gl_sdk_REPLACE_ME" \
  "https://api.golocalise.me/ota/v1/projects/PROJECT_ID/environments/production/manifest?locale=en"

Platform-specific setup is documented in the Swift/iOS guide and Kotlin/Android guide. Web and server setup is available in the Developer Hub.

When OTA is appropriate—and when it is not

OTA is a good fit for reviewed copy corrections, terminology changes, and translations for UI capabilities already present in the installed app. It is less suitable for legal or safety-critical text that must remain tied to a particular binary unless your release controls make that relationship explicit.

Prefer bundled strings when first-launch availability is the only requirement, the product changes infrequently, or the operational cost of a content release system is not justified. Most robust mobile implementations use both: a complete bundled baseline plus validated OTA updates.

Safe rollout checklist

  • Separate Development, Staging, and Production content.
  • Require review before content becomes release-eligible.
  • Make releases immutable and address artifacts by content hash.
  • Use public credentials with read-only, project-scoped access.
  • Validate scope, origin, size, and hash before replacing cache.
  • Exercise first launch offline and corrupt-cache recovery.
  • Keep bundled translations for critical and startup copy.
  • Make rollback create a new auditable release.

Implement with GoLocalise

Connect a project to a production-ready SDK.

Publish a reviewed release, create a read-only SDK credential, and keep bundled translations as the final fallback.