Supported File Types (Strings)

.XLIFF - XML Localization Interchange File Format (Strings)

Content is machine translated from English by Phrase Language AI.

File Extensions 

.xlf, .xliff

API Extension 

xlf

Import 

Yes

Export 

Yes

Plural forms support 

Yes

Description support 

Yes

Format options 

enclose_in_cdata

include_translation_state

indent_size

indent_style

ignore_source_translations

ignore_target_translations

export_key_id_as_resname

export_key_name_hash_as_extradata

override_file_language

strip_placeholder_delimiters

delimit_placeholders

The most-widely used file format in the translation industry. It can be seen as the mirror of the source file that breaks down source content into various segments stored in tags (e.g. <trans-unit>, <seg-source>). 

XLIFF is XML based and subject to basic XML conventions such as validity and being well-formed. Always complete a sanity check prior to translation by changing the file extension from .xliff (.xlf) to .xml and opening it in a web browser. If the file is valid, a well-organized document structure is presented and if not, it will be either unrenderable or with an error message.

XLIFF was updated with XLIFF 2.0. It is similar to the more widely-used XLIFF but is a different file format usually incompatible with XLIFF.

Xcode can package localizable strings into the industry standard XLIFF format to be sent for localization with Phrase.

Format Options

Identifier 

enclose_in_cdata

Type 

boolean

Upload 

No

Download 

Yes

Default 

false

Description 

Encloses translations containing html tags in CDATA. If disabled, unsupported HTML entities are replaced with their decoded values. For example:

  • &pound; is replaced with £.

  • &trade; is replaced with .

Identifier 

include_translation_state

Type 

boolean

Upload 

No

Download 

Yes

Default 

false

Description 

Include state of translations in the target locale. Every <target> tag will get a state attribute, which can be one of: new, signed-off, translated

Identifier

indent_size

Type 

integer

Upload 

No

Download 

Yes

Default 

4

Description 

Specifies number of indentation characters

Identifier

indent_style

Type 

string

Upload 

No

Download 

Yes

Default 

space

Description 

Specifies indentation character. Allowed values are space  and tab.

Identifier 

ignore_source_translations

Type 

boolean

Upload 

Yes

Download 

No

Default 

false

Description 

Ignores the source translations in the file during the upload (to avoid accidental source language updates)

Identifier 

ignore_target_translations

Type 

boolean

Upload 

Yes

Download 

No

Default 

false

Description 

Ignores the target translations in the file during the upload (to avoid accidental source language updates)

Identifier 

export_key_id_as_resname

Type 

boolean

Upload 

No

Download 

Yes

Default 

false

Description 

Exports the Key ID as the resname attribute.

Identifier 

export_key_name_hash_as_extradata

Type 

boolean

Upload 

No

Download 

Yes

Default 

false

Description 

Exports the Key Name hash as the extradata attribute.

Identifier 

override_file_language

Type 

boolean

Upload 

Yes

Download 

No

Default 

false

Description 

This file format typically contains language information in the file itself. Use this option to override the language with one you specify.

Identifier 

strip_placeholder_delimiters

Type 

boolean

Upload 

Yes

Download 

No

Default 

false

Description 

Removes <ph> tags from translations

Identifier 

delimit_placeholders

Type 

boolean

Upload 

No

Download 

Yes

Default 

false

Description 

Wrap translation placeholders in <ph> tags. Must have defined valid placeholder styles in project settings.

Code Sample

<?xml version="1.0" encoding="UTF-8"?>
<xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
  <file original="global" datatype="plaintext" source-language="de-DE" target-language="en-GB">
    <body>
      <trans-unit id="boolean_key">
        <source xml:lang="de-DE">--- true
</source>
        <target xml:lang="en-GB">--- true
</target>
      </trans-unit>
      <trans-unit id="empty_string_translation">
        <source xml:lang="de-DE"/>
        <target xml:lang="en-GB"/>
      </trans-unit>
      <trans-unit id="key_with_description">
        <source xml:lang="de-DE">Schau dir das mal an! Dieser Schlüssel hat eine Beschreibung!</source>
        <target xml:lang="en-GB">Check it out! This key has a description! (At least in some formats)</target>
        <note>This is the amazing description for this key!</note>
      </trans-unit>
      <trans-unit id="key_with_line-break">
        <source xml:lang="de-DE">Diese Übersetzung hat
einen Zeilenumbruch.</source>
        <target xml:lang="en-GB">This translations contains
a line-break.</target>
      </trans-unit>
      <trans-unit id="nested.deeply.key">
        <source xml:lang="de-DE">Ich bin ein tief verschachtelter Schlüssel.</source>
        <target xml:lang="en-GB">I'm a deeply nested key.</target>
      </trans-unit>
      <trans-unit id="nested.key">
        <source xml:lang="de-DE">Dieser Schlüssel ist innerhalb eines Namensraumes verschachtelt.</source>
        <target xml:lang="en-GB">This key is nested inside a namespace.</target>
      </trans-unit>
      <trans-unit id="null_translation">
        <source xml:lang="de-DE"/>
        <target xml:lang="en-GB"/>
      </trans-unit>
      <trans-unit id="sample_collection">
        <source xml:lang="de-DE">---
- erstes Item
- zweites Item
</source>
        <target xml:lang="en-GB">---
- first item
- second item
- third item
</target>
      </trans-unit>
      <trans-unit id="simple_key">
        <source xml:lang="de-DE">Einfacher Schlüssel, einfache Nachricht, so einfach</source>
        <target xml:lang="en-GB">Simple key, simple message, so simple.</target>
      </trans-unit>
      <trans-unit id="unverified_key">
        <source xml:lang="de-DE">Diese Übersetzung ist noch nicht bestätigt und wartet drauf!</source>
        <target xml:lang="en-GB">This translation is not yet verified and waits for it. (In some formats we also export this status)</target>
      </trans-unit>
    </body>
  </file>
</xliff>

Plural forms

Pluralized keys are exported using the following syntax:

<trans-unit id="plural_key">
  <source xml:lang="en">{"one":"one chair","other":"{nrOfChairs} chairs","zero":"no chairs"}</source>
  <target xml:lang="de">{"one":"ein Stuhl","other":"{nrOfChairs} Stühle","zero":"keine Stühle"}</target>
</trans-unit>
Was this article helpful?

Sorry about that! In what way was it not helpful?

The article didn’t address my problem.
I couldn’t understand the article.
The feature doesn’t do what I need.
Other reason.

Note that feedback is provided anonymously so we aren't able to reply to questions.
If you'd like to ask a question, submit a request to our Support team.
Thank you for your feedback.