Localizely logo
  • Home
  • Getting started
  • How it works
  • Pricing
  • FAQ
Sign up

I18n questions · Software localization

What are the language codes for Simplified and Traditional Chinese? 

Simplified Chinese is zh-Hans and Traditional Chinese is zh-Hant. Both are BCP 47 language tags: zh is the ISO 639 code for Chinese and Hans and Hant are ISO 15924 script codes, so the tag names the writing system rather than the place where the reader lives.

Add a region subtag only when the content differs by market: zh-Hans-CN (mainland China), zh-Hans-SG (Singapore), zh-Hant-TW (Taiwan), zh-Hant-HK (Hong Kong), zh-Hant-MO (Macao). All of them are registered in the IANA language subtag registry, so any BCP 47 parser accepts them. RFC 5646 asks for "as precise a tag as possible, but no more specific than is justified", and for most apps two locales, zh-Hans and zh-Hant, are enough.

The older zh-CN, zh-TW and zh-HK tags are still everywhere. They are valid, but they name a region and leave the script implied: CLDR's likely-subtags data expands zh-TW to zh-Hant-TW and zh-HK to zh-Hant-HK, while plain zh, and with it zh-CN and zh-SG, resolves to Simplified. Script subtags remove that guesswork, for example for Traditional Chinese readers outside Taiwan and Hong Kong.

How each platform writes the same thing:

<html lang="zh-Hant">

Android resource folders use the BCP 47 form with a b+ prefix: values-b+zh+Hans and values-b+zh+Hant (Android's resource docs list this form from Android 7.0, API level 24); the legacy values-zh-rCN and values-zh-rTW folders still work.

iOS and macOS name .lproj folders after the Apple language ID, which follows BCP 47: zh-Hans.lproj and zh-Hant.lproj.

Flutter:

supportedLocales: const [
  Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hans'),
  Locale.fromSubtags(languageCode: 'zh', scriptCode: 'Hant'),
],

Two things that are not script codes. Cantonese is a separate language with its own subtag, yue (the registry lists it under the zh macrolanguage), so Cantonese as written in Hong Kong is yue-Hant-HK, not a variant of zh-Hant. And zh-Hant-TW and zh-Hant-HK differ in vocabulary and conventions, not in script, so split them into two locales only if you translate them separately.

Full lists: language and country codes and ISO 15924 script codes.

Published Oct 9, 2026 · Markdown version

Related software localization questions:

Localization workflow:

Learn how a localization workflow works
Localizely logo
About
Free tools
Boring stuff
  • Privacy Policy
  • Terms of Service
  • Cookie Policy
  • Compare
Newsletter
Copyrights 2026 © Localizely