Strings File

A strings file is used in Mac OS X or iOS apps for localization of text. There can be several versions of the strings file for different languages, and the program code of the app references named strings from that file instead of the literal string values, so the actual text can change based on the user configuration.

There are several different formats this file can take. They can be encoded as Property Lists, or they can be stored in a "native" strings-file format consisting of name/value pairs as follows:

"NMSTR" = "Name"; "DTSTR" = "Date";

The names and values are each enclosed in double quotes, and separated by an equal sign. The line is ended with a semicolon. Extra whitespace outside the quotes is ignored. Also, comments enclosed in /* and */ are ignored (they may span multiple lines).

Strings can then be referenced within Objective-C code by using:

NSLocalizedString(@"NMSTR", nil)

(using the name of the desired string) in place of a literal string.

Within OS X apps (inside the .app "file", which is actually a directory and contains multiple items, though the Mac Finder treats it as a single file), you may find .strings files named Localizable.strings or InfoPlist.strings in the Resources subdirectory, or in multiple subdirectories for different-language localizations if there are any. These are stored in the UTF-16 character encoding (so if you open them in a viewer/editor not supporting UTF-16, they may appear to have blank spaces in between characters, since ASCII characters end up having two-byte encodings in which one byte is null (00) and the other is equal to the ASCII value). They are little-endian, with a Byte Order Mark (UxFEFF, which shows up as the bytes FF FE) at the beggining. Line breaks are done with linefeed (Ux000A).

Within iOS apps, the structure and filenames are similar, but the format is Property List/Binary.

When you are building a project for either an OS X or iOS app in Xcode, the editing of .strings files is done in UTF-8 in the native name/value format described above; the files are then converted to the appropriate format for the target platform when the app is built.