Extension | .stringsdict |
Smartling Identifier | stringsdict |
Example File | Stringsdict File Format |
Resources | Localizing your App Smartling Tech Blog on Stringsdict |
iOS apps using plural functions store the strings in the Stringsdict file format. This is still true regardless if the app uses .strings or .xliff for other strings. Please refer to the Apple documentation for the file format, which uses the standard CLDR forms.
Note that Xcode’s XLIFF localization feature does not include plural strings. If your XLIFF-localized application includes plural strings, you will need to separately upload the .stringsdict file along with your XLIFF file.
This XML file format is used to capture the plural sensitive strings that will be localized.
Currently, Smartling does not support gender-sensitive strings.
When downloading translated iOS stringsdict files via the File API, setting the parameter includeOriginalStrings=false
will strip untranslated elements from the file.
Plural Standards
Smartling does not expect English source files with “zero” form source strings. Smartling complies strictly with CLDR, which defines English as having two forms; “one” (singular) and “other” (plural). If you upload a source file with Zero form strings, the zero-plural form will not be shown in the Smartling dashboard.
Complex Plurals
Complex plural strings (a.k.a. multi-plurals) are supported, but Smartling advises against creating such strings which are difficult to translate correctly from a linguistic perspective. If a multi-plural string is in your .stringsdict, Smartling will capture two separate strings, but they will not be associated with each other. We advise you to add instructions and visual context hints to help the translators understand how the multi-plural string is actually used in your application.
File API directives for plural control are not supported.
Standard Placeholder Format
By default, Smartling recognizes ios-style placeholders in iOS Stringsdict files.
For more information, read our documentation on Placeholders in Resource Files.
XML Characters
The following XML character are always escaped. You can control this by using the entity_escaping directive.
Character (character name) | Escape sequence |
< (less-than) |
< |
> (greater-than) |
> |
& (ampersand) |
& |
' (apostrophe or single quote) |
' |
" (double-quote) |
" |
Directives
File directives are supported via our API (inline is not supported). Directives are specified in the following format:
API Parameter
smartling.[directive_name] = [value]
Here are examples of supported directives for iOS Stringsdict:
Directive name | Values | Description | Example |
character_limit |
|
Sets or removes the maximum characters allowed for a translation. The directive should go directly before the string, where the character limit should be applied. If NONE is specified, character limits will be removed. |
<!-- smartling.character_limit = 25 --> This will apply a character limit of 25 to the string on the line after the directive. <!-- smartling.character_limit = NONE --> This will remove any character limits set for a string, even if the character limit was set manually in the Dashboard. |
entity_escaping |
(case-insensitive) |
Controls whether base characters ( > < & " ) are "escaped" into entities when delivering translations. This can be set universally for the whole file via API. |
For example, your translation might look like this: By default, using the "auto" setting, we will assume this is HTML from the <hr> tag. When the translated file is downloaded, the translated string will be escaped as: Using smartling.entity_escaping = false will allow is above string to appear unescaped. |
entity_escaping_strategy |
(case-insensitive) |
Used to retain entity escaping for all non-base entities. For example, normally we turn © into © but if we use this new directive the translation will automatically update to use escaping from the source. For each entity character, we'll check to see if it was escaped in the source and try to match (propagate) it in the target. If HTML5 entities are required as well, you must use the entity_escaping_type=propagate directive. Numerical entities are not considered at all with this directive, and are treated normally. |
smartling.entity_escaping_strategy = propagate If the same character is both escaped and unescaped in the same string, propagate will return the characters in the translation escaped in the same order as they were in the source. However, if there are a different number of characters in the translation where the translation process removed or added some and the escaping is inconsistent among them, propagate will escape all entities for that character. This does not affect source content at all - so using it will not result in new strings. propagate will only affect non-base entities - all named entities except & , ", <, >. Base entities continue to be controlled by HTML detection and the entity_escaping directive.
|
entity_escaping_type |
(case-insensitive) |
By default, all html4 entities are unescaped, except the basic set: < > & ". When this directive is set to html5, all html5 entities will be unescaped as well. |
smartling.entity_escaping_type = html5 |
placeholder_format |
|
Used to specify a standard placeholder format. |
smartling.placeholder_format = IOS Specifies iOS-style placeholders for the file. |
placeholder_format_custom |
|
Specifies a custom placeholder format. Any text in your file matching the regular expression you provide will be captured as a placeholder. See Placeholders in Resource Files for more on placeholders. |
smartling.placeholder_format_custom=\{([^}]+)\} Any characters surrounded by curly brackets, e.g., {first name}, will be treated as a placeholder. |
whitespace_trim |
|
A whitespace is any character or series of characters that represent horizontal or vertical space in typography. When rendered, a whitespace character is not a visible mark, but does occupy an area or space on a page. Although whitespaces are necessary within a string (typically to separate words), unnecessary whitespaces can be found at the start of a string (leading) and at the end of a string (trailing). With this directive, you can manage whitespace trimming. By default, the leading and trailing whitespaces are trimmed. You can choose to disable trimming or specify trimming for leading or trailing whitespaces. The directive can be used inline or as the API request parameter.
|
smartling.whitespace_trim=on Smartling will trim leading and trailing whitespaces (default)
smartling.whitespace_trim=off Smartling will not trim leading or trailing whitespaces
smartling.whitespace_trim=leading Smartling will trim only leading whitespaces
smartling.whitespace_trim=trailing Smartling will trim only trailing whitespaces |