Transifex supports over 46 localization file formats. You can learn more about each by clicking on their respective link in the File Formats section.
This page explains how Transifex handles file encoding, download modes, plurals, metadata, and the storage engine. It also covers what happens when you upload source and translation files.
📝 Note: Are you using a file format unsupported in Transifex? Don't hesitate to contact us! We are constantly working on expanding our support for more file formats.
Encoding
For most file formats, Transifex uses UTF-8 encoding. This means files you upload to Transifex must be encoded in UTF-8, and all files downloaded from Transifex will be in UTF-8. There are some exceptions in cases where a file format specification requires a different encoding. For example, JAVA .properties files use ISO-8859-1, and Apple's .strings files can use either UTF-8 or UTF-16.
📝 Note: You might sometimes find issues with your file encoding. If so, see How to convert the encoding of a file for more information on converting it to the appropriate encoding.
Download modes
Depending on your needs, you can download a different version for every file you have. These different versions are called modes. They come in handy in several different situations. For example, a developer may want only to use reviewed translations. Or, a translator may wish to translate a file offline using their desktop tool.
Reviewed, proofread and translator modes
These modes are available when using the Client or the API:
Reviewed: the file will include reviewed strings in the target language. All other strings will either be empty or in the source language (depending on the file format).
Proofread: the file will include all proofread strings in the target language. All other strings are either removed or returned with translations in the source language or empty (depending on the file format).
Translator: the file will be suitable for offline translation of the resource.
API-only modes
Some file formats will take untranslated entries and fill them in with source strings. So, if you use one of the modes mentioned above, you'll get a file where the untranslated strings won't be empty. There are several modes that you can use to bypass this rule. They're available when using the API.
Onlytranslated: the response will include the translated strings, and the untranslated ones will be removed.
Onlyreviewed: the response will include the reviewed strings. All other strings are either removed or returned with translations in the source language or empty (depending on the file format).
Onlyproofread: the response will include the proofread strings. All other strings are either removed or returned with translations in the source language or empty (depending on the file format).
Source as translation: the response will include the translated strings, and the untranslated ones will be filled with the corresponding source strings.
Formats that support the API-only modes
The Onlytranslated, Onlyreviewed and Onlyproofread modes only apply to the following file formats: Apple strings, Chrome Extensions i18n, HTML, Java Properties, Joomla (.ini), JSON Key-Value, Microsoft Word (alpha), Mozilla Properties, Plain Text (txt), RequireJS format, Windows JSON (.resjson), and Gettext (PO).
The Source as translation mode is only supported for the following formats: Android XML, JSON Key-Value, Gettext (PO), Java Properties, Qt Linguist, SRT, Apple stringsdict, and YAML.
Microsoft Word (alpha) is the earlier .docx format. For .docx files, see Microsoft Word.
For all other file formats, use the translator mode to get a file that leaves the untranslated entries empty. For some formats, such as Java .properties, the downloaded file will have the source string in the comment so the translator can translate the file faster.
Getting the file
When using the Transifex CLI (tx), you can specify the mode of the file you want to download with the --mode option of the tx pull command, for example tx pull -m proofread. See the Transifex CLI README for the option. When using the Transifex API, set the mode attribute in the download request.
In the web interface, go to Source content, open the resource, select the language, and choose one of these options:
Download for use: includes only strings that have a translation.
Download only reviewed translations: includes only reviewed strings. Shown when the proofread step is off.
Download only proofread translations: includes only proofread strings. Shown when the proofread step is on.
Download file to translate: untranslated strings appear with empty translation fields, for translating outside Transifex.
⚠️ Screenshot needed: download pop-up for a language in a resource, showing the download options
Plurals
Transifex supports plurals for all file formats that support them, e.g., Android XML, Apple strings, Apple stringsdict, Gettext (PO), Java Properties, JSON with ICU plurals, Structured JSON, XLIFF, and YAML.
For more about plurals, see Working with Plurals and Genders.
Metadata and file formats
Below is the metadata (developer notes, character limits, tags, context, and occurrence) supported per file format. The table does not include file formats that do not support any form of metadata.
Text version of the table above. None of the listed formats supports tags.
Android XML: developer notes
Apple PLIST: developer notes
Apple strings: developer notes
Chrome i18n: developer notes
Gettext (PO): developer notes, context, occurrence
Mozilla DTD: developer notes
Qt Files: context, occurrence
Windows (resx, resw): developer notes
XLIFF: developer notes, character limits, context, occurrence
XLSX: developer notes, character limits, context
YAML: developer notes
Key Value JSON structured: developer notes, character limits, context
HTML: context
The storage engine
Every project in Transifex has a set of resources which you can see via Source content tab. Each resource corresponds to a source file. If, for example, you have a project with two files for translation, foo.pot and bar.pot, you will need to create two different resources (e.g., foo and bar) and map each to the corresponding translation file.
Every project in Transifex is associated with a source language, which is the source language of your files.
Transifex will extract the source strings using a parser suitable for your i18n format and store them as translations of the source language when you upload the source file. Then, you can translate these strings into even more languages (target languages) by using the Transifex Editor or by uploading a file.
When importing a source file into Transifex, it will be saved and used as a template for all automatically generated translation files when the user wants to download them. However, some parsers do not guarantee that the downloaded translation files will be the same as the source file concerning any metadata present.
The engine in detail
Three internal structures in Transifex are of interest: Source Entities, Translations, and Template files.
Each resource inherits the project's source language, which can be other than English. However, we will use English as the source language and French as the target language in the following examples.
Source entities
At the core of the Transifex translation storage engine are Source Entities. These are representations of actual translatable objects and their metadata, like comments.
For gettext PO files, a source entity corresponds to a msgid entry with all the metadata it carries (context, occurrences, comments, etc.).
Translations
Each entity has Translations to several languages — including the source language. A 1-1 relationship exists between an entity and a translation in a particular language. So, if you upload a fresh POT file with one msgid inside, you will end up with one source entity and one translation for English.
Template files
Transifex internally will remove the source strings and replace them with a hash when you upload a source file. Transifex will use that hash to insert the correct translations for the requested language when downloading the file. In essence, you're downloading the English file with the English content of it replaced with French content.
Importing a source file
Here are the steps taken when you create a new resource by uploading a new source language file:
We identify the translatable strings in the file.
For each one, we create a new source entity in Transifex if one does not exist.
Most source files include the string in the source language (in the case of Gettext POT, this is the msgid content). We store this string in the database as the source language translation if needed.
We replace this string with a hash to mark the place of the source entity and replace it with the correct translation when exporting the translation file. The above architecture means that all translated versions of the file preserve the comments and non-translatable parts of the file.
Importing a target language file
⚠️ Warning: Uploading a translation file overwrites existing translations for the strings in the file. Strings that are already reviewed in Transifex are kept.
When you upload a file, e.g., a French translation file, Transifex goes through all translations, locates the respective Source Entity, and updates its translation. See Uploading translations for details.
Content that Transifex does not support, such as arbitrary comments in random locations in the file, might not be preserved.
Exporting a file
Transifex will take the template file and substitute all hashes with the French translations when you request to download the file in a specific language. Transifex can export different files based on the mode you specify in the Download modes section above.
💡 Tip
Looking for more help? Get support from our Transifex Community Forum!
Find answers or post to get help from Transifex Support and our Community.


