# File Formats

We work on extending the list of formats supported. If you need a format and can't find it here send us an [email](mailto:support@locize.com).

{% hint style="warning" %}
locize generally only handles the translation content, i.e. keys and values, and never saves your imported file with the original file structure. So if you want to [import a file](/more/general-questions/how-to-import-translations-from-a-file.md) and later export it with the original structure and information, this is not supported for every format.
{% endhint %}

{% hint style="danger" %}
These file formats are used as translation container for [imports](/more/general-questions/how-to-import-translations-from-a-file.md) and exports. The originally used i18n format will always be respected, there is no sort of [i18n format](/integration/supported-i18n-formats.md) conversion while importing or exporting.
{% endhint %}

{% hint style="info" %}
In the UI, based on your filter you can export the individual files or multiple files (via zip or "all" format):

* [**language (and namespace) specific format**](/more/general-questions/how-to-import-translations-from-a-file.md#to-import-a-file-for-a-dedicated-language-be-sure-to-select-the-appropriate-language-and-namespace-in-the-filter)\
  \&#xNAN;*To export a file for a dedicated language, be sure to select the appropriate language and namespace in the filter:*

  <img src="/files/C18JlurzzlNTVzMpX9Ol" alt="" data-size="original">

* [**"all" format or zip**](/more/general-questions/how-to-import-translations-from-a-file.md#to-import-an-all-format-file-like-csv-or-xlsx-for-the-whole-project-be-sure-to-not-select-any-language-or-namespace-in-the-filter)

  *To export a "all" format or zip file for the whole project, be sure to not select any language or namespace in the filter:*

  <img src="/files/qdSpMAGvQaKBq4Cvw1JJ" alt="" data-size="original">

{% endhint %}

## JSON nested

Will import / export in JSON format nesting keys separated by `.`:

```javascript
{
  "appName": "locize.com - localization as a service",
  "label": {
    "cancel": "cancel",
    "save": "save"
  }
}
```

## JSON flatten

Will import / export in JSON format flat ignoring `.` separation:

```javascript
{
  "appName": "locize.com - localization as a service",
  "label.cancel": "cancel",
  "label.save": "save"
}
```

## CSV and XLSX

Exports reference language and target language in one file. This format is also supported for imports and is an option to send translations to freelancers not supporting other formats.

For optimal import reuse the previously exported files including added translations.

```
"key","de","en"
"appName","locize.com - Lokalisierung als Service","locize.com - localization as a service"
"label.cancel","abbrechen","cancel"
"label.save","speichern","save"
```

{% hint style="info" %}
[On import ](/more/general-questions/how-to-import-translations-from-a-file.md)make sure the first line contains the same language codes you have in created locize.
{% endhint %}

{% hint style="success" %}
In the UI, CSV and XLSX formats, can be imported and exported as:

* [**language (and namespace) specific format**](/more/general-questions/how-to-import-translations-from-a-file.md#to-import-a-file-for-a-dedicated-language-be-sure-to-select-the-appropriate-language-and-namespace-in-the-filter)\
  \&#xNAN;*To import/export a file for a dedicated language, be sure to select the appropriate language and namespace in the filter:*

  <img src="/files/0zravwg2xIwvJiJVMMoA" alt="" data-size="original">

* [**"all" format**](/more/general-questions/how-to-import-translations-from-a-file.md#to-import-an-all-format-file-like-csv-or-xlsx-for-the-whole-project-be-sure-to-not-select-any-language-or-namespace-in-the-filter)

  *To import/export a "all" format file for the whole project, be sure to not select any language or namespace in the filter:*

  <img src="/files/31GhMsc3HgV4EgJy10m4" alt="" data-size="original"><br>
  {% endhint %}

{% hint style="warning" %}
You might see a “###ignore###” text in your exported "all" format file. This is there on purpose, for all keys that for example does not exist in reference language (this often indicates an issue in your project) or if using the i18next format, to mark that the corresponding [plural form](/more/general-questions/why-do-i-see-strange-new-keys-marked-as-one-few-many-others.md) does not exist for the specific language. This is done to show the translator, that that translation does not exist.
{% endhint %}

## yaml

Yaml is a alternative format to json.

```yaml
appName: locize.com - localization as a service
label.cancel: cancel
label.save: save
```

## xliff 1.2

Well known translation exchange format.

```markup
<xliff xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd" xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
  <file original="formats" datatype="plaintext" source-language="de" target-language="en">
    <body>
      <trans-unit id="appName">
        <source>locize.com - Lokalisierung als Service</source>
        <target>locize.com - localization as a service</target>
      </trans-unit>
      <trans-unit id="label.cancel">
        <source>abbrechen</source>
        <target>cancel</target>
      </trans-unit>
      <trans-unit id="label.save">
        <source>speichern</source>
        <target>save</target>
      </trans-unit>
    </body>
  </file>
</xliff>
```

{% hint style="info" %}
On import try to make sure you have only 1 file tag within the xliff file. And also make sure the `original` attribute value corresponds to your namespace name.
{% endhint %}

## xliff 2.0

Well known translation exchange format. Used format on iOS.

```markup
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="de" trgLang="en">
  <file id="formats">
    <unit id="appName">
      <segment>
        <source>locize.com - Lokalisierung als Service</source>
        <target>locize.com - localization as a service</target>
      </segment>
    </unit>
    <unit id="label.cancel">
      <segment>
        <source>abbrechen</source>
        <target>cancel</target>
      </segment>
    </unit>
    <unit id="label.save">
      <segment>
        <source>speichern</source>
        <target>save</target>
      </segment>
    </unit>
  </file>
</xliff>
```

{% hint style="info" %}
On import try to make sure you have only 1 file tag within the xliff file. And also make sure the `original` attribute value corresponds to your namespace name.
{% endhint %}

## Android resource string

Format used on Android.

```markup
<resources>
  <string name="appName">locize.com - localization as a service</string>
  <string name="label.cancel">cancel</string>
  <string name="label.save">save</string>
</resources>
```

## Strings resources

Format used for example for OS X and iOS.

```
"appName" = "locize.com - localization as a service";

"label.cancel" = "cancel";

"label.save" = "save";
```

## Gettext po files

Gettext standard format.

```
msgid ""
msgstr ""
"Project-Id-Version: locize: My project - translations\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
"POT-Creation-Date: 2017-07-14T22:26:46.631Z\n"
"PO-Revision-Date: 2017-07-14T22:26:46.631Z\n"
"Language: it\n"

msgid "title"
msgstr "La soluzione migliore per il miglior cliente!"

msgid "description"
msgstr ""
"S est Lorem ipsum dolor sit amet. Il cammino è morto, a duo dolores ed a "
"rebum. Stet clita kasd gubergren, senza mare incontro sanctus est Lorem "
"ipsum dolor sit amet."
```

## TMX

Used mostly as translation memory file.

```markup
<tmx version="1.4b">
  <header creationtool="tmexchange" creationtoolversion="1.0.1" adminlang="en" datatype="PlainText" segtype="sentence" o-tmf="ABCTransMem" srclang="en"/>
  <body>
    <tu tuid="appName">
      <prop type="group">my-namespace</prop>
      <tuv xml:lang="en">
        <seg>locize.com - localization as a service</seg>
      </tuv>
      <tuv xml:lang="de">
        <seg>locize.com - Lokalisierung als Dienstleistung</seg>
      </tuv>
    </tu>
    <tu tuid="label.cancel">
      <prop type="group">my-namespace</prop>
      <tuv xml:lang="en">
        <seg>cancel</seg>
      </tuv>
      <tuv xml:lang="de">
        <seg>Abbrechen</seg>
      </tuv>
    </tu>
    <tu tuid="label.save">
      <prop type="group">my-namespace</prop>
      <tuv xml:lang="en">
        <seg>save</seg>
      </tuv>
      <tuv xml:lang="de">
        <seg>Speichern</seg>
      </tuv>
    </tu>
  </body>
</tmx>
```

## resx Files (.net)

Localization files used in .net framework

```markup
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema

    Version 2.0

    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.

    Example:

    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>

    There are any number of "resheader" rows that contain simple
    name/value pairs.

    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.

    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:

    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.

    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.

    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0"/>
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string"/>
              <xsd:attribute name="type" type="xsd:string"/>
              <xsd:attribute name="mimetype" type="xsd:string"/>
              <xsd:attribute ref="xml:space"/>
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string"/>
              <xsd:attribute name="name" type="xsd:string"/>
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
              <xsd:attribute ref="xml:space"/>
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required"/>
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="action.add" xml:space="preserve">
    <value>Add</value>
  </data>
  <data name="action.addDemoProject" xml:space="preserve">
    <value>Create a demo project</value>
  </data>
  <data name="action.addNewLanguage" xml:space="preserve">
    <value>Add new language</value>
  </data>
</root>
```

## Fluent

Mozilla's translation format <https://projectfluent.org/>

```
emails =
  { $unreadEmails ->
    [one] You have one unread email.
   *[other] You have { $unreadEmails } unread emails.
  }

-brand-name =
  {
   *[nominative] Firefox
    [accusative] Firefoxa
  }

-another-term = another term

app-title = { -brand-name }

restart-app = Zrestartuj { -brand-name[accusative] }.

# Note: { $title } is a placeholder for the title of the web page
# captured in the screenshot. The default, for pages without titles, is
# creating-page-title-default.
login = Predefined value
  .placeholder = example@email.com
  .aria-label = Login input value
  .title = Type your login email

logout = Logout
```

## Laravel

PHP Laravel's translation format <https://laravel.com/docs/localization>

```php
<?php
  return [
    'key1' => 'Hello! Let\'s go!',
    'key2' => 'An application to manipulate and process laravel php language files',
    'key' => [
      'nested' => 'laravel Data Manager'
    ]
  ];
```

## .properties

(Java) .properties files <https://en.wikipedia.org/wiki/.properties>

```java
key1 = Hello! Let\'s go!
key2 = An application to manipulate and process .properties language files
key.nested = .properties Data Manager
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-old.locize.com/integration/supported-formats.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
