A quick rundown on language tag
One of the first question you think about a translation is usually, what language is this translated to? English, 中文, 日本語 or something else. This is can be defined with ISO 639 code which defines the language code, en for English, zh for 中文 and ja for 日本語.
Next you would want to define what locale are you localizing to, this is usually a country such as US/UK for English, Taiwan/China for 中文 but of course there are many more countries that are using those languages; think Australia, Canada is also using English. In Chinese’s case Singapore, Hong Kong and Malaysia also commonly uses Chinese too. (In some cases, I’ve even seen website use zh-US for 中文 in the US.) This can be defined with ISO 3166 alpha-2 codes: US for the US, TW for Taiwan.
Combining them you get the commonly seen en-US and zh-TW language codes. This is called a IETF BCP 47 language tag. It also supports denoting scripts, so for Traditional Chinese (繁體中文) used in Taiwan you would write it as zh-Hant-TW and for Simplified Chinese(简体中文) used in China, you can write it as zh-Hans-CN.
Problem with translating to Chinese
Okay that’s a long enough pre-emblem. What I’m getting at is we can rank Chinese translation like this:
- C-tier: 中文 / Chinese — the worst, you don’t even know what flavor of Chinese you’re getting
- B-tier: 繁體中文 Traditional Chinese / 简体中文 Simplifed Chinese — okay we’re getting somewhere, but for a lot of users, it still is going to read wrong. Think a Hong Kong user reads
zh-TWtranslation then to find all the unfamiliar words, and vice versa.- Some companies choose to avoid the word Taiwan to appease China which make this problem much more frequently seen than other languages.
- 🌟S-tier: 繁體中文 (台灣) Traditional Chinese (Taiwan) / … — this is rare but is the correct way to label your translations. Even if you do not offer the exact flavor your user is looking for, they would at least know what they’re getting into.

Fallback Orders
Another common pitfall is the fallback order, a lot of systems does not let you pick the order and just automatically fallback: if zh-TW is not available, it falls back to zh and then resolves to zh-CN. However, for some people, like myself, would much more prefer zh-TW > English > other options. Fortunately, most mobile phone operating systems (aka iOS and Android), you do have the option to choose your fallback order now. Modern browsers also do send language fallback order as the Accept-Language header but it is not always supported by whatever localization pipeline it uses.