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.

FormatIDEditingVersionsKeptNot supported
Android XMLandroid-xmlLimitedAndroid 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
CSVcsvFullRFC 4180 CSV: key column plus one column per languageQuoted fields
embedded commas
quotes and line breaks
Only the key and language columns are kept; extra columns are dropped
Flutter ARBarbFullFlutter 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 POpoFullGNU gettext POmsgctxt
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
INIiniLimitedINI sectionsExport only: flat key=value lines, values with special characters quotedCannot be opened again by Toucan (no loader)
Dots in keys are written as underscores
Sections and comments are not written
JSON (flat)jsonFullAny JSON object; nested objects and arraysNested 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)namespacedLimitedOne 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 .propertiesjava-propertiesFullJava .properties (ISO-8859-1 with \uXXXX escapes); line continuationsEscapes
unicode
leading spaces
line continuations
multiline text
Comments in the file are not kept
Key order is sorted on save
Laravel PHPlaravel-phpLimitedLaravel 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
RESXresxLimited.resx and .resw string resourcesString 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
TOMLtomlLimitedTOML basic and literal strings; [section] and dotted keys; one file per languageSections
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
XLIFFxliffFullXLIFF 1.2 and 2.0Source text
notes
state
datatype
original
extra elements such as context-group
original file paths
Segmentation (<seg-source>, <mrk>) is not edited
YAMLyamlLimitedYAML 1.1 and 1.2 scalar maps; one file per languageNested 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 .stringsios-stringsLimitedApple .strings ("key" = "value";)Escapes
unicode
multiline text
per-language .lproj folders
.stringsdict plural files are not read
Comments in the file are not kept