Ten years ago, I got my first job in the field of languages. I was a "translation engineer", working on tooling for translators. I very quickly was told to never represent a language by a flag.
I'm sharing this here because this is something you either know, or don't, and many people don't.
Why is simple: languages do not map 1:1 to a country.
- A country can have multiple languages
- A language can be spoken in multiple countries
- A language can exist without being spoken in any country
- A country can exist without an officially recognised language
Today as I sit here, I'm at a language meetup where language tables each have a flag on them. Well, none of us at the Russian table are comfortable with that Russian flag, so we just turn it around and write "RU" on the other side.
Wikipedia has an article about this: https://en.wikipedia.org/wiki/Flag_icons_for_languages
So how are you supposed to do this correctly ? ISO 639 has a list of 2-letter and 3-letter codes for languages:
- You want to represent a language, use ISO 639-1: a two letter code. For example, "English" is "en" and "French" is "fr".
- You want to represent a language, but wish for a larger code for some reason (such as disambiguation with state or country codes)? You can use ISO 639-2/T: 3-letter codes for the languages. For example,
"English" is "eng" and "French" is "fra".
- You want to represent a language, as spoken in a particular country? ISO 639 and ISO 3166 work together. You can represent "English as spoken in England" as "en_GB", "American English" as "en_US", "Canadian French" as "fr_CA", and so on. (This is a very flexible standard, allowing for a lot of variations and a topic for a more motivated person than me. Also see: https://en.wikipedia.org/wiki/IETF_language_tag)
- You want to represent the abstract notion of translations or internationalization, such as for an icon to change the language? This wikipedia article may help. The two most common variations I've seen are an icon that has "A" and "文" together, or some kind of globe icon.
- You want to represent a currency? Use ISO 4217 currency codes: "USD" for US Dollar, etc. Some countries have multiple currencies, don't use a flag without disambiguating somewhere.
- You want to represent a country? You can use a flag, I don't care. But even then, ISO 3166 will probably be less political :)