Skip to content

v0.14.0

Choose a tag to compare

@WendellXY WendellXY released this 24 Sep 04:24
· 2 commits to main since this release

Added

  • Added XML and binary .stringsdict parsing and canonical XML writing for one
    bare NSStringPluralRuleType selector per key. Wrapper text, nested or
    select/gender rules, and multiple variables remain unsupported.
  • Added the read-only check command 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 because Resource does not identify
    the quantity argument.
  • Added the deterministic __langcodec_extended_v1 CSV/TSV schema. It is
    selected automatically when the conventional wide schema cannot preserve the
    complete Resource model.

Changed

  • Generic Resource output to .stringsdict now 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-language as the
    input hint, and an explicit standard --input-format is 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 Error enum adds Error::WithPath; exhaustive
    downstream matches must handle it.
  • Breaking: CSV and TSV Format values now contain private schema state.
    Downstream callers must use new or with_records instead of struct
    literals.

Fixed

  • Android strings.xml values 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.
  • .strings input 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_map on Rust 1.97, which failed the Clippy CI job.

Full Changelog: v0.13.0...v0.14.0