• Documentation
  • File formats
  • Apple strings

Apple strings

  • Associated file extensions: .strings
  • i18n type: STRINGS
  • Encoding: UTF-16

.strings files are used for localizing macOS and iOS apps.

Sample Data

/* registration information: Username */
"username" = "Username:";

/* registration information: Password */
"password" = "Password:";

/* registration information: Email Address */
"email_address" = "Email Address:";

/* registration information: User Role */
"user_role" = "User Role";

/* registration information: Phone */
"phone" = "Phone";

/* registration information: Country */
"country" = "Country";

Each key-value pair enclosed in double quotation marks corresponds to a string entry.

  • Keys are on the left side of the equal sign and considered the identifiers of the strings. This information is the one that our parser takes into account in order to parse the strings as unique entries. The key of the entry is available in Transifex Web Interface under the context tab in the editor
  • Values are on the right side of the equal sign and handled as the translatable text. This is the text that the translator will see in the editor and translate it into other languages.

Transifex also supports developer notes that a translator can see under the context tab in the editor. Such comments are enclosed inside C-style comment delimiters (/* and */) and are placed immediately before the entry they refer to as it is shown in the sample above.


Plural Support

Below, there are some illustrative examples based on the language plural rules that CLDR standards provide:

English file:

"time_minutes##{one}" = "%@ minute";

"time_minutes##{other}" = "%@ minutes";

"result##{one}" = "%@ Result";

"result##{other}" = "%@ Results";

Arabic file:

"time_minutes##{zero}" = "%@ دقيقة";
"time_minutes##{one}" = "%@ دقيقة";
"time_minutes##{two}" = "%@ دقيقة";
"time_minutes##{few}" = "%@ دقيقة";
"time_minutes##{many}" = "%@ دقيقة";
"time_minutes##{other}" = "%@ دقيقة";

"result##{zero}" = "%@ النتائج";
"result##{one}" = "%@ النتيجة";
"result##{two}" = "%@ النتائج";
"result##{few}" = "%@ النتائج";
"result##{many}" = "%@ النتائج";
"result##{other}" = "%@ النتائج";


Do you want to find out more about plurals in Transifex? Please check here.

Entries with identical keys

In case you have a .strings file where more than one entries have the same key/identifier, then:

  • Our parser will parse the first instance and ignore any other entries for which the same key has been provided. This means that in the editor, the translator will see only the entry that was parsed first.
  • After the translation process is completed and the translation file is requested, all the entries will be included in the file and then ones that were ignored during parsing will be translated accordingly upon export.

Download Options

When you download a .strings from Transifex for use, the file will contain all entries. However, in case there are untranslated entries, those will be filled in with the corresponding source string.

When you download a .strings file for translation, any untranslated entries will be filled in with their corresponding source strings, but they'll be commented out to make it easier for translators to see them.

When you download a .strings file using the option Download only reviewed translations , the file will contain all the entries. However, any untranslated & unreviewed entries will be filled in with their corresponding source strings


Lin is a useful helper tool that offers auto-completion in XCode for NSLocalizedString. Check out the Lin website and the GitHub repo.