Import Settings
In the Import section of the Project Settings, you can configure how Crowdin should handle placeholders, duplicate strings, and word counts in your project.
Improve the translation consistency and streamline your workflow by unifying placeholders and handling duplicate strings.
Enable this option to transform placeholders into a unified format within the Editor (e.g., displaying both Android %s and iOS %@ as [%s]). This improves Translation Memory efficiency by making suggestions completely interchangeable across platforms.
On export, placeholders are converted back to the original syntax. This feature applies only to Android XML, iOS strings, iOS XLIFF, and Apple Strings Catalog.
You can save time by translating all duplicates with the same translation and hiding these instances from translators. This can affect accuracy.
Crowdin’s localization process is based on translating source strings to the defined target languages. Source strings are uploaded to the system in localization files. Each unique source string first uploaded or added (for CSV and other formats supporting string editing) in Crowdin is considered a master string. All other strings that are identical to the master string but were uploaded or created later are considered duplicate strings.
If your project contains duplicated strings, you can choose how the system should treat them. The available options combine three dimensions: detection basis, visibility, and translation sharing.
| Option | Detection basis | Visibility in the Editor | Translation sharing |
|---|---|---|---|
| Show | Regular (source text) | Duplicates stay visible | No |
| Show, but auto-translate them | Regular (source text) | Duplicates stay visible | Yes |
| Show within a version branch (regular detection) | Regular + branch path scope | Duplicates are hidden between version branches | Yes |
| Show within a version branch (strict detection) | Strict (source text + key) + branch path scope | Duplicates are hidden between version branches | Yes |
| Hide (regular detection) | Regular (source text) | Duplicates are hidden | Yes |
| Hide (strict detection) | Strict (source text + key) | Duplicates are hidden | Yes |
The detection basis determines what counts as a duplicate:
- Regular duplicate detection – when comparing strings, Crowdin considers only source texts.
- Strict duplicate detection – when comparing strings, Crowdin considers both string identifiers (keys) and source texts.
When translation sharing is enabled, duplicates inherit the master string’s translation as long as they don’t have their own.
If a unique translation is saved for a duplicate (even a hidden one), it stops inheriting the master translation and uses its own instead.
If that unique translation is later removed, sharing is restored automatically, and the duplicate will inherit the master translation again.
Shared translation will not apply in the following cases:
- Show is selected (automatic sharing is disabled).
- The duplicate already has its own unique translation.
- In Show within a version branch modes, strings are outside the branch or path matching scope used for duplicate detection.
When the Show – translators will translate each instance separately option is selected, all duplicate strings will be visible to translators. Each duplicate will require a separate translation.
💡 Use case: works perfectly for projects where the same words might have various meanings depending on the context.
When the Show, but auto-translate them option is selected, all duplicate strings are shown and automatically inherit translations from their master strings. This allows translators to review and re-translate duplicate strings if necessary.
💡 Use case: works excellently if you want to save time but still require automatic translations to be reviewed.
To better illustrate how the Show, but auto-translate them option works, consider the following five-string JSON file: two strings are unique, and three strings have identical source text.
{ "hello": "Hello", "welcome": "Welcome!", "save1": "Save", "save2": "Save", "save3": "Save"}Upon importing this file, the system designates the first of these identical strings ("save1": "Save") as the master string with a “Master” marker, while the subsequent two identical strings ("save2": "Save" and "save3": "Save") are designated as duplicates of this master string with a “Duplicate” marker.
Once you set the Duplicate Strings option to Show, but auto-translate them, the system keeps all five strings visible to translators and enables automatic translation sharing.
Let’s consider the following scenarios:
- Master string is translated first – the system immediately shares the translation of the master string with its duplicates. As a result, all three identical strings (the master string and its two duplicates) are displayed with translations. Translators can still review and replace the shared translation with a unique one for any specific duplicate. Doing so overrides the shared translation for that string alone, allowing for precise, context-specific translations without affecting the other duplicates.
- One of the duplicates is translated first – the system does not share the translation of the duplicate with the master string or the other duplicate. Consequently, one duplicate string is displayed with a translation, while the master string and the other duplicate remain untranslated until the master string is translated (which will then allow the remaining duplicate to inherit the translation), or they are translated individually.
When the Show within a version branch options (regular or strict detection) are selected, only the master strings that were originally uploaded to the system will be available for translation. All duplicate strings will automatically inherit the translations of the master strings and will be hidden in all version branches.
Here are a few things to keep in mind:
- The system always checks the path to the string throughout the branches. For example, even if the strings are the same in different version branches (
branch1andbranch2), but their paths are different (branch1 -/localization/android.xmland branch2 -/localization/apps/android.xml), they won’t be recognized as duplicates. - This option works only for the strings located in the files that have the same format. For example, if there is the same string in
android.xmlandios.stringsfiles, it won’t be recognized as a duplicate.
💡 Use case: works perfectly for continuous projects with various version branches. Allows translators to work with unique strings in separate branches.
When the Hide options (regular or strict detection) are selected, the system spots the duplicate strings in all files. Only the master strings that were originally uploaded are visible and should be translated. The hidden duplicate strings will automatically inherit the translations from the corresponding master strings.
💡 Use case: works great for projects with narrow scopes where all duplicates share the same context.
Configure how you want Crowdin to count words and characters in your project. Specifically, this setting determines whether HTML tags should be counted as regular words or ignored. By default, Crowdin considers HTML tags as regular words for most of the supported formats, excluding the following ones: HTML, Front Matter HTML, HAML, MD, Front Matter MD, XML, WEBXML, IDML, XLIFF, XLIFF 2.0, ADOC, DOCX, and DITA.
- Auto (default) – counts words and characters based on the default format-specific rules. Depending on the source file format, HTML tags will either be counted as regular words or skipped.
- Count tags – always considers tags. All HTML tags will be counted as regular words.
- Skip tags – always skips tags. HTML tags won’t be counted.
More information about Crowdin Word Counter.