How to offend most of your international users all at once

illustrations illustrations illustrations illustrations illustrations illustrations illustrations

Published on 17 November 2022 by Andrew Owen


We love icons. They’re a great way to convey information simply, even if many of them are skeuomorphs from a bygone age. You know, like using a floppy disk ( 💾 ) to mean save; a telephone receiver ( 📞 ) for voice calls; an envelope ( ✉️ ) for email; a single lens reflex camera ( 📷 ) for taking a picture; a movie camera ( 🎥 ) for video; a folder ( 📁 ) for file containers; a calendar ( 📅 ) for dates; a newspaper ( 📰 ) for news feeds; a spiral notepad ( 🗒️ ) for text editors; an alarm clock ( ⏰ ) for alerts; a stopwatch ( ⏱️ ) for timers; a bed ( 🛏️ ) for sleep; a book ( 📖 ) for electronic publications; and so on. And I took most of those examples from the current version of iOS nearly a decade after Apple supposedly abandoned skeuomorphism. But we keep on using them because they are unambiguous, with a one-to-one meaning. Unlike say, flags.

Flags are problematic. All of them, not just the ones banned in Forza as “notorious iconography”. Typically, they represent a cultural identity that even those who reside within the state that they represent may not be comfortable with. They can also be unnecessary reminders of past wars, territorial disputes and current conflicts. And unlike icons, there is no one-to-one match between flags and languages. The same language may be spoken in multiple states. It is common for states to have at least two widely spoken languages. There are multiple states that use the same language. Some states have flags that look very similar to the flag of other states. And that’s just scratching the surface of the problem.

The W3C has this to say about it:

Don’t use flags to indicate languages! Flags represent countries, not languages. Numerous countries use the same language as another country, and numerous countries have more than one official language. Flags don’t map well onto these permutations. In addition, flags have nationalistic connotations that may be unwelcome for people of other countries, even though they speak the same language. While flags can be very appropriate for sites that are distinguished on the basis of region (e.g. the site vs. the site), you should normally avoid them when dealing with links to pages that are just translations.

And that misses the point that Ireland typically gets lumped in with the UK due to the shared use of English (at time of writing, redirects to So what’s the solution? Use the ISO two-letter language codes. And, optionally, you can include a hover text with the name of the language in that language. For example, FR [Français]. If you need to distinguish between variants of the same language, you can use the subtags from the IETF language tags. For example, PT-BR [português brasileiro]. If you’re convinced, you could stop reading now. If not, here are some example problems.

Brazil 🇧🇷

Commonly used to represent Portuguese. There are over 100 Amerindian languages spoken in Brazil. There are also differences between Brazilian Portuguese and the Portuguese used in Portugal.

Chad 🇹🇩

Indistinguishable from the flag of Romania. The two official languages are French and Arabic. Setting aside using the flag of France for French, which flag are you going to choose for Arabic that isn’t going to upset the occupants of at least one other Arabic-speaking nation?

France 🇫🇷

Commonly used to represent French. France has many regional languages, including Basque, Breton, Catalan and Corsican. French is one of the main languages in countries including Belgium and Switzerland. French is also a major language in many former French colonies that aren’t too happy about having been colonized by France.

Germany 🇩🇪

Commonly used to represent German. Germany has many regional languages, including, Low Rhenish, North Frisian and Saterland Frisian. German is also the main language in Austria and one of the main languages in Switzerland.

India 🇮🇳

The main two languages are Hindi and English. But there are hundreds of languages in use. At time of writing, the constitution mentions 22 languages, with demands to add another 38.

Mexico 🇲🇽

Commonly used to represent Spanish. The federal government recognizes over 50 linguistic groups and over 300 varieties of indigenous languages. Spanish is spoken throughout South America, but there is no homogenous Latin American dialect. There are at least 16 languages besides Spanish and Portuguese used in South America with at least 125,000 speakers. Spanish as spoken in the Americas differs from that spoken in Spain. Spain itself has many regional languages, including Basque, Catalan and Galician.

United Kingdom 🇬🇧

Commonly used to represent English. English is an official language in over 50 states, although that doesn’t include the United Kingdom, the United States, Australia or New Zealand. At the time of writing, the only official language in the UK is Welsh, and the only official flags are the Welsh and Scots flags. As I’ve mentioned before in other articles, there are two distinct spelling systems (Cambridge; -ise endings, and Oxford; -ize endings). Cambridge is used in most of the former colonies, except Canada (which has its own versions of English and French). The IETF advocates using the two-letter country code in addition to the ISO two-letter language code, but that produces EN-GB, which doesn’t tell you if you’re using Cambridge or Oxford. Also, much to the annoyance of the English, American is the most commonly used English dialect. I therefore propose the following codes:

  • (American) English: EN (the lingua franca, to the annoyance of the French)
  • Australian English: EN-AU (the official Australian version)
  • Cambridge English: EN-IE (same as Hiberno-English, an official language of Ireland)
  • Canadian English: EN-CA (any version of English that doesn’t closely follow a single dialect)
  • New Zealand English: EN-NZ (vowel-reduced English)
  • Oxford English: EN-OX (English for classics scholars)
  • South African English: EN-ZA (English where vowels are entirely optional)
  • Strine: EN-OZ (the version of Australian English as it’s actually used)

Image: The Esperanto flag, in case you were wondering.