I’ve come across relatively few engineers who had solid experience in software internationalization and knew about locale-specific challenges when building global apps. Yes, they all realized there are different alphabets, date and time formats, currencies, etc. around the world, they also understood it matters for the user to get it right, but somehow they rarely knew these locale-specific nuances are all readily available in open-source i18n libraries. All it takes is to use them in one of the many implementations. When asked specifically about Unicode ICU or CLDR, the awareness of these internationalization standards was even lower – even among engineers who had worked on developing global software before. Typically, when faced with an internationalization challenge, their intuitive solution was to reinvent the wheel by coding locale-specific formatters from scratch, which resulted in waste of time and often inaccurate textual representations of key product information to the user. In extreme cases the challenge was ignored in development until it came back with negative feedback from irate users.
Use ready-made i18n libraries to format locale-specific information
For a few years now, Unicode has been publishing International Components for Unicode (ICU), a set of i18n libraries designed to handle locale-specific aspects in software development and ready to use across multiple implementations. It’s a great repository of solutions, which can save you lots of engineering time in your effort to globalize your software.
The ICU components are an integral part of software development because they hide the cultural nuances and technical complexities of locale-specific software requirements. These complexities provide critical functionality for applications, but the application developer does not need to exert a huge effort or incur high costs to build them.
So no need to re-invent the wheel if you have to:
- format locale-specific dates, times, currencies, or numbers;
- translate month names, day names, country names;
- sort list items alphabetically (A-Z);
- do relative time calculations (“X days ago”, “X minutes left”);
- use pluralization of nouns (“1 user added, 2 users added, 3 users added…”)
Available implementations include Java, C/C++, Angular, iOS, Android, and more. Need more convincing? ICU is used as a worldwide standard across software from IBM, Apple, Google, Adobe, Amazon and many more, so if you’re about to go global, make sure your engineering team is using ICU libraries to handle locale-specific data.