Repository navigation
v0.14.0
Added
- Added XML and binary
.stringsdictparsing and canonical XML writing for one
bareNSStringPluralRuleTypeselector per key. Wrapper text, nested or
select/gender rules, and multiple variables remain unsupported. - Added the read-only
checkcommand for parsing, normalized locale identity,
resource structure, CLDR plural completeness, and normalized placeholder
consistency across singular translations sharing a domain and key. Plural
branches are not placeholder-compared becauseResourcedoes not identify
the quantity argument. - Added the deterministic
__langcodec_extended_v1CSV/TSV schema. It is
selected automatically when the conventional wide schema cannot preserve the
completeResourcemodel.
Changed
- Generic
Resourceoutput to.stringsdictnow requires all three structural
stringsdict.*entry custom fields and rejects unsupported metadata instead
of guessing a selector from plural-form text. - Standalone single-language conversion now uses
--source-languageas the
input hint, and an explicit standard--input-formatis authoritative even
when the extension is absent or different. Explicit output format selections
are likewise authoritative over destination extensions. - Path-based parser reads and writes now retain caller-visible path context.
Writes use a flushed and synced same-directory temporary file before atomic
replacement. Unix mode bits are preserved, symlink referents are replaced
without replacing the link, and Unix hard-linked destinations are rejected;
ownership, ACLs, and extended attributes are not copied. - Translation and Tolgee matching now normalize spelling while comparing the
complete locale identity. Script and region variants remain distinct, bare
language fallback must be unambiguous, and duplicate normalized identities
are rejected. - AI translation now rejects blank output and placeholder-corrupt output for
each generated value before any destination is written, independently of
parser strictness. - Breaking: the public
Errorenum addsError::WithPath; exhaustive
downstream matches must handle it. - Breaking: CSV and TSV
Formatvalues now contain private schema state.
Downstream callers must useneworwith_recordsinstead of struct
literals.
Fixed
- Android
strings.xmlvalues written as<![CDATA[...]]>are no longer read
as empty strings, so conversions keep their text. - Placeholder signatures treat a percent sign followed by a space and a word
(5% bonus,50% off) as prose instead of a space-flag conversion, which
removed false argument mismatches between languages. .stringsinput read from bytes or a string (Parser::from_reader,
from_str) now decodes BOM-prefixed UTF-16 and UTF-8 like path reads.- Clippy
for_kv_mapon Rust 1.97, which failed the Clippy CI job.
Full Changelog: v0.13.0...v0.14.0