Exchange XCstrings translations with collaborators
Export the protected table, edit existing values and states, then apply a full return or an explicit before-bound patch.
Export from the actual catalog
Choose Export table and select the original catalog.
Select one strict UTF-8 XCstrings 1.0 or 1.3 original, at most 5 MiB, without BOM. Import also requires one returned JSON File: a full table up to 16 MiB or an explicit partial patch up to 5 MiB. Two file roles and all options, sizes and scalar Unicode names up to 512 UTF-8 bytes are checked before any complete read.
- Send manual-exchange.json to collaborators. Edit only value and state in a JSON editor, keeping the protected fields and every row.
- Choose Apply complete table, select the same byte-exact original and the entire returned JSON; or choose Apply partial patch and supply explicit before values.
- Review counts and the full change report, download the updated catalog, then validate it in the receiving Xcode project.
Preserve the protected table
In the complete returned table, edit only value and state. Preserve format, sourceSha256, version, sourceLanguage, columns, every row, row order, valuePath and sourceLocale. A partial patch uses explicit valuePath, originalValue, originalState, value and state for each edit; unknown or repeated paths and before-value conflicts reject the whole import.
{
"format": "neatbo-xcstrings-manual-exchange-v1",
"sourceSha256": "b891764f343f28dec3340d0b75dab2590ba5bcf08b6ac81cab9330b473cb0d11",
"edits": [
{
"valuePath": "/strings/Greeting/localizations/fr/stringUnit/value",
"originalValue": "Bonjour",
"originalState": "needs_review",
"value": "Salut",
"state": "translated"
}
]
}Read the complete deliveries
Export returns the original and full table; import returns the original, updated catalog and full changes. Failure is a separate rejected state with the original and diagnosis. Every file has whole copy/download actions; the 4,000-code-point view is only a preview.
| File | Purpose |
|---|---|
| original.xcstrings | Exact original source bytes |
| manual-exchange.json | Every existing direct unit; edit value and state cells |
| updated.xcstrings | Complete imported catalog; all unedited token bytes retained |
| changes.json | Every applied before/after value and state, source names and SHA-256 |
| unsupported-shapes.json | Full refusal diagnosis paired with the original in failed state |
Read refusal scope accurately
Any variations or substitutions at root, entry, localization or unit scope, unknown state, or unknown localization shape refuse the whole operation. The failed screen retains byte-exact original.xcstrings and the complete unsupported-shapes.json with whole-file copy/download. A fatal structural prerequisite has a separate non-exhaustive diagnosis; it is never presented as a successful updated catalog.
At most 10,000 entries, 50,000 localization records, 50,000 direct units, 64 JSON container levels and 1,000,000 JSON tree nodes. The mature scanner counts containers/literals plus property nodes before recursive parsing; key strings count too. Duplicate keys, malformed JSON, invalid UTF-8 or escaped lone surrogates fail atomically.
- Known variations/substitutions and unknown direct-unit states/shapes are enumerated with original-derived UTF-16 offsets and entry/locale dictionaries.
- Invalid structural prerequisites are fatal validation diagnostics, explicitly non-exhaustive; no partial catalog is delivered.
Understand capacity and preserved bytes
Each complete exchange or updated catalog is at most 16 MiB. The complete import change report has a derived 40 MiB capacity; all artifact bytes together are capped at 61 MiB. Failed artifacts stay within 5 MiB original plus 16 MiB diagnosis. No output is silently shortened to fit.
Outside selected value/state string tokens, the original UTF-8 bytes remain exact: comments stored as metadata, spacing, CRLF, unknown objects, fractional numbers and unsafe-integer numeric lexemes are retained. The original download is never a JSON reserialization.
The valid-tree diagnostic upper bound uses 31 bytes per five-integer locator including its separator: 31 × 270,002 + 5,242,880 dictionary bytes + 1,024 fixed bytes = 13,613,966, below 16 MiB. This is a conservative dominated bound, not an observed exact maximum fixture. A change report fits below 40 MiB using two bounded 16 MiB tables plus at most 128 bytes per 50,000 edit and 16 KiB metadata; the JSON wire has its own tested 320 MiB guard without lowering public file limits.
Stop and recover the same run
A host deadline of 10 seconds includes File reads, Worker loading, readiness, calculation and complete result validation. Cancel settles immediately and terminates any live Worker; late reads/replies are ignored. Rerun the same original Files and options after stopping. Previews show at most 4,000 Unicode code points; copy/download retain every byte of each complete artifact.
Keep the original and the complete refusal diagnosis. Use a catalog-aware editor for variants, fix binding/grammar errors, or split inputs over the limits. Cancel or timeout leaves the selected Files available for a complete rerun.
References
- Collaborative XCstrings editor request
The author wants friends to help edit and prefers online access because some use Windows. No actual author catalog was provided; this supports the task, not every schema or demand volume.
- Apple string catalog documentation
String catalogs can contain variations. This tool deliberately refuses those shapes and exchanges only existing direct units.
Tools in this category
Expand a tool to see its steps, options and supported formats, then open its workspace.
XCstrings manual translation exchangeExport existing direct translations and states for collaborators, then apply a complete returned table or a SHA-bound partial patch while retaining untouched catalog bytes.
Export existing direct translations and states for collaborators, then apply a complete returned table or a SHA-bound partial patch while retaining untouched catalog bytes.
Steps
- Choose Export table and select the original catalog.
- Send manual-exchange.json to collaborators. Edit only value and state in a JSON editor, keeping the protected fields and every row.
- Choose Apply complete table, select the same byte-exact original and the entire returned JSON; or choose Apply partial patch and supply explicit before values.
- Review counts and the full change report, download the updated catalog, then validate it in the receiving Xcode project.
Available options
- Task
- Export complete exchange table · Apply complete returned table · Apply explicit partial patch
Capabilities and limits
- Select one strict UTF-8 XCstrings 1.0 or 1.3 original, at most 5 MiB, without BOM. Import also requires one returned JSON File: a full table up to 16 MiB or an explicit partial patch up to 5 MiB. Two file roles and all options, sizes and scalar Unicode names up to 512 UTF-8 bytes are checked before any complete read.
- Export every existing direct stringUnit value and state. Supported states are new, needs_review and translated. Locale names are opaque fixed keys; this does not certify their validity in Xcode. Empty entries/localizations may be retained, but new locales or units are not created.
- In the complete returned table, edit only value and state. Preserve format, sourceSha256, version, sourceLanguage, columns, every row, row order, valuePath and sourceLocale. A partial patch uses explicit valuePath, originalValue, originalState, value and state for each edit; unknown or repeated paths and before-value conflicts reject the whole import.
- Any variations or substitutions at root, entry, localization or unit scope, unknown state, or unknown localization shape refuse the whole operation. The failed screen retains byte-exact original.xcstrings and the complete unsupported-shapes.json with whole-file copy/download. A fatal structural prerequisite has a separate non-exhaustive diagnosis; it is never presented as a successful updated catalog.
- At most 10,000 entries, 50,000 localization records, 50,000 direct units, 64 JSON container levels and 1,000,000 JSON tree nodes. The mature scanner counts containers/literals plus property nodes before recursive parsing; key strings count too. Duplicate keys, malformed JSON, invalid UTF-8 or escaped lone surrogates fail atomically.
- Each complete exchange or updated catalog is at most 16 MiB. The complete import change report has a derived 40 MiB capacity; all artifact bytes together are capped at 61 MiB. Failed artifacts stay within 5 MiB original plus 16 MiB diagnosis. No output is silently shortened to fit.
- Outside selected value/state string tokens, the original UTF-8 bytes remain exact: comments stored as metadata, spacing, CRLF, unknown objects, fractional numbers and unsafe-integer numeric lexemes are retained. The original download is never a JSON reserialization.
- A host deadline of 10 seconds includes File reads, Worker loading, readiness, calculation and complete result validation. Cancel settles immediately and terminates any live Worker; late reads/replies are ignored. Rerun the same original Files and options after stopping. Previews show at most 4,000 Unicode code points; copy/download retain every byte of each complete artifact.