Documentation
Format support matrix
Which file formats Toucan edits safely, what survives a save, and what does not.
Generated from the format strategies by FormatSupportTests; to refresh it run the Core tests with TOUCAN_UPDATE_DOCS=1. Do not edit by hand.
Full: everything listed under Kept survives load and save. Limited: strings are editable, but the items under Not supported are dropped or rewritten on save. Where a format can lose content that is already in the project's files (Android XML and RESX), Toucan checks the files when the project opens and again before saving: it warns, and refuses to overwrite them. Use Save As to write a copy.
| Format | ID | Editing | Versions | Kept | Not supported |
|---|---|---|---|---|---|
| Android XML | android-xml | Limited | Android res/values\*/strings.xml | <string> and <string-array> items multiline text markup characters | <plurals>, other resource types and translatable="false" are not kept: such projects open with a warning and cannot be saved in place Android escapes (\' and \n) are not converted XML comments are not kept |
| CSV | csv | Full | RFC 4180 CSV: key column plus one column per language | Quoted fields embedded commas quotes and line breaks | Only the key and language columns are kept; extra columns are dropped |
| Flutter ARB | arb | Full | Flutter ARB (intl_\.arb, app_\.arb), region and script locales | @key metadata (description, placeholders) @@ header entries ICU plural and select messages kept as text @@locale | ICU messages are edited as one string, not as separate plural forms |
| Gettext PO | po | Full | GNU gettext PO | msgctxt plural forms translator and extracted comments references flags (fuzzy) header | Obsolete (#~) entries are not read and are dropped on save POT templates are not created automatically |
| INI | ini | Limited | INI sections | Export only: flat key=value lines, values with special characters quoted | Cannot be opened again by Toucan (no loader) Dots in keys are written as underscores Sections and comments are not written |
| JSON (flat) | json | Full | Any JSON object; nested objects and arrays | Nested keys arrays multiline text escapes numbers and booleans left unedited placeholders sorted stable output | Comments (JSON has none) null values are dropped Empty values are not written Key order is sorted on save |
| JSON (namespaced / i18next) | namespaced | Limited | One JSON file per namespace under locales/<lang>/ | Nested keys multiline text escapes numbers and booleans left unedited | Writes both <lang>.json and locales/<lang>/<ns>.json, so a reload sees each key twice null values are dropped Key order is sorted on save |
| Java .properties | java-properties | Full | Java .properties (ISO-8859-1 with \uXXXX escapes); line continuations | Escapes unicode leading spaces line continuations multiline text | Comments in the file are not kept Key order is sorted on save |
| Laravel PHP | laravel-php | Limited | Laravel lang/<locale>/<file>.php returning an array (short and array() syntax) | Nested arrays single- and double-quoted strings multiline text escapes placeholders (:name) | Computed values (function calls, constants, numbers) are not read and are dropped on save Comments and PHP code around the array are not kept JSON language files (lang/en.json) are a separate format |
| RESX | resx | Limited | .resx and .resw string resources | String entries multiline text culture suffix in the file name | Non-string resources, metadata and custom headers: such projects open with a warning and cannot be saved in place Files not named Resources.resx or Resources.<culture>.resx: blocked for the same reason Per-entry comments are not kept |
| TOML | toml | Limited | TOML basic and literal strings; [section] and dotted keys; one file per language | Sections dotted keys multiline text via escapes unicode escapes | Comments in the file are not kept Arrays, inline tables, multiline (""") strings and dates are not read |
| XLIFF | xliff | Full | XLIFF 1.2 and 2.0 | Source text notes state datatype original extra elements such as context-group original file paths | Segmentation (<seg-source>, <mrk>) is not edited |
| YAML | yaml | Limited | YAML 1.1 and 1.2 scalar maps; one file per language | Nested and flat dotted keys (same style as the file) block scalars (| and >) read multiline text quoted scalars such as on off ~ and numbers | Comments in the file are not kept Anchors, aliases, tags and sequences are not read Block scalars are written as quoted strings |
| iOS .strings | ios-strings | Limited | Apple .strings ("key" = "value";) | Escapes unicode multiline text per-language .lproj folders | .stringsdict plural files are not read Comments in the file are not kept |