Tuesday, March 25, 2008

Localization in ASP.NET

Working on my International BlogEngine.NET theme helped me round out my understanding of the System.Globalization namespace, specifically the nifty CultureInfo class.

I have been working with CultureInfo on a current project in order to display content in English and Chinese WITHOUT having to make multiple copies of each .aspx file. Originally, I had used this article (which coincidentally the author is localizing for Chinese): Localization in ASP.NET 2.0. This was a great help in getting started.

However, I learned a bit more while working on the International BlogEngine.NET theme (which made me go back to my current project and restructure a few things):

The key to understanding Internationalization in .NET is the CultureInfo class and how Cultures are named.

  • Three important types of Cultures: Invariant, Neutral, and Specific. The Invariant is a default, and is represented by an empty String.
  • Neutral Cultures are usually represented by a lowercase two-character String, such as en (English), fr (French), es (Spanish), and represent a language, with no information about location.
  • Specific Cultures represent a language and a location and are usually represented by a lowercase-two character String (language), plus an uppercase two character String (Country), separated by a dash. Some examples include: en-GB (English, Great Britian), en-US (English, U.S.), fr-CA (French, Canada).
  • The Culture Names for Chinese are a bit odd. zh-CHS represents Simplified Chinese, the form of written Chinese used by the mainland. zh-CHT represents Traditional Chinese, used by Hong Kong and Taiwan. There is no culture with the name of just zh to represent Chinese in general. I learned this the hard way when attempting to simplify the names of my Resource files (.resx files) so that they did not represent a specific culture and tried to use just zh for my Simplified Chinese, which needless to say did not work.
  • There are a handful of other exceptions to be aware of.


Here is a table (pulled from MSDN):

Culture Name

Language-Country/Region

"" (empty string)

invariant culture

af

Afrikaans

af-ZA

Afrikaans - South Africa

sq

Albanian

sq-AL

Albanian - Albania

ar

Arabic

ar-DZ

Arabic - Algeria

ar-BH

Arabic - Bahrain

ar-EG

Arabic - Egypt

ar-IQ

Arabic - Iraq

ar-JO

Arabic - Jordan

ar-KW

Arabic - Kuwait

ar-LB

Arabic - Lebanon

ar-LY

Arabic - Libya

ar-MA

Arabic - Morocco

ar-OM

Arabic - Oman

ar-QA

Arabic - Qatar

ar-SA

Arabic - Saudi Arabia

ar-SY

Arabic - Syria

ar-TN

Arabic - Tunisia

ar-AE

Arabic - United Arab Emirates

ar-YE

Arabic - Yemen

hy

Armenian

hy-AM

Armenian - Armenia

az

Azeri

az-AZ-Cyrl

Azeri (Cyrillic) - Azerbaijan

az-AZ-Latn

Azeri (Latin) - Azerbaijan

eu

Basque

eu-ES

Basque - Basque

be

Belarusian

be-BY

Belarusian - Belarus

bg

Bulgarian

bg-BG

Bulgarian - Bulgaria

ca

Catalan

ca-ES

Catalan - Catalan

zh-HK

Chinese - Hong Kong SAR

zh-MO

Chinese - Macao SAR

zh-CN

Chinese - China

zh-CHS

Chinese (Simplified)

zh-SG

Chinese - Singapore

zh-TW

Chinese - Taiwan

zh-CHT

Chinese (Traditional)

hr

Croatian

hr-HR

Croatian - Croatia

cs

Czech

cs-CZ

Czech - Czech Republic

da

Danish

da-DK

Danish - Denmark

div

Dhivehi

div-MV

Dhivehi - Maldives

nl

Dutch

nl-BE

Dutch - Belgium

nl-NL

Dutch - The Netherlands

en

English

en-AU

English - Australia

en-BZ

English - Belize

en-CA

English - Canada

en-CB

English - Caribbean

en-IE

English - Ireland

en-JM

English - Jamaica

en-NZ

English - New Zealand

en-PH

English - Philippines

en-ZA

English - South Africa

en-TT

English - Trinidad and Tobago

en-GB

English - United Kingdom

en-US

English - United States

en-ZW

English - Zimbabwe

et

Estonian

et-EE

Estonian - Estonia

fo

Faroese

fo-FO

Faroese - Faroe Islands

fa

Farsi

fa-IR

Farsi - Iran

fi

Finnish

fi-FI

Finnish - Finland

fr

French

fr-BE

French - Belgium

fr-CA

French - Canada

fr-FR

French - France

fr-LU

French - Luxembourg

fr-MC

French - Monaco

fr-CH

French - Switzerland

gl

Galician

gl-ES

Galician - Galician

ka

Georgian

ka-GE

Georgian - Georgia

de

German

de-AT

German - Austria

de-DE

German - Germany

de-LI

German - Liechtenstein

de-LU

German - Luxembourg

de-CH

German - Switzerland

el

Greek

el-GR

Greek - Greece

gu

Gujarati

gu-IN

Gujarati - India

he

Hebrew

he-IL

Hebrew - Israel

hi

Hindi

hi-IN

Hindi - India

hu

Hungarian

hu-HU

Hungarian - Hungary

is

Icelandic

is-IS

Icelandic - Iceland

id

Indonesian

id-ID

Indonesian - Indonesia

it

Italian

it-IT

Italian - Italy

it-CH

Italian - Switzerland

ja

Japanese

ja-JP

Japanese - Japan

kn

Kannada

kn-IN

Kannada - India

kk

Kazakh

kk-KZ

Kazakh - Kazakhstan

kok

Konkani

kok-IN

Konkani - India

ko

Korean

ko-KR

Korean - Korea

ky

Kyrgyz

ky-KG

Kyrgyz - Kyrgyzstan

lv

Latvian

lv-LV

Latvian - Latvia

lt

Lithuanian

lt-LT

Lithuanian - Lithuania

mk

Macedonian

mk-MK

Macedonian - Former Yugoslav Republic of Macedonia

ms

Malay

ms-BN

Malay - Brunei

ms-MY

Malay - Malaysia

mr

Marathi

mr-IN

Marathi - India

mn

Mongolian

mn-MN

Mongolian - Mongolia

no

Norwegian

nb-NO

Norwegian (Bokmål) - Norway

nn-NO

Norwegian (Nynorsk) - Norway

pl

Polish

pl-PL

Polish - Poland

pt

Portuguese

pt-BR

Portuguese - Brazil

pt-PT

Portuguese - Portugal

pa

Punjabi

pa-IN

Punjabi - India

ro

Romanian

ro-RO

Romanian - Romania

ru

Russian

ru-RU

Russian - Russia

sa

Sanskrit

sa-IN

Sanskrit - India

sr-SP-Cyrl

Serbian (Cyrillic) - Serbia

sr-SP-Latn

Serbian (Latin) - Serbia

sk

Slovak

sk-SK

Slovak - Slovakia

sl

Slovenian

sl-SI

Slovenian - Slovenia

es

Spanish

es-AR

Spanish - Argentina

es-BO

Spanish - Bolivia

es-CL

Spanish - Chile

es-CO

Spanish - Colombia

es-CR

Spanish - Costa Rica

es-DO

Spanish - Dominican Republic

es-EC

Spanish - Ecuador

es-SV

Spanish - El Salvador

es-GT

Spanish - Guatemala

es-HN

Spanish - Honduras

es-MX

Spanish - Mexico

es-NI

Spanish - Nicaragua

es-PA

Spanish - Panama

es-PY

Spanish - Paraguay

es-PE

Spanish - Peru

es-PR

Spanish - Puerto Rico

es-ES

Spanish - Spain

es-UY

Spanish - Uruguay

es-VE

Spanish - Venezuela

sw

Swahili

sw-KE

Swahili - Kenya

sv

Swedish

sv-FI

Swedish - Finland

sv-SE

Swedish - Sweden

syr

Syriac

syr-SY

Syriac - Syria

ta

Tamil

ta-IN

Tamil - India

tt

Tatar

tt-RU

Tatar - Russia

te

Telugu

te-IN

Telugu - India

th

Thai

th-TH

Thai - Thailand

tr

Turkish

tr-TR

Turkish - Turkey

uk

Ukrainian

uk-UA

Ukrainian - Ukraine

ur

Urdu

ur-PK

Urdu - Pakistan

uz

Uzbek

uz-UZ-Cyrl

Uzbek (Cyrillic) - Uzbekistan

uz-UZ-Latn

Uzbek (Latin) - Uzbekistan

vi

Vietnamese

vi-VN

Vietnamese - Vietnam

1 comment: