The Complete Guide to ICU Message Format
• 21 min read
Last updated:
String concatenation is the original localization sin. It works perfectly in English, fails quietly in German, and breaks outright in Arabic. The moment you write "You have " + count + " messages", you have guaranteed that your app will produce grammatically wrong output for most of the world's top twenty languages — without a single error being thrown.
ICU Message Format is the standard the industry converged on to solve this. It is the syntax behind react-intl, vue-i18n, Symfony's Translator, Android's quantity strings, and iOS's stringsdict plural rules. If you do i18n (internationalization) at any scale, you are already working within the ICU ecosystem — or you should be.
This guide covers the full picture: the core icu syntax, every argument type with production-grade code examples, advanced nesting patterns that neither Phrase nor Lokalise's guides document, framework implementations for React, Vue, Angular, and PHP/Symfony, and how to automate the entire icu translation workflow with Crowdin.
<BlogCTA
title="Free E-book on Continuous Localization!"
subtitle="Learn how to set up a continuous localization workflow to grow with multiple languages faster than with one. Experience and tips from 10+ localization experts."
buttonUrl="https://crowdin.com/learn/continuous-localization-ebook"
buttonText="Download"
buttonId="e-book"
/>