Translation Management

Over the Air (Strings)

Content is machine translated from English by Phrase Language AI.

Over-the-Air (OTA) updates offer a flexible way to deliver translation updates to mobile and web applications without requiring a new release on the App Store, Google Play, or other deployment platforms. This approach supports continuous localization and agile development workflows by reducing delays and manual processes.

The OTA feature in Phrase Strings integrates with iOS, Android, React Native, Flutter, i18next, and Rails platforms. Updates for text labels are instantly pushed to mobile apps.

OTA User Device Diagram

A new release must be created in order for the updated settings to be applied. All content included in a release must be available in Phrase Strings, which streams translations directly to the application. If the content is not present, translations will not be delivered.

For mobile applications, OTA requires integrating the relevant Software Development Kit (SDK) into the application to retrieve translations from Phrase Strings at runtime.

When starting an application implementing the iOS, Android, React Native or Flutter SDK for the first time on a device, a unique and random device identifier is generated. This identifier tracks active users over a given period of time. It is not used for any other form or means of tracking and does not contain any user or device information.

The number of OTA requests and the amount of Monthly Active Users (MAU) are limited, depending on selected pricing plan.

MAU is the number of unique devices from which translations are requested. Each device is assigned a random ID. MAU is calculated based on the number of unique IDs assigned in the last 30 days. Every interaction with Phrase servers is considered a request.

Data Sent with OTA Requests

The SDK communicates with the OTA service in order to check for updates and includes the following details with each request:

  • Device identifier (e.g. "F3AFCB10-80A2-84CB-94C0-27F5EF58876D". Unique for this app and therefore does not allow tracking a specific device.)

  • App version (e.g. "1.2.0")

  • Last update of the translation file (e.g. "1542187679")

  • SDK version (e.g. "1.0.0")

  • Locale (e.g. "de-DE")

  • File format (e.g. "strings")

  • Client (e.g. "ios")

  • Distribution ID (ID of the distribution)

  • Environment secret (to distinguish between development from production)

Domains used by the SDKs:

EU datacenter

  • ota.eu.phrase.com

  • cdn.eu.phrase.com

  • ota.phraseapp.com

  • cdn.phraseapp.com

US datacenter

  • ota.us.phrase.com

  • cdn.us.phrase.com

Phrase OTA SDKs are designed to ensure apps remain functional even if the OTA API is unavailable. In such cases, the SDK falls back to the last successfully fetched translations stored on the device, or to the bundled translations included in the app package. This prevents errors or missing strings for end-users. To guarantee reliable fallback, bundled translations should be kept up to date with every app release.

OTA Distributions

Distributions are a configured setup that defines how and where OTA updates are delivered for a specific platform or project.

Target platforms are defined within the distribution:

  • iOS

  • Android

  • Flutter

  • i18next

  • Rails

Multiple distributions are possible, but ideally there is one distribution per project. If using a distribution for iOS and Android, placeholders for the two formats are automatically converted.

Fallbacks

If language fallbacks are set in the language settings of the project the distribution is connected to, strings from the selected language will be displayed if the requested language exists, but the key is not translated.

If a country-specific language (e.g. en-GB) is used, but is not part of the release, the system can fall back on a standard version (e.g. en) of that language if it exists in the project. If the language requested is not found at all, the default locale of the project can be served instead.

Fallbacks will not work on linked keys.

Create a distribution

To create a distribution, follow these steps:

  1. From the Over the air (OTA) box on the Integrations page, click Configure or the number of configurations if some already exist.

    The Over the air page opens and displays existing configurations.

  2. Click New distribution. The Add distribution windows opens.

  3. In the General tab, provide a Name, which Project the distribution is associated with, required Languages, and required Platforms.

    • For Android distributions, click on the Android tab to select the format option that encloses any translation including HTML tags in CDATA, if required.

    • After selecting the project to associate with the distribution, the Scheduling tab becomes available. If required, use this tab to set up OTA scheduled releases in the distribution.

  4. In the Fallback languages tab, select distribution specific fallback settings as required. Fallback options are prioritized as displayed in the list.

  5. Optionally, click on the Translations tab to select the option to use the latest reviewed version of translations. Enable this option only when working with the advanced review workflow.

  6. Click Save.

    Distribution details are displayed with IDs required by the SDKs. Details can be displayed again by clicking the distribution from the Over the air page.

OTA Releases

To update translations, create a new release within the distribution. The current state of the project is exported and made available to connected clients.

To create a release, follow these steps:

  1. From the Over the air page, click Add release beside the required distribution.

    The New release window opens.

  2. Provide a Description, required Platform, Branch, Locales and App versions.

    If necessary, enter tags to include only keys with specific tags in the release.

  3. Click Save.

    The release is added to the list on the bottom of the distribution details page.

Schedule OTA releases

To set up recurring schedules for releasing the distribution, follow these steps:

  1. From the Over the air page, click on the cog wheel Modify icon beside the required distribution.

    The Edit distribution window is displayed.

  2. Select the Schedule release tab and click Enable scheduling.

    Release scheduling options are displayed.

    Note

    Scheduling options are also available upon creation of a new distribution.

  3. From the Create releases every dropdown, choose the release frequency by selecting one of the available options:

    • Day

    • Week

      Select the desired weekdays for the scheduled releases.

  4. Provide a time and relevant Time zone.

  5. If necessary, select Branch, Tags and Languages for the scheduled releases.

    • The Branch field is displayed only if branching is enabled in the project. Selecting a branch updates the list of locales and languages.

  6. Optionally, specify the application versions in the Min version and Max version fields.

    Leave blank to apply the schedule release to all versions of the app.

  7. Click Save.

    The distribution is updated with release scheduling information.

Disabling the schedule stops the automatic release of the distribution, but the configured settings are saved.

Note

Due to continuous improvements, the user interface may not be exactly the same as presented in the video.

OTA Mobile SDK and Web Library Reports

Integrating the appropriate mobile SDK or Web library allows updating of translations with a single click, but also provides metrics to measure usage. The mobile SDK and Web library reports give valuable insight into active app users and their app languages. This set of reports is available for each distribution, and the data is refreshed twice a day.

Reports are provided for number of active users, overall requests, requests per language, requests per platform and for device languages not provided.

Reports for each distribution are accessed via the Open Reports icon on the Over the air page.

OTA SDK Integration

Technical documentation for integrating the OTA SDKs is available in the README file of each project repository:

Was this article helpful?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.