Release v0.15.0
Your translators can work now. The write→ship cycle opens up to humans: verbaly export writes translator-ready XLIFF 2.0 or CSV files (source text + current translation per entry) and verbaly import fills the catalogs back — validating every entry the way translate does, so a translator's typo in a {param} or an <em> tag never reaches your UI. Flat JSON stays the native format (most TMS platforms ingest it directly); export/import is the round-trip for everything else. No breaking changes, no API removals, no new dependencies.
Highlights
verbaly export— one translator-ready file per locale, XLIFF 2.0 (TMS standard) or CSV (spreadsheets), with the source text next to each translation.--missingexports only what's untranslated.verbaly import— reads translated XLIFF 2.0/1.2 or CSV back into your catalogs. Every entry is structure-validated: translations that drop a{param}, a plural variant or a tag are rejected and reported instead of breaking your UI.- Existing translations are kept unless you pass
--overwrite;--dry-runpreviews the whole import. - No TMS needed for the simple case: catalogs are plain flat JSON — Crowdin, Lokalise, Phrase and friends ingest them natively.
For the full details of this release, see the repository changelog.