FAQ Frequently Asked Questions

General

Are there any prerequisites to using GL Strings to localize my mobile app?
There are no special technical or architectural prerequisites for using GL Strings/Applanga mobile SDKs, but you need to have your mobile app prepared for localization for the given platform.

  • On Apple devices your keys need to be in a .strings file in order to be automatically uploaded to the GL Strings Dashboard. In order to have your dynamic texts localized, you have to use NSLocalizedString in your source code. Additionally you need to have Base Localization enabled for .storyboard and .nib files to have their static texts localized. At runtime, all static and dynamic texts will be automatically synchronized with the Dashboard.
  • On Android devices your keys need to be in a string resource .xml file in the /res/values/ folder in order to be automatically uploaded to the GL Strings Dashboard. To have your dynamic texts localized, you have to use getString in your source code. At runtime, all dynamic and static texts in your layout files will be automatically synchronized with the Dashboard.
How long does it take to integrate the GL Strings/Applanga SDK?
Literally minutes.

There are some tweaks for the different platforms we support, but in general there are two parts: the SDK and the Settingsfile. The first can be placed inside your app with a single line of code, while the latter needs to be downloaded and copied into a folder inside your project.
What is the SDK Settingsfile?
The Settingsfile combines two features:

  • For one, it is part of the regular integration and stores a unique identifier and some configurations to reduce the manual integration effort.
  • Additionally, when you download the Settingsfile from GL Strings - manually, via SDK build script or via CLI - all translations currently in your project are saved in the Settingsfile.
  • Therefore, you should always download and include the latest version of the file within the build you submit to the app stores to ensure the most recent translations are included in your regular release. If your users have insufficient internet connection for live updates, the SDK will revert to the translation inside the Settingsfile on the device.
What happens if the GL Strings service is down for maintenance or the app is offline?
Your mobile app will use locally cached translations, either from the last successful over-the-air update from GL Strings, from the Settingsfile, or your actual string file within the app, so your users won’t be impacted if Gl Strings' servers are not be reachable for any reason.
Are there any fallback mechanics? What will my users see if, for some reason, GL Strings is not reachable in that moment?
There is a series of fallbacks in place even if the SDKs can’t connect.
When the app is initially started, the Settingsfile is parsed and all contained translations are put into a cache database, which in turn gets updated on every successful over-the-air update. If, for example, the app doesn't have a network connection, it still has all the cached translations from the Settingsfile. When a translation for a key is not found, either through an over-the-air update or in the Settingsfile, the SDK falls back to check if the key is in the strings files from the app itself.
Your latest changes will always be available for the SDK to fetch. We use the Amazon Content Delivery Network (CDN) to distribute your translation through data centers all over the world. The CDN helps GL Strings to provide high reliability, availability, and redundancy.
Can you guarantee uptime?
We implemented a series of systems that ensure service availability and so far we have not experienced any outages. If you need a guaranteed uptime, it's part of Enterprise-level plans only. Please get in touch with us for more information.
Which security measures are in place? Do you store any personal app user data?
All our traffic is encrypted and we use an additional HMAC algorithm to ensure the data is not tampered with. We do not store or transfer any data that would identify your app’s users.
How long does it take until new or updated translations are available to my users?
Up to 10 minutes. That is the period of time in which the content delivery network (CDN) in front of our servers updates.
How can my app be translated with GL Strings?
There are several ways to translate your app with GlobalLink Strings:

  • You can simply translate it yourself, together with your team, or with external translators of your choice. Simply add them to your Team in the Dashboard.
  • You can use the integrated machine translation tool (we recommend you only use it for testing purposes or if you are not worried about translation quality).
  • To get the very best quality of translation we recommend using Transperfect Translation Services. Transperfect Translations can easily be ordered using our integrated Order Menu. Get in touch with us if you are interested in learning more.
How can the translators have context while they work within GL Strings?
As a manager, admin, or owner, you can add a description and a screenshot for every entry. With descriptions and screenshots translators are given valuable context for each key value. Both types of context can either be added manually through the dashboard, imported, or uplodaded via an integration.
I don’t have a translator. Can I access translation services through GL Strings?
Yes! Our internal team of professional Transperfect translators provide high quality translations and thoroughly review your content to ensure complete satisfaction. For more info, see the Translation Services section below or reach out to us directly.
Can I use GlobalLink Strings for my website and web apps as well?
Yes! Besides the integration for native mobile apps (SDKs) and our design tool plugins, we also have an API and CLI option to integrate with your website or web app.

Technical Issues & Platform Features

I have integrated the SDK, but my keys are not uploading to the connected project.
Make sure your app is set to Draft or Debug mode. If that’s the case, try refreshing the page - it may take up to 30 seconds for keys to be sent from the app. Also, check the logs on the app start to find the SDK specific log messages informing you about the upload progress. If you’re still running into problems, find more troubleshooting information in our Integration Documentation.
I have integrated the SDK, but the keys from my Storyboards are not shown in the dashboard.
Base localization needs to be enabled in all Storyboard files. Learn how here.
Why don’t you allow renaming of keys that have been uploaded by the app?
It seems confusing to deal with stuff like “YAR-GZ-Ffx.text”.
These kinds of keys are generated by iOS and refer to the ObjectID of the Storyboard Element. Unfortunately, Apple doesn't allow renaming of these keys.
Already translated strings are showing up as empty keys (with no value) in my project. Where are they coming from?
It’s possible that the getString (Android)/ NSlocalizedString (iOS) method called on an already localized string. The method normally expects a key, but if it’s presented with a string, it will create an empty key with the string as the key name. Make sure that getString/NSlocalizedString is used correctly where the described behavior occurs.
Will the languages I add to my project in Gl Strings appear as supported languages in the Apple App Store?
Yes, but you need at least one .string file in your project for every language. The file itself can stay empty.
Can I translate native iOS dialogs with GlobalLink Strings as well?
Yes, but you need at least one .string file in your project for every language. The file itself can stay empty.
My iOS app is built with Swift. Could that be a problem?
No. GlobalLink Strings' iOS SDK and Swift play nicely together.
In addition to iOS and Android, do you support Java or other platforms as well?
Besides iOS and Android and their different flavors (e.g. Swift, SwiftUI, Kotlin, Jetpack Compose) we have SDKs for Flutter, React Native, Xamarin, and Unity. The Rest API or the CLI might also be suitable integration options, not only for mobile apps, but for any kind of string-based software localization use-case.
My app is available on both Android and iOS. Will the imported translations work on both?
You can either create two separate projects - one Android and one iOS - or set up only one cross-platform project. Between the platforms, the key names will be different, but if both platforms have the same source language text for an entry, there are features like linking, placeholder conversion and the translation memory to match and reuse existing translations accordingly - you won’t have to translate the same text twice.
What if there is certain text that I don’t want to be translated in my project?
If you don’t want an entry translated in your app - in specific languages or in general - you can lock the entry using the lock symbol in the upper right-hand corner in the detail view or via the multi-edit actions.

On Android, you have the option to mark keys with the 'translatable="false"' attribute. Keys marked this way won't be uploaded to the dashboard by the SDK.
How do I remove keys from my project?
You can only delete on the key name level, including all source values and translations, but if you delete the keys only from the projcect and they are still present in the app's string file, they will be reuploaded by the SDK.

Alternatively, you can simply lock your keys using the locking functionality and they are now excluded from the translation scope.
I have integrated the SDK. How do I remove a language from my app without deleting its content from my project?
Please follow the 3 steps below:

  1. From your GL Strings project, export the language you want to remove. The export format should be XLIFF, as it allows users to export all of the keys' values most of the metadata (comments, status and length restrictions). We strongly recommend that you also create a manual backup of your project.
  2. Delete the language from your project dashboard.
  3. Update the Settingsfile and push a new app release.
Next time a user opens the app and the deleted language is selected, its content will also be removed from the SDK storage. The SDK storage will then apply the fallback logic and show the content in the base language (or the parent language if a dialect was deleted).
I changed a key in the app code. How do I upload the new value?
The SDK integration won’t overwrite any key values already existing in your project with (updated) values from the code level. This is done to maintain GlobalLink Strings as the source of truth, enforcing those changes - even to the source - are made on the dashboard.

The only way to update the value is to remove the current one for a given key and save it with an empty value. Next time you start the upload, the dashboard will replace empty values with values found in the SDK.

Alternatively, if you want your developers to make changes to keys on the code level and those changes to be reflected in your project, the automated SDK upload can be disabled in the Project Settings and you could use the CLI integration instead. The CLI will recurrently upload your app’s string files and in turn also overwrite any values in your projects with the values from the source file.
Can we apply character limits to translations?
Yes! You can apply character restrictions to key values in the base or target languages. Currently, this can only be done through our dashboard or manual import of certain file formats (xliff, Excel, CSV). You can read more about our character restriction feature here.
Can I also localize links to other pages within apps?
Can I also localize webviews?
Yes! Please follow the Integration Guides for iOS or Android.
Can I localize content that is stored or requested differently (e.g. server side, in JSON files or in an internal databases, etc.)?
Yes! Please get in touch with us and we can help you out.
If I do not use the automatic Settingsfile update feature, will I have to manually update the Settingsfile every time I add/remove translations?
Yes, but not for every change. In order to make sure your app is shipped with the most recent version of your translations, we recommend you update the Settingsfile as part of compiling your release canditate. This will make sure that your app users with poor connection quality only have to download the small set of latest changes and not the whole language.
How long does it take to update the Settingsfile and can that be automated?
It should only take a few minutes to download the latest Settingsfile from your connected project and insert the file into your app. You can find scripts to automate the update of the Settingsfile as part of your build process in the SDK integration documentation in the platform-specific sections.
Does GlobalLink Strings offer featuers that support versioning, branching and setups with multiple enviroments?
Yes! Our Branching feature allows teams to keep different versions of their app in the same project. All integration options can be configured to point to a specific branch of your project. How you configure that depends on how Branches in your project should mirror your application’s development processes, release management, or app environments.
What is the Target field? When will my translation be live in the app and visible to the user?
With an SDK integration, the content of the target text field represents what is currently live in your app. If that content is edited, the changes will be pushed to users and will be available the next time the app starts.

The second method to push translations is by approving the current Draft for a given entry. If approved, the Draft field content will move to the Target field.
What is a Draft?
The Draft field is used for translations in an unapproved state e.g. a proposed translation (change) that should still be reviewed before being published to Target. It is not visible to your regular users yet, but can be revised, tested, and QAed in the dashboard editor interface or directly inside the app with the SDK Draft Mode.
How do I start the SDK Draft Mode in the simulator?
Since it is not possible to perform the four-finger gesture on the simulator screen, we use other methods to start the Draft mode.
On iOS: While the app is running, press option + shift. After you see two dots on the simulator, tap down for 6 seconds.
On Android: While the app is running, simply tap down on it for 6 seconds.
Okay! I’ve translated everything, but I want to review the Draft translations in action before approving them and setting them live. How can I test my Drafts?
If you want to review your draft entries in an app, you need to activate Draft Mode. Learn more here.
Does GlobalLink Strings support QA or testing workflows?
Yes! We provide a range of team and user management features that you can use to ensure only certain persons can approve translations to go live inside your app. Learn about the different Roles here.
I’m afraid my translators might delete or change the source text. What can I do to prevent that?
Using Roles, admins and owners are able to assign the Translator role to other users. Translator roles are unable to alter the source or target text.
I added a translation for a new language. How can I see it inside my app?
The language shown inside the the app (through the Applanga SDK) is determined by the phone language. If you want to preview another language, you will need to go to your phone’s settings and switch languages. If there is o translation available for the language selected, the Applanga SDK will always show the Base Language (most commonly English) as a fallback. See more here.
What if a key is left untranslated?
The SDK will fall back to the Base Language and, if that is not available either, to the original key that is present in the app data locally.
I’ve translated into Latvian (or enter other “exotic” language here), but my iPhone doesn’t have Latvian on the list of languages. How can I test it?
iOS has two language lists: iPhone languages & preferred languages. Some languages, including Latvian, are only present in the preferred languages list.
Does GlobalLink Strings support regional dialects like Brazilian Portuguese (pt-BR) or Austrian German (de-AT)? What happens if I only support a dialect and not the associated language?
Yes! We do support regional dialects.
If you want your app to be translated in Portugal (PT) as well as Brasil (PT-BR) you should add both languages to the projec on GL Strings.
If an app requests a dialect (e.g. PT-BR) the SDK will first check if there are translations in that language-dialect (PT-BR) but if a key value is empty or the dialect does not exist it will fall back to the superordinated language (PT). If the key value is empty there as well, it will fall back to the base language. If you only create and translate the regional dialect (eg. PT-BR) and not the original language (eg. PT), only users with their phone set to the region will get the translation. Everybody else that is requesting the original language or another regional dialect will get the Base Language localization.
Is there a character limit on the key name?
Key names in a GlobalLink Strings project can have a maximum of 1024 bytes wich is equivalent to a length of 1024 characters for most languages. Some special characters like emojis as well as some languages, for example Chinese, need more bytes per character in some cases and therefore the maximum length might be below 1024 characters.
Is there are a way to get over-the-air translation updates for websites and web apps too?
Yes, you can implement the Rest API into your website or web app in a way that makes an update call to the API for every session of every user. Please do keep in mind that there is a traffic component to the pricing and every API call is counted against your limit.

We would rather recommend you update your backend or database on an hourly or daily cadence or even use the CLI to just update on every deployment.
Can I restrict over-the-air translations to specific languages?
You can separate your content into Branches based on language. This way, you can limit the number of languages in your Default branch and push over-the-air updates from it. The remaining languages can be added to another Branch, and you can merge it to the Default branch when needed.
Some keys have RTL and LTR languages intermingled. How does GL Strings handle this?
Since GL Strings is a web-based tool, we use text rendering behaviour that is inherited from the browser. In some cases, the browser can't determine if a character is meant to be right-to-left or left-to-right so it falls back to the default. However, the output when the translations are exported from GL Strings into the target file should display correctly, as long as the target file format also supports RTL.

Translation Services

Hold on... we have our own translators, do we really need to use TransPerfect's translation services?
Not at all! If you have your own translators (internal or external), you can create an account for them and add them to your app’s team with the role “Translator.”
Can we give our current translation agency direct access to our app project?
Yes. GlobalLink Strings allows you to add resources to your projects, so you can create and add administrators, managers and translators for each of your app Teams.
Is it possible to have your translators test my app?
If you would prefer to have our translators test your app in their native language, that is no problem. Just let us know.
My app contains various terms that recur throughout the app and other repeated elements. If TransPerfect translates my app for me, will I pay more for repeated content?
No. We use industry standard CAT (computer-assisted translation) tools to develop translation memories for each project to ensure the best possible quality and price. Just let us know and we can merge translations into other apps and projects.
I can't create a translation order. What might be the reason?
If an order can't be created there are two main reasons this may be the case. Either no keys meet the selection criteria of the order OR all keys within the selection criteria are already included in another open order.
If no keys match the selection criteria for the order, users should update the criteria in the Select Strings panel of the order page. See the Use Transperfect Translation Services article for more details.

If the keys are already part of an active order, users have a couple of options:

  • If the original order is not yet in the processing status, the order can be cancelled and a new one can be created.
  • If the order is already processing, you can wait until it is completed and submit a follow up order to include outdated translations.
  • If the translations can't be delayed, you can create new keys in the project for those values and create a separate order. See the Cloning Strings article for more information.
I made changes to the source content. Is that updated in the order too? How can I update the content in an order?
Once a translation order is created, it cannot be changed. This includes changes or updates to the source content of the order. To include changes in source content for a given order, users have a couple of options.
  • If the original order is not yet in the processing status, the order can be cancelled and a new one can be created. This new order will capture the changes to the updated source content.
  • If the order is already processing, you can wait until it is completed and submit a follow up order to include Outdated Translations.
  • If the translations can't be delayed, you can create new keys in the project for those updated keys and create a separate order. See the Cloning Strings article for more information.

Billing & Payments

Is there a free plan?
Yes, of course. You can test and evaluate most features of GlobalLink for free for a limited time.
How much does GlobalLInk Strings cost?
See GlobalLink Strings' full pricing structure, click here.
What is an MAU?
MAU stands for [M]onthly [A]ctive [U]sers and counts how many individuals use your app per month as a way to measure the traffic through update requests made to GlobalLink Strings' servers on a monthly basis. Only the first time a user opens the integrated app in a given month (and creates an update request) will increase the MAU count by one. Subsequent sessions of the same user in the same month will not increase the account.
What happens when I upgrade or downgrade?
Upgraded features are immediately available, and your account will be prorated for the current billing period. Downgrade changes will be enacted the following billing period.
How can I change my subscription?
To upgrade your subscription, please reach out to us at support@applanga.com.
What happens if I want to reach way more users than what's included in my current plan?
We'll get in touch before that happens and, with your consent, move you onto a higher tier plan.
Which payment options do you offer?
TransPerfect operates globally. We can offer a wide range of billing and payment options and can bill you from a local entity.
Can you invoice me?
Yes, you will be invoiced for any kind of GlobalLink Strings subscription.
I have more questions!
Please send an email with your questions to support@applanga.com