Description
The System.Globalization.CultureInfo class holds culture-specific information, such as the associated language, sublanguage, country/region, calendar, and cultural conventions. This class also provides access to culture-specific instances of System.Globalization.DateTimeFormatInfo, System.Globalization.NumberFormatInfo, System.Globalization.CompareInfo, and System.Globalization.TextInfo. These objects contain the information required for culture-specific operations, such as casing, formatting dates and numbers, and comparing strings.
The System.String class indirectly uses this class to obtain information about the default culture.
The culture names follow the RFC 1766 standard in the format "<languagecode2>-<country/regioncode2>", where <languagecode2> is a lowercase two-letter code derived from ISO 639-1 and <country/regioncode2> is an uppercase two-letter code derived from ISO 3166. For example, U.S. English is "en-US". In cases where a two-letter language code is not available, the three-letter code derived from ISO 639-2 is used; for example, the three-letter code "div" is used for cultures that use the Dhivehi language. Some culture names have suffixes that specify the script; for example, "-Cyrl" specifies the Cyrillic script, "-Latn" specifies the Latin script.
The following predefined System.Globalization.CultureInfo names and identifiers are accepted and used by this class and other classes in the System.Globalization namespace.
Culture Name | Culture Identifier | Language-Country/Region |
|---|
"" (empty string) | 0x007F | invariant culture | af | 0x0036 | Afrikaans | af-ZA | 0x0436 | Afrikaans - South Africa | sq | 0x001C | Albanian | sq-AL | 0x041C | Albanian - Albania | ar | 0x0001 | Arabic | ar-DZ | 0x1401 | Arabic - Algeria | ar-BH | 0x3C01 | Arabic - Bahrain | ar-EG | 0x0C01 | Arabic - Egypt | ar-IQ | 0x0801 | Arabic - Iraq | ar-JO | 0x2C01 | Arabic - Jordan | ar-KW | 0x3401 | Arabic - Kuwait | ar-LB | 0x3001 | Arabic - Lebanon | ar-LY | 0x1001 | Arabic - Libya | ar-MA | 0x1801 | Arabic - Morocco | ar-OM | 0x2001 | Arabic - Oman | ar-QA | 0x4001 | Arabic - Qatar | ar-SA | 0x0401 | Arabic - Saudi Arabia | ar-SY | 0x2801 | Arabic - Syria | ar-TN | 0x1C01 | Arabic - Tunisia | ar-AE | 0x3801 | Arabic - United Arab Emirates | ar-YE | 0x2401 | Arabic - Yemen | hy | 0x002B | Armenian | hy-AM | 0x042B | Armenian - Armenia | az | 0x002C | Azeri | az-AZ-Cyrl | 0x082C | Azeri (Cyrillic) - Azerbaijan | az-AZ-Latn | 0x042C | Azeri (Latin) - Azerbaijan | eu | 0x002D | Basque | eu-ES | 0x042D | Basque - Basque | be | 0x0023 | Belarusian | be-BY | 0x0423 | Belarusian - Belarus | bg | 0x0002 | Bulgarian | bg-BG | 0x0402 | Bulgarian - Bulgaria | ca | 0x0003 | Catalan | ca-ES | 0x0403 | Catalan - Catalan | zh-HK | 0x0C04 | Chinese - Hong Kong SAR | zh-MO | 0x1404 | Chinese - Macau SAR | zh-CN | 0x0804 | Chinese - China | zh-CHS | 0x0004 | Chinese (Simplified) | zh-SG | 0x1004 | Chinese - Singapore | zh-TW | 0x0404 | Chinese - Taiwan | zh-CHT | 0x7C04 | Chinese (Traditional) | hr | 0x001A | Croatian | hr-HR | 0x041A | Croatian - Croatia | cs | 0x0005 | Czech | cs-CZ | 0x0405 | Czech - Czech Republic | da | 0x0006 | Danish | da-DK | 0x0406 | Danish - Denmark | div | 0x0065 | Dhivehi | div-MV | 0x0465 | Dhivehi - Maldives | nl | 0x0013 | Dutch | nl-BE | 0x0813 | Dutch - Belgium | nl-NL | 0x0413 | Dutch - The Netherlands | en | 0x0009 | English | en-AU | 0x0C09 | English - Australia | en-BZ | 0x2809 | English - Belize | en-CA | 0x1009 | English - Canada | en-CB | 0x2409 | English - Caribbean | en-IE | 0x1809 | English - Ireland | en-JM | 0x2009 | English - Jamaica | en-NZ | 0x1409 | English - New Zealand | en-PH | 0x3409 | English - Philippines | en-ZA | 0x1C09 | English - South Africa | en-TT | 0x2C09 | English - Trinidad and Tobago | en-GB | 0x0809 | English - United Kingdom | en-US | 0x0409 | English - United States | en-ZW | 0x3009 | English - Zimbabwe | et | 0x0025 | Estonian | et-EE | 0x0425 | Estonian - Estonia | fo | 0x0038 | Faroese | fo-FO | 0x0438 | Faroese - Faroe Islands | fa | 0x0029 | Farsi | fa-IR | 0x0429 | Farsi - Iran | fi | 0x000B | Finnish | fi-FI | 0x040B | Finnish - Finland | fr | 0x000C | French | fr-BE | 0x080C | French - Belgium | fr-CA | 0x0C0C | French - Canada | fr-FR | 0x040C | French - France | fr-LU | 0x140C | French - Luxembourg | fr-MC | 0x180C | French - Monaco | fr-CH | 0x100C | French - Switzerland | gl | 0x0056 | Galician | gl-ES | 0x0456 | Galician - Galician | ka | 0x0037 | Georgian | ka-GE | 0x0437 | Georgian - Georgia | de | 0x0007 | German | de-AT | 0x0C07 | German - Austria | de-DE | 0x0407 | German - Germany | de-LI | 0x1407 | German - Liechtenstein | de-LU | 0x1007 | German - Luxembourg | de-CH | 0x0807 | German - Switzerland | el | 0x0008 | Greek | el-GR | 0x0408 | Greek - Greece | gu | 0x0047 | Gujarati | gu-IN | 0x0447 | Gujarati - India | he | 0x000D | Hebrew | he-IL | 0x040D | Hebrew - Israel | hi | 0x0039 | Hindi | hi-IN | 0x0439 | Hindi - India | hu | 0x000E | Hungarian | hu-HU | 0x040E | Hungarian - Hungary | is | 0x000F | Icelandic | is-IS | 0x040F | Icelandic - Iceland | id | 0x0021 | Indonesian | id-ID | 0x0421 | Indonesian - Indonesia | it | 0x0010 | Italian | it-IT | 0x0410 | Italian - Italy | it-CH | 0x0810 | Italian - Switzerland | ja | 0x0011 | Japanese | ja-JP | 0x0411 | Japanese - Japan | kn | 0x004B | Kannada | kn-IN | 0x044B | Kannada - India | kk | 0x003F | Kazakh | kk-KZ | 0x043F | Kazakh - Kazakhstan | kok | 0x0057 | Konkani | kok-IN | 0x0457 | Konkani - India | ko | 0x0012 | Korean | ko-KR | 0x0412 | Korean - Korea | ky | 0x0040 | Kyrgyz | ky-KZ | 0x0440 | Kyrgyz - Kazakhstan | lv | 0x0026 | Latvian | lv-LV | 0x0426 | Latvian - Latvia | lt | 0x0027 | Lithuanian | lt-LT | 0x0427 | Lithuanian - Lithuania | mk | 0x002F | Macedonian | mk-MK | 0x042F | Macedonian - FYROM | ms | 0x003E | Malay | ms-BN | 0x083E | Malay - Brunei | ms-MY | 0x043E | Malay - Malaysia | mr | 0x004E | Marathi | mr-IN | 0x044E | Marathi - India | mn | 0x0050 | Mongolian | mn-MN | 0x0450 | Mongolian - Mongolia | no | 0x0014 | Norwegian | nb-NO | 0x0414 | Norwegian (Bokmål) - Norway | nn-NO | 0x0814 | Norwegian (Nynorsk) - Norway | pl | 0x0015 | Polish | pl-PL | 0x0415 | Polish - Poland | pt | 0x0016 | Portuguese | pt-BR | 0x0416 | Portuguese - Brazil | pt-PT | 0x0816 | Portuguese - Portugal | pa | 0x0046 | Punjabi | pa-IN | 0x0446 | Punjabi - India | ro | 0x0018 | Romanian | ro-RO | 0x0418 | Romanian - Romania | ru | 0x0019 | Russian | ru-RU | 0x0419 | Russian - Russia | sa | 0x004F | Sanskrit | sa-IN | 0x044F | Sanskrit - India | sr-SP-Cyrl | 0x0C1A | Serbian (Cyrillic) - Serbia | sr-SP-Latn | 0x081A | Serbian (Latin) - Serbia | sk | 0x001B | Slovak | sk-SK | 0x041B | Slovak - Slovakia | sl | 0x0024 | Slovenian | sl-SI | 0x0424 | Slovenian - Slovenia | es | 0x000A | Spanish | es-AR | 0x2C0A | Spanish - Argentina | es-BO | 0x400A | Spanish - Bolivia | es-CL | 0x340A | Spanish - Chile | es-CO | 0x240A | Spanish - Colombia | es-CR | 0x140A | Spanish - Costa Rica | es-DO | 0x1C0A | Spanish - Dominican Republic | es-EC | 0x300A | Spanish - Ecuador | es-SV | 0x440A | Spanish - El Salvador | es-GT | 0x100A | Spanish - Guatemala | es-HN | 0x480A | Spanish - Honduras | es-MX | 0x080A | Spanish - Mexico | es-NI | 0x4C0A | Spanish - Nicaragua | es-PA | 0x180A | Spanish - Panama | es-PY | 0x3C0A | Spanish - Paraguay | es-PE | 0x280A | Spanish - Peru | es-PR | 0x500A | Spanish - Puerto Rico | es-ES | 0x0C0A | Spanish - Spain | es-UY | 0x380A | Spanish - Uruguay | es-VE | 0x200A | Spanish - Venezuela | sw | 0x0041 | Swahili | sw-KE | 0x0441 | Swahili - Kenya | sv | 0x001D | Swedish | sv-FI | 0x081D | Swedish - Finland | sv-SE | 0x041D | Swedish - Sweden | syr | 0x005A | Syriac | syr-SY | 0x045A | Syriac - Syria | ta | 0x0049 | Tamil | ta-IN | 0x0449 | Tamil - India | tt | 0x0044 | Tatar | tt-RU | 0x0444 | Tatar - Russia | te | 0x004A | Telugu | te-IN | 0x044A | Telugu - India | th | 0x001E | Thai | th-TH | 0x041E | Thai - Thailand | tr | 0x001F | Turkish | tr-TR | 0x041F | Turkish - Turkey | uk | 0x0022 | Ukrainian | uk-UA | 0x0422 | Ukrainian - Ukraine | ur | 0x0020 | Urdu | ur-PK | 0x0420 | Urdu - Pakistan | uz | 0x0043 | Uzbek | uz-UZ-Cyrl | 0x0843 | Uzbek (Cyrillic) - Uzbekistan | uz-UZ-Latn | 0x0443 | Uzbek (Latin) - Uzbekistan | vi | 0x002A | Vietnamese | vi-VN | 0x042A | Vietnamese - Vietnam |
The culture identifier "0x0c0a" for "Spanish - Spain" uses the default international sort order; the culture identifier "0x040A", which is also for "Spanish - Spain", uses the traditional sort order. If the System.Globalization.CultureInfo is constructed using the "es-ES" culture name, the new System.Globalization.CultureInfo uses the default international sort order. To construct a System.Globalization.CultureInfo that uses the traditional sort order, use the culture identifier "0x040A" with the constructor.
The cultures are generally grouped into three sets: the invariant culture, the neutral cultures, and the specific cultures.
The invariant culture is culture-insensitive. You can specify the invariant culture by name using an empty string ("") or by its culture identifier 0x007F.System.Globalization.CultureInfo.InvariantCulture retrieves an instance of the invariant culture. It is associated with the English language but not with any country/region. It can be used in almost any method in the Globalization namespace that requires a culture. If a security decision depends on a string comparison or a case-change operation, use the System.Globalization.CultureInfo.InvariantCulture to ensure that the behavior will be consistent regardless of the culture settings of the system. However, the invariant culture must be used only by processes that require culture-independent results, such as system services; otherwise, it produces results that might be linguistically incorrect or culturally inappropriate.
A neutral culture is a culture that is associated with a language but not with a country/region. A specific culture is a culture that is associated with a language and a country/region. For example, "fr" is a neutral culture and "fr-FR" is a specific culture. Note that "zh-CHS" (Simplified Chinese) and "zh-CHT" (Traditional Chinese) are neutral cultures.
The cultures have a hierarchy, such that the parent of a specific culture is a neutral culture and the parent of a neutral culture is the System.Globalization.CultureInfo.InvariantCulture. The System.Globalization.CultureInfo.Parent property returns the neutral culture associated with a specific culture.
If the resources for the specific culture are not available in the system, the resources for the neutral culture are used; if the resources for the neutral culture are not available, the resources embedded in the main assembly are used.
The list of cultures in the Windows API is slightly different from the list of cultures in the .NET Framework. For example, the neutral culture zh-CHT "Chinese (Traditional)" with culture identifier 0x7C04 is not available in the Windows API. If interoperability with Windows is required (for example, through the p/invoke mechanism), use a specific culture that is defined in the .NET Framework. This will ensure consistency with the equivalent Windows locale, which is identified with the same System.Globalization.CultureInfo.LCID.
A System.Globalization.DateTimeFormatInfo or a System.Globalization.NumberFormatInfo can be created only for the invariant culture or for specific cultures, not for neutral cultures.
The user might choose to override some of the values associated with the current culture of Windows through Regional and Language Options (or Regional Options or Regional Settings) in Control Panel. For example, the user might choose to display the date in a different format or to use a currency other than the default for the culture.
If System.Globalization.CultureInfo.UseUserOverride is TRue and the specified culture matches the current culture of Windows, the System.Globalization.CultureInfo uses those overrides, including user settings for the properties of the System.Globalization.DateTimeFormatInfo instance returned by the System.Globalization.CultureInfo.DateTimeFormat property, the properties of the System.Globalization.NumberFormatInfo instance returned by the System.Globalization.CultureInfo.NumberFormat property, and the properties of the System.Globalization.CompareInfo instance returned by the System.Globalization.CultureInfo.CompareInfo property. If the user settings are incompatible with the culture associated with the System.Globalization.CultureInfo (for example, if the selected calendar is not one of the System.Globalization.CultureInfo.OptionalCalendars), the results of the methods and the values of the properties are undefined.
For cultures that use the euro, the .NET Framework and Windows XP set the default currency as euro; however, older versions of Windows do not. Therefore, if the user of an older version of Windows has not changed the currency setting through Regional Options or Regional Settings in Control Panel, the currency might be incorrect. To use the .NET Framework default setting for the currency, use a System.Globalization.CultureInfo constructor overload that accepts a useUserOverride parameter and set it to false.
This class implements the System.ICloneable interface to enable duplication of System.Globalization.CultureInfo objects. It also implements System.IFormatProvider to supply formatting information to applications.
Example
using System;
using System.Globalization;
/// <summary>
/// Sample demonstrating the use of the CultureInfo class.
/// Use this class to retrieve information about a specific culture, such as
/// date/time formats and number formats.
/// </summary>
internal class CultureInfoSample
{
private static void Main()
{
Console.WriteLine("Summary for the current thread culture:");
WriteCultureInfoSummary(CultureInfo.CurrentCulture);
Console.WriteLine("Summary for the current thread UI culture:");
WriteCultureInfoSummary(CultureInfo.CurrentUICulture);
Console.WriteLine("Summary for the operating system UI culture:");
WriteCultureInfoSummary(CultureInfo.InstalledUICulture);
Console.WriteLine();
Console.WriteLine();
Console.WriteLine("Press Enter to continue");
Console.ReadLine();
}
// Writes a summary of the specified CultureInfo to the console.
private static void WriteCultureInfoSummary(CultureInfo info)
{
Console.WriteLine(
" Culture name: {0} ({1})",
info.DisplayName, info.Name);
WriteDateTimeFormatInfoSummary(info.DateTimeFormat);
WriteNumberFormatInfoSummary(info.NumberFormat);
Console.WriteLine();
}
// Writes a summary of the specified DateTimeFormatInfo to the console.
private static void WriteDateTimeFormatInfoSummary(DateTimeFormatInfo info)
{
Console.WriteLine(
" Long date/time pattern: {0} {1}",
info.LongDatePattern, info.LongTimePattern);
Console.WriteLine(
" Short date/time pattern: {0} {1}",
info.ShortDatePattern, info.ShortTimePattern);
Console.WriteLine(
" AM/PM designators: {0}/{1}",
info.AMDesignator, info.PMDesignator);
}
// Writes a summary of the specified NumberFormatInfo to the console.
private static void WriteNumberFormatInfoSummary(NumberFormatInfo info)
{
Console.WriteLine(
" Currency symbol: {0}", info.CurrencySymbol);
Console.WriteLine(
" Percent symbol: {0}", info.PercentSymbol);
Console.WriteLine(
" Negative sign: {0}", info.NegativeSign);
Console.WriteLine(
" Positive sign: {0}", info.PositiveSign);
Console.WriteLine(
" Decimal separator: {0}", info.NumberDecimalSeparator);
Console.WriteLine(
" Thousands separator: {0}", info.NumberGroupSeparator);
}
}
The output is
Summary for the current thread culture:
Culture name: English (United States) (en-US)
Long date/time pattern: dddd, MMMM dd, yyyy h:mm:ss tt
Short date/time pattern: M/d/yyyy h:mm tt
AM/PM designators: AM/PM
Currency symbol: $
Percent symbol: %
Negative sign: -
Positive sign: +
Decimal separator: .
Thousands separator: ,
Summary for the current thread UI culture:
Culture name: English (United States) (en-US)
Long date/time pattern: dddd, MMMM dd, yyyy h:mm:ss tt
Short date/time pattern: M/d/yyyy h:mm tt
AM/PM designators: AM/PM
Currency symbol: $
Percent symbol: %
Negative sign: -
Positive sign: +
Decimal separator: .
Thousands separator: ,
Summary for the operating system UI culture:
Culture name: English (United States) (en-US)
Long date/time pattern: dddd, MMMM dd, yyyy h:mm:ss tt
Short date/time pattern: M/d/yyyy h:mm tt
AM/PM designators: AM/PM
Currency symbol: $
Percent symbol: %
Negative sign: -
Positive sign: +
Decimal separator: .
Thousands separator: ,
Press Enter to continue
|