Extension | .strings |
Smartling Identifier | ios |
Resources | String Resources |
When downloading translated iOS Strings files via the File API, setting the parameter includeOriginalStrings=false
will strip untranslated elements from the file.
Keys/Variants
Every string is created with key/variant metadata based on the keys in the file. If the keys are different for two strings with the same value, Smartling will create two strings using the key as context metadata.
String Instructions
Smartling will automatically ingest and display file comments as instructions for translators. The comments must immediately precede the string. For example, for the following comment, the text “Back button label” will be captured as a file instruction:
/* Back button label */
"Back" = "Back";
If the comment contains the following text: ~ / No comment provided by engineer. / ~
or if a line separates the comment and string, such as:
/* Back button label */
"Back" = "Back";
Smartling will not create an instruction.
Standard Placeholder Format
By default, Smartling recognizes ios-style placeholders in iOS String files.
Placeholders in iOS files are numbered when downloaded from Smartling. Placeholder numbering follows the guidelines set by Apple.
For more information, read our documentation on Placeholders in Resource Files.
iOS Placeholder Numbering
One problem that often occurs during translation is that the translator may need to reorder parameters inside translated strings to account for differences in the source and target languages. During the translation process, Smartling converts placeholders into an equivalent "indexed" form so that their movement can be tracked in the translation process.
If a string contains single or multiple arguments, the translator can insert special tags of the form n$ (where n specifies the position of the original argument) in between the formatting characters. These tags let the translator reorder the arguments that appear in the original string.
There should be no impact on processing the translated file. For example, indentation, whitespace, entity escaping, placeholder indexing etc. may be altered from the source files when there is no functional impact.
Examples
Single Argument
%d
placeholders are converted to%1$d
Multiple Argument
/ Message in alert dialog when something fails /
"%@ Error! %@ failed!" = "%2$@ blah blah, %1$@ blah!";
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, both inline and via our API. Directives are specified in comments within the files, in the following format:
Inline File Format
// smartling.[directive_name] = [value]
API Parameter
smartling.[directive_name] = [value]
Here are examples of supported directives for iOS Strings:
entity_escaping
Exact delivery depends on file type.
Values | auto (default) | true | yes | false | no (case-insensitive) |
Description |
Controls whether base characters ( > < & " ) are "escaped" into entities when delivering translations. This can be set universally for the whole file via API, or by setting the directive at the top/start of the file. The directive can also be placed inline to control the behavior of specific strings. To use inline: String: |
Examples |
For example, your translation might look like this: By default, using the "auto" setting, we will assume this is HTML from the When the translated file is downloaded, the translated string will be escaped as: Using // smartling.entity_escaping = false will allow This is an <hr> & " example string4 to appear unescaped. |
entity_escaping_type
Exact delivery depends on file type.
Values |
html4 (default)|html5 (case-insensitive) |
Description |
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. |
Examples |
// smartling.entity_escaping_type = html5 |
entity_escaping_strategy
Values | propagate | none |
Description |
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. The default is none which is the current behavior, which recognizes HTML4 entities only - if HTML5 entities are required as well, you must use the entity_escaping_type=propagate directive.
This directive can be placed inline, in the API or in a template (consult your SA about configuring directive templates). This does not affect source content at all - so using it will not result in new strings. Numerical entities are not considered at all with this directive, and are treated normally. |
Examples |
To use inline: |
placeholder_format
Values | NONE; C; IOS; PYTHON; JAVA; YAML; QT; RESX |
Description | Used to specify a standard placeholder format. |
Examples |
// smartling.placeholder_format = IOS Specifies iOS-style placeholders for the file. |
placeholder_format_custom
Values |
1) Custom Java compatible regular expression. 2) NONE - disables any current custom placeholders |
Description | Specifies a custom placeholder format. Any text in your file matching the regular expression you provide will be captured as a placeholder. |
Examples |
// smartling.placeholder_format_custom=\{([^}]+)\} Any characters surrounded by curly brackets, e.g., {first name}, will be treated as a placeholder. |
See Placeholders in Resource Files for more on placeholders.
pseudo_inflation
Values | integer - Accepted values are 0 - 100 |
Description | Sets the percentage by which original strings are inflated when downloading pseudo translations. If this directive is not set, pseudo translations are 30 percent longer than the original strings. |
Examples |
// smartling.pseudo_inflation = 80 Downloaded pseudo translations will increase the length of original strings by 80 percent. |
character_limit
Values | integer or NONE |
Description | Sets or removes the maximum characters allowed for a translation. If NONE is specified, character limits will be removed. |
Examples |
// smartling.character_limit = 25 The directive should go directly before the string, where the character limit should be applied. 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 |
whitespace_trim
Values |
on|yes|true or off|no|false or leading|trailing The default value is on |
Description |
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 trim whitespaces, as it enables or disables whitespace trim management for the ingested strings. Whitespace is optionally trimmed from content then re-inserted on download for convenience so that translators do not have to manage the extra spaces. However, content owners may want to retain surrounding whitespace so that translators can manipulate it during translation. 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. |
Examples |
// 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 |