Projects

Which file formats can I use?

transglot reads and writes twenty localization file formats, covering web, mobile, desktop, game and document workflows.

Every format below works for bringing strings in (browser upload, CLI push, API) and for getting translations out (CLI pull, export, API). Placeholders and plural forms are kept intact, and the automatic checks flag a translation that breaks them before it reaches your app.

EcosystemFormatsSeparate plural forms
Web and JavaScriptJSON (flat), JSON (nested), YAMLNo
AppleiOS Strings (.strings), iOS Stringsdict (.stringsdict), Apple String Catalog (.xcstrings)Stringsdict and String Catalog
AndroidAndroid XMLYes
FlutterFlutter ARBYes
PHP and LaravelLaravel JSON, Laravel PHPNo
InterchangeXLIFF 1.2 and XLIFF 2.0, gettext POgettext PO
.NET and Java.NET .resx, Java .propertiesNo
SpreadsheetsCSV and XLSXYes, one row per form
DocumentsMarkdown / MDXNo
GamesUnity CSV (Unity Localization string tables), Unreal PO (Unreal Engine Localization Dashboard)No

Things to know

  • Plurals in any format. Formats without separate plural forms can still hold plurals as ICU messages inside a string, such as {count, plural, one {# item} other {# items}}. See Plural forms.
  • Laravel. Use Laravel JSON (lang/{locale}.json) to bring Laravel strings in. Laravel PHP array files that start with the standard comment header cannot be read, so the browser upload does not offer .php files.
  • Apple. .stringsdict holds plural strings only; keep simple strings in .strings, or use a String Catalog for both.
  • Descriptions. Flutter ARB, XLIFF 1.2, Apple String Catalog, gettext PO, CSV, XLSX, Unity CSV and Unreal PO carry a description for each string, which becomes the key's description. In other formats, write descriptions in the console. See Add or edit a key.
  • Detection. transglot detects a file's format from its contents and name. When it guesses wrong in the browser upload, pick the right format on the file's row before importing. See Import content.

On this page