Skip to content

Positioning: lossless ICU semantics end-to-end (source → catalog → TMS → runtime) as a differentiator #354

Description

@swernerx

Idea

The competitive analysis (docs/research/competitors/, snapshot 2026-07-06) surfaced a marketing-ready pattern: ICU MessageFormat is the only message syntax understood on both sides of the localization chain (libraries and TMS) — but almost every competitor loses or gates ICU semantics somewhere along the way. Palamedes owns catalog + ICU semantics in one engine (ferrocat, incl. structured audits and ICU authoring diagnostics — see README and docs/principles.md §4), so "lossless ICU end-to-end" is a claim we can plausibly prove, not just assert.

Evidence from the competitive analysis

Libraries (docs/research/competitors/frameworks/):

  • i18next: own {{var}} format; ICU only via i18next-icu plugin that replaces the native format entirely (either/or)
  • Vue I18n: own non-ICU DSL by default; ICU opt-in and build-tool-gated (bundler plugin required)
  • Paraglide/inlang: own .inlang format; ICU MessageFormat 1 only as import plugin
  • FormatJS, next-intl, Lingui: ICU native — but FormatJS has no RSC story, next-intl is Next.js-only, Lingui just forced a breaking ID-encoding migration

TMS (docs/research/competitors/business/):

  • Lokalise: ICU is converted into its own CLDR plural model on import (no raw ICU editing); documented gaps for embedded plurals and named placeholders
  • Weblate: no ICU format at all — only a QA check flag (icu-message-format)
  • Phrase: native but opt-in per project; ICU parsing is all-or-nothing per file, messages can't be split/joined
  • General Translation: no ICU for JSX content (own <Plural>/<Branch> components)
  • Crowdin: genuinely native (editor-level plural splitting + validation) — the strongest TMS on this axis

No single competitor covers both sides (library runtime and translator-facing catalog workflow) with unmodified ICU semantics. That's the gap.

Proposed framing

Wer ICU-Semantik durchgängig und verlustfrei durch die Kette Source → Katalog → TMS → Runtime trägt, hat ein reales Differenzierungsmerkmal.

Candidate surfaces: site comparison page, docs/approach-comparison.md, founder-led content (docs/founder-led-content.md), README proof section.

Before publishing (repo culture: proof first)

  • Verify our own claim end-to-end: author an ICU message (plural/select/nested), run it through extract → .po catalog → a TMS round-trip (e.g. Weblate/Crowdin) → compile → runtime render, and document where semantics survive byte-for-byte
  • Decide the honest scope of "lossless" (e.g. what happens to ICU inside .po plural forms across TMS imports?)
  • Turn the verified chain into a checked-in proof artifact (fixture + script), consistent with docs/proof-and-benchmarks.md
  • Then write the marketing copy on top of the proof

Sources

All claims above are sourced with access dates in docs/research/competitors/ (fact sheets + per-product dossiers, ICU verification round of 2026-07-06 against official vendor docs).

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    marketingPositioning, content, and distribution work

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions