Search result not found.

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.

On this page

Locize Docs

Introduction

Using locize

Integration

Guides / Tips & Tricks

More

Which integration option should I use?Do I have to use the locize CDN or can I host / bundle the translations directly?How is locize different from the alternatives?Why do I get “The passed json is nested too deeply.” when consuming the API?Is locize only for developers and translators or is project management within the process too?What is the regular way to update the translation memory?Is there any visibility on project’s level of completion that shows how translators are progressing?Why is my namespace suddenly a flat json?How to change the publish format?Why does my namespace contain an array with a lot of null items?Why is the pricing so complicated?How to change credit card or billing information or download the invoices?How to import translations from a file?How to manually publish a specific version?How to delete or rename a namespace?Why is there such a high download amount?Where do I find the namespace backups?How can a segment/key be copied/moved or renamed?Why a new namespace is created, when I upload a translation file?I want to use the locize CDN, but would like to have a fallback that uses local/bundled translationsIs it possible to integrate multiple projects in the same app/website?Why do I see strange new keys marked as ONE, FEW, MANY, OTHERS?How do I open and edit JSON files?i18n vs. i18nexti18next vs. locizeWord CounterHow to style text within locize?What do I have to consider if my translation texts may contain confidential information?How to translate a file and download the results?

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.

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 and later export it with the original structure and information, this is not supported for every format.
These file formats are used as translation container for imports and exports. The originally used i18n format will always be respected, there is no sort of i18n format conversion while importing or exporting.

In the UI, based on your filter you can export the individual files or multiple files (via zip or "all" format):

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

JSON nested

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

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

JSON flatten

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

{
  "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"
On import make sure the first line contains the same language codes you have in created locize.
In the UI, CSV and XLSX formats, can be imported and exported as:
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 does not exist for the specific language. This is done to show the translator, that that translation does not exist.

yaml

Yaml is a alternative format to json.

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

xliff 1.2

Well known translation exchange format.

<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>
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.

xliff 2.0

Well known translation exchange format. Used format on iOS.

<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>
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.

Android resource string

Format used on Android.

<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.

<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

<?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
  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

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