Free Tool

    ICU Message Formatter & Editor

    Build, test, and validate ICU MessageFormat strings with live preview, 100+ templates, and multi-language CLDR plural validation.

    Templates50
    ICU Editor
    Valid Syntax
    14 characters1 lines

    Test Variables & Live Preview

    Adjust variables and switch languages to verify CLDR plural rules

    Locale:
    Rendered Output (en):
    Hello, Alex!
    Export to Intlayer Type-Safe Declaration
    import { type Dictionary } from 'intlayer';const convertedMessageContent = {  key: 'converted-message',  content: 'Hello, {{name}}!',} satisfies Dictionary;export default convertedMessageContent;
    Intlayer validates translations at compile-time with full TypeScript autocomplete.

    ICU MessageFormat Syntax Cheat Sheet

    Quick syntax rules and how each pattern maps to Intlayer's type-safe declarations

    FeatureSyntaxExampleNotesIntlayer Equivalent
    Simple Variable{variableName}Hello {name}!Alphanumeric names, single brackets{{name}}
    Pluralization{count, plural, one {...} other {...}}{n, plural, one {# item} other {# items}}Requires "other". # is replaced by count.plural({ one: "1 item", other: "{{count}} items" })
    Exact Match Plural=0 {...} =1 {...}{n, plural, =0 {None} one {#} other {#}}Takes precedence over CLDR keywordsenu({ 0: "None", 1: "1", fallback: "{{count}}" })
    Select (Context/Gender){key, select, choice1 {...} other {...}}{gender, select, male {He} other {They}}Case-sensitive exact string comparisonselect({ male: "He", fallback: "They" }, "gender")
    Selectordinal{rank, selectordinal, one {#st} other {#th}}{pos, selectordinal, one {#st} two {#nd} other {#th}}Ordinal suffix rules per CLDRenu({ 1: "1st", 2: "2nd", fallback: "{{pos}}th" })
    Number Formatting{val, number, [style]}{price, number, currency}Supports percent, currency, integer stylesIntl.NumberFormat or type-safe formatting
    Escaping'{' and '' for apostrophesDon''t '{'escape'}'Single quotes escape literal blocks, '' escapes quoteLiteral strings naturally supported
    Intlayer compiler-driven architecture replaces complex runtime message parsing with compile-time type-safety and automated extraction.
    Intlayer Ecosystem

    Never Worry About Complex Syntax Again

    Intlayer turns internationalization into a joyful developer experience with compile-time type-safety, automatic component extraction, and seamless CMS integration.