Translate Android and Apple strings
Translate Android strings.xml, iOS .strings and .stringsdict, and Xcode String Catalogs. Keys, comments and format specifiers stay, and plural forms are written per language.
Mobile app strings come in four formats here: Android resources (.xml in res/values, up to 12 MB), iOS and macOS .strings and .stringsdict (up to 4 MB) and Xcode String Catalogs (.xcstrings, up to 8 MB). Resource names and keys are structure and never change. Format specifiers such as %1$s, %d and %@ are kept in the translated string, and plural forms are written for the categories each target language uses.
What is translated, and what is left alone
| Format | Translated | Left as it was |
|---|---|---|
Android strings.xml | Strings, plurals and string-array items | name attributes, translatable="false" strings, items with xliff:g markup |
iOS .strings | The value of each pair | Keys, developer comments, escapes (newline, tab, quote, backslash) |
iOS .stringsdict | Every plural form | Keys, and the dictionary structure |
Xcode .xcstrings | Each key and language entry | Keys, comments, states, substitutions and device variations |
Plural handling is the main difference from a generic tool. Russian gains few and many, Polish and Arabic gain their own categories, and Japanese keeps only other. Quantities a language never uses are removed from Android files.
What you can ask
Translates strings, plurals and arrays and keeps argument order.
Translate strings.xml into French. Keep format specifiers such as %1$s and %d, and leave the app_name string unchanged.
A release catch-up that leaves reviewed work alone.
Translate only the strings that are missing from the German file and keep the existing German translations.
Keeps developer comments and escapes.
Translate the values into Spanish. Keep %@ and %1$@ unchanged and leave the comments as they are.
For .stringsdict: writes the plural categories of the target language.
Translate the plural rules into Polish and write every plural category Polish needs.
Fills the catalog for German, Japanese and Portuguese in one job.
Fill the missing translations for German, Japanese and Portuguese. Leave the keys, the comments and the strings that are already translated unchanged.
Good to know
- Android,
.stringsand.stringsdicthold one language: one target language per upload. If you ask for two, the plan translates one and says so. Run the file once for each values folder or.lprojyou ship: the glossary carries over. - String Catalogs hold every language in one file, so they are the exception: several languages can be filled in one job.
- Where the file goes. An Android result goes into
res/values-fr/strings.xmlor the qualifier you need, and.stringsinto the matching.lproj. - Format specifiers. Positional ones, such as
%1$s, keep their index so a translator can reorder a sentence without breaking the argument order. - A generic
.xmlfile that is not an Android resource is read as other XML. - Output filter. Not available for these formats: the whole file comes back.
Related
- JSON for Flutter ARB, and gettext PO for another catalog format.
- .NET and Qt and XLIFF for other localization files.
- All file formats