diff options
Diffstat (limited to 'src/mscorlib/corefx/System/Globalization/CultureData.cs')
-rw-r--r-- | src/mscorlib/corefx/System/Globalization/CultureData.cs | 392 |
1 files changed, 344 insertions, 48 deletions
diff --git a/src/mscorlib/corefx/System/Globalization/CultureData.cs b/src/mscorlib/corefx/System/Globalization/CultureData.cs index eb71318fdb..c15a77cf45 100644 --- a/src/mscorlib/corefx/System/Globalization/CultureData.cs +++ b/src/mscorlib/corefx/System/Globalization/CultureData.cs @@ -2,25 +2,23 @@ // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. -using System; -using System.Collections; using System.Collections.Generic; +using System.Diagnostics; using System.Text; using System.Threading; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Diagnostics.Contracts; namespace System.Globalization { #if INSIDE_CLR using StringStringDictionary = Dictionary<string, string>; - using StringCultureDataDictionary = Dictionary<String, CultureData>; + using StringCultureDataDictionary = Dictionary<string, CultureData>; + using LcidToCultureNameDictionary = Dictionary<int, string>; using Lock = Object; #else using StringStringDictionary = LowLevelDictionary<string, string>; using StringCultureDataDictionary = LowLevelDictionary<string, CultureData>; + using LcidToCultureNameDictionary = LowLevelDictionary<int, string>; #endif // @@ -57,8 +55,6 @@ namespace System.Globalization internal partial class CultureData { private const int undef = -1; - private const int LOCALE_CUSTOM_UNSPECIFIED = 0x1000; - private const int LOCALE_CUSTOM_DEFAULT = 0x0c00; // Override flag private String _sRealName; // Name you passed in (ie: en-US, en, or de-DE_phoneb) @@ -74,9 +70,13 @@ namespace System.Globalization // Language private String _sISO639Language; // ISO 639 Language Name + private String _sISO639Language2; // ISO 639 Language Name private String _sLocalizedLanguage; // Localized name for this language private String _sEnglishLanguage; // English name for this language private String _sNativeLanguage; // Native name of this language + private String _sAbbrevLang; // abbreviated language name (Windows Language Name) ex: ENU + private string _sConsoleFallbackName; // The culture name for the console fallback UI culture + private int _iInputLanguageHandle=undef;// input language handle // Region private String _sRegionName; // (RegionInfo) @@ -84,11 +84,12 @@ namespace System.Globalization private String _sEnglishCountry; // english country name (RegionInfo) private String _sNativeCountry; // native country name private String _sISO3166CountryName; // ISO 3166 (RegionInfo), ie: US + private String _sISO3166CountryName2; // 3 char ISO 3166 country name 2 2(RegionInfo) ex: USA (ISO) + private int _iGeoId = undef; // GeoId // Numbers private String _sPositiveSign; // (user can override) positive sign private String _sNegativeSign; // (user can override) negative sign - private String[] _saNativeDigits; // (user can override) native characters for digits 0-9 // (nfi populates these 5, don't have to be = undef) private int _iDigits; // (user can override) number of fractional digits private int _iNegativeNumber; // (user can override) negative number format @@ -108,6 +109,8 @@ namespace System.Globalization // Currency private String _sCurrency; // (user can override) local monetary symbol private String _sIntlMonetarySymbol; // international monetary symbol (RegionInfo) + private String _sEnglishCurrency; // English name for this currency + private String _sNativeCurrency; // Native name for this currency // (nfi populates these 4, don't have to be = undef) private int _iCurrencyDigits; // (user can override) # local monetary fractional digits private int _iCurrency; // (user can override) positive currency format @@ -145,6 +148,11 @@ namespace System.Globalization // CoreCLR depends on this even though its not exposed publicly. + private int _iDefaultAnsiCodePage = undef; // default ansi code page ID (ACP) + private int _iDefaultOemCodePage = undef; // default oem code page ID (OCP or OEM) + private int _iDefaultMacCodePage = undef; // default macintosh code page + private int _iDefaultEbcdicCodePage = undef; // default EBCDIC code page + private int _iLanguage; // locale ID (0409) - NO sort information private bool _bUseOverrides; // use user overrides? private bool _bNeutral; // Flags for the culture (ie: neutral or not right now) @@ -391,6 +399,42 @@ namespace System.Globalization return retVal; } + // Clear our internal caches + internal static void ClearCachedData() + { + s_cachedCultures = null; + s_cachedRegions = null; + } + + internal static CultureInfo[] GetCultures(CultureTypes types) + { + // Disable warning 618: System.Globalization.CultureTypes.FrameworkCultures' is obsolete +#pragma warning disable 618 + // Validate flags + if ((int)types <= 0 || ((int)types & (int)~(CultureTypes.NeutralCultures | CultureTypes.SpecificCultures | + CultureTypes.InstalledWin32Cultures | CultureTypes.UserCustomCulture | + CultureTypes.ReplacementCultures | CultureTypes.WindowsOnlyCultures | + CultureTypes.FrameworkCultures)) != 0) + { + throw new ArgumentOutOfRangeException(nameof(types), + SR.Format(SR.ArgumentOutOfRange_Range, CultureTypes.NeutralCultures, CultureTypes.FrameworkCultures)); + } + + // We have deprecated CultureTypes.FrameworkCultures. + // When this enum is used, we will enumerate Whidbey framework cultures (for compatibility). + // + + // We have deprecated CultureTypes.WindowsOnlyCultures. + // When this enum is used, we will return an empty array for this enum. + if ((types & CultureTypes.WindowsOnlyCultures) != 0) + { + // Remove the enum as it is an no-op. + types &= (~CultureTypes.WindowsOnlyCultures); + } + +#pragma warning restore 618 + return EnumCultures(types); + } ///////////////////////////////////////////////////////////////////////// // Build our invariant information @@ -422,20 +466,25 @@ namespace System.Globalization // Language invariant._sISO639Language = "iv"; // ISO 639 Language Name + invariant._sISO639Language2 = "ivl"; // 3 char ISO 639 lang name 2 invariant._sLocalizedLanguage = "Invariant Language"; // Display name for this Language invariant._sEnglishLanguage = "Invariant Language"; // English name for this language invariant._sNativeLanguage = "Invariant Language"; // Native name of this language + invariant._sAbbrevLang = "IVL"; // abbreviated language name (Windows Language Name) + invariant._sConsoleFallbackName = ""; // The culture name for the console fallback UI culture + invariant._iInputLanguageHandle = 0x07F; // input language handle // Region - invariant._sRegionName = "IV"; // (RegionInfo) - invariant._sEnglishCountry = "Invariant Country"; // english country name (RegionInfo) - invariant._sNativeCountry = "Invariant Country"; // native country name (Windows Only) - invariant._sISO3166CountryName = "IV"; // (RegionInfo), ie: US + invariant._sRegionName = "IV"; // (RegionInfo) + invariant._sEnglishCountry = "Invariant Country"; // english country name (RegionInfo) + invariant._sNativeCountry = "Invariant Country"; // native country name (Windows Only) + invariant._sISO3166CountryName = "IV"; // (RegionInfo), ie: US + invariant._sISO3166CountryName2 = "ivc"; // 3 char ISO 3166 country name 2 2(RegionInfo) + invariant._iGeoId = 244; // GeoId (Windows Only) // Numbers invariant._sPositiveSign = "+"; // positive sign invariant._sNegativeSign = "-"; // negative sign - invariant._saNativeDigits = new String[] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" }; // native characters for digits 0-9 invariant._iDigits = 2; // number of fractional digits invariant._iNegativeNumber = 1; // negative number format invariant._waGrouping = new int[] { 3 }; // grouping of digits @@ -454,6 +503,8 @@ namespace System.Globalization // Currency invariant._sCurrency = "\x00a4"; // local monetary symbol: for international monetary symbol invariant._sIntlMonetarySymbol = "XDR"; // international monetary symbol (RegionInfo) + invariant._sEnglishCurrency = "International Monetary Fund"; // English name for this currency (Windows Only) + invariant._sNativeCurrency = "International Monetary Fund"; // Native name for this currency (Windows Only) invariant._iCurrencyDigits = 2; // # local monetary fractional digits invariant._iCurrency = 0; // positive currency format invariant._iNegativeCurrency = 0; // negative currency format @@ -487,7 +538,11 @@ namespace System.Globalization // These are desktop only, not coreclr - invariant._iLanguage = 0x007f; // locale ID (0409) - NO sort information + invariant._iLanguage = CultureInfo.LOCALE_INVARIANT; // locale ID (0409) - NO sort information + invariant._iDefaultAnsiCodePage = 1252; // default ansi code page ID (ACP) + invariant._iDefaultOemCodePage = 437; // default oem code page ID (OCP or OEM) + invariant._iDefaultMacCodePage = 10000; // default macintosh code page + invariant._iDefaultEbcdicCodePage = 037; // default EBCDIC code page // Remember it s_Invariant = invariant; } @@ -605,6 +660,33 @@ namespace System.Globalization return true; } + // We'd rather people use the named version since this doesn't allow custom locales + internal static CultureData GetCultureData(int culture, bool bUseUserOverride) + { + string localeName = null; + CultureData retVal = null; + + if (culture == CultureInfo.LOCALE_INVARIANT) + return Invariant; + + // Convert the lcid to a name, then use that + // Note that this'll return neutral names (unlike Vista native API) + localeName = LCIDToLocaleName(culture); + + if (!String.IsNullOrEmpty(localeName)) + { + // Valid name, use it + retVal = GetCultureData(localeName, bUseUserOverride); + } + + // If not successful, throw + if (retVal == null) + throw new CultureNotFoundException(nameof(culture), culture, SR.Argument_CultureNotSupported); + + // Return the one we found + return retVal; + } + //////////////////////////////////////////////////////////////////////// // // All the accessors @@ -622,7 +704,7 @@ namespace System.Globalization { get { - Contract.Assert(_sRealName != null, "[CultureData.CultureName] Expected _sRealName to be populated by already"); + Debug.Assert(_sRealName != null, "[CultureData.CultureName] Expected _sRealName to be populated by already"); // since windows doesn't know about zh-CHS and zh-CHT, // we leave sRealName == zh-Hanx but we still need to // pretend that it was zh-CHX. @@ -834,6 +916,17 @@ namespace System.Globalization } } + // The culture name to be used in CultureInfo.CreateSpecificCulture() + internal string SSPECIFICCULTURE + { + get + { + // This got populated during the culture initialization + Debug.Assert(_sSpecificCulture != null, "[CultureData.SSPECIFICCULTURE] Expected this.sSpecificCulture to be populated by culture data initialization already"); + return _sSpecificCulture; + } + } + ///////////// // Language // ///////////// @@ -845,12 +938,38 @@ namespace System.Globalization { if (_sISO639Language == null) { - _sISO639Language = GetLocaleInfo(LocaleStringData.Iso639LanguageName); + _sISO639Language = GetLocaleInfo(LocaleStringData.Iso639LanguageTwoLetterName); } return _sISO639Language; } } + // iso 639 language name, ie: eng + internal string SISO639LANGNAME2 + { + get + { + if (_sISO639Language2 == null) + { + _sISO639Language2 = GetLocaleInfo(LocaleStringData.Iso639LanguageThreeLetterName); + } + return _sISO639Language2; + } + } + + // abbreviated windows language name (ie: enu) (non-standard, avoid this) + internal string SABBREVLANGNAME + { + get + { + if (_sAbbrevLang == null) + { + _sAbbrevLang = GetThreeLetterWindowsLanguageName(_sRealName); + } + return _sAbbrevLang; + } + } + // Localized name for this language (Windows Only) ie: Inglis // This is only valid for Windows 8 and higher neutrals: internal String SLOCALIZEDLANGUAGE @@ -922,6 +1041,17 @@ namespace System.Globalization } } + internal int IGEOID + { + get + { + if (_iGeoId == undef) + { + _iGeoId = GetGeoId(_sRealName); + } + return _iGeoId; + } + } // localized name for the country internal string SLOCALIZEDCOUNTRY @@ -987,17 +1117,51 @@ namespace System.Globalization } } - ///////////// - // Numbers // - //////////// - - // internal String sPositiveSign ; // (user can override) positive sign - // internal String sNegativeSign ; // (user can override) negative sign - // internal String[] saNativeDigits ; // (user can override) native characters for digits 0-9 - // internal int iDigits ; // (user can override) number of fractional digits - // internal int iNegativeNumber ; // (user can override) negative number format + // 3 letter ISO 3166 country code + internal String SISO3166CTRYNAME2 + { + get + { + if (_sISO3166CountryName2 == null) + { + _sISO3166CountryName2 = GetLocaleInfo(LocaleStringData.Iso3166CountryName2); + } + return _sISO3166CountryName2; + } + } + internal int IINPUTLANGUAGEHANDLE + { + get + { + if (_iInputLanguageHandle == undef) + { + if (IsSupplementalCustomCulture) + { + _iInputLanguageHandle = 0x0409; + } + else + { + // Input Language is same as LCID for built-in cultures + _iInputLanguageHandle = this.ILANGUAGE; + } + } + return _iInputLanguageHandle; + } + } + // Console fallback name (ie: locale to use for console apps for unicode-only locales) + internal string SCONSOLEFALLBACKNAME + { + get + { + if (_sConsoleFallbackName == null) + { + _sConsoleFallbackName = GetConsoleFallbackName(_sRealName); + } + return _sConsoleFallbackName; + } + } // (user can override) grouping of digits internal int[] WAGROUPING @@ -1144,6 +1308,32 @@ namespace System.Globalization } } + // English name for this currency (RegionInfo), eg: US Dollar + internal String SENGLISHCURRENCY + { + get + { + if (_sEnglishCurrency == null) + { + _sEnglishCurrency = GetLocaleInfo(LocaleStringData.CurrencyEnglishName); + } + return _sEnglishCurrency; + } + } + + // Native name for this currency (RegionInfo), eg: Schweiz Frank + internal String SNATIVECURRENCY + { + get + { + if (_sNativeCurrency == null) + { + _sNativeCurrency = GetLocaleInfo(LocaleStringData.CurrencyNativeName); + } + return _sNativeCurrency; + } + } + // internal int iCurrencyDigits ; // (user can override) # local monetary fractional digits // internal int iCurrency ; // (user can override) positive currency format // internal int iNegativeCurrency ; // (user can override) negative currency format @@ -1522,7 +1712,7 @@ namespace System.Globalization // We then have to copy that list to a new array of the right size. // Default calendar should be first CalendarId[] calendars = new CalendarId[23]; - Contract.Assert(_sWindowsName != null, "[CultureData.CalendarIds] Expected _sWindowsName to be populated by already"); + Debug.Assert(_sWindowsName != null, "[CultureData.CalendarIds] Expected _sWindowsName to be populated by already"); int count = CalendarData.GetCalendars(_sWindowsName, _bUseOverrides, calendars); // See if we had a calendar to add. @@ -1585,9 +1775,16 @@ namespace System.Globalization } } + // Native calendar names. index of optional calendar - 1, empty if no optional calendar at that number + internal string CalendarName(CalendarId calendarId) + { + // Get the calendar + return GetCalendar(calendarId).sNativeName; + } + internal CalendarData GetCalendar(CalendarId calendarId) { - Contract.Assert(calendarId > 0 && calendarId <= CalendarId.LAST_CALENDAR, + Debug.Assert(calendarId > 0 && calendarId <= CalendarId.LAST_CALENDAR, "[CultureData.GetCalendar] Expect calendarId to be in a valid range"); // arrays are 0 based, calendarIds are 1 based @@ -1606,7 +1803,7 @@ namespace System.Globalization // Make sure that calendar has data if (calendarData == null) { - Contract.Assert(_sWindowsName != null, "[CultureData.GetCalendar] Expected _sWindowsName to be populated by already"); + Debug.Assert(_sWindowsName != null, "[CultureData.GetCalendar] Expected _sWindowsName to be populated by already"); calendarData = new CalendarData(_sWindowsName, calendarId, this.UseUserOverride); _calendars[calendarIndex] = calendarData; } @@ -1646,7 +1843,7 @@ namespace System.Globalization { if (_iReadingLayout == undef) { - Contract.Assert(_sRealName != null, "[CultureData.IsRightToLeft] Expected _sRealName to be populated by already"); + Debug.Assert(_sRealName != null, "[CultureData.IsRightToLeft] Expected _sRealName to be populated by already"); _iReadingLayout = GetLocaleInfo(LocaleNumberData.ReadingLayout); } @@ -1667,8 +1864,8 @@ namespace System.Globalization { // Note: Custom cultures might point at another culture's textinfo, however windows knows how // to redirect it to the desired textinfo culture, so this is OK. - Contract.Assert(_sWindowsName != null, "[CultureData.STEXTINFO] Expected _sWindowsName to be populated by already"); - return (_sWindowsName); + Debug.Assert(_sRealName != null, "[CultureData.STEXTINFO] Expected _sRealName to be populated by already"); + return (_sRealName); } } @@ -1677,8 +1874,8 @@ namespace System.Globalization { get { - Contract.Assert(_sWindowsName != null, "[CultureData.SCOMPAREINFO] Expected _sWindowsName to be populated by already"); - return (_sWindowsName); + Debug.Assert(_sRealName != null, "[CultureData.SCOMPAREINFO] Expected _sRealName to be populated by already"); + return (_sRealName); } } @@ -1690,10 +1887,63 @@ namespace System.Globalization } } + internal int IDEFAULTANSICODEPAGE // default ansi code page ID (ACP) + { + get + { + if (_iDefaultAnsiCodePage == undef) + { + _iDefaultAnsiCodePage = GetAnsiCodePage(_sRealName); + } + return _iDefaultAnsiCodePage; + } + } + + internal int IDEFAULTOEMCODEPAGE // default oem code page ID (OCP or OEM) + { + get + { + if (_iDefaultOemCodePage == undef) + { + _iDefaultOemCodePage = GetOemCodePage(_sRealName); + } + return _iDefaultOemCodePage; + } + } + + internal int IDEFAULTMACCODEPAGE // default macintosh code page + { + get + { + if (_iDefaultMacCodePage == undef) + { + _iDefaultMacCodePage = GetMacCodePage(_sRealName); + } + return _iDefaultMacCodePage; + } + } + + internal int IDEFAULTEBCDICCODEPAGE // default EBCDIC code page + { + get + { + if (_iDefaultEbcdicCodePage == undef) + { + _iDefaultEbcdicCodePage = GetEbcdicCodePage(_sRealName); + } + return _iDefaultEbcdicCodePage; + } + } + internal int ILANGUAGE { get { + if (_iLanguage == 0) + { + Debug.Assert(_sRealName != null, "[CultureData.ILANGUAGE] Expected this.sRealName to be populated by COMNlsInfo::nativeInitCultureData already"); + _iLanguage = LocaleNameToLCID(_sRealName); + } return _iLanguage; } } @@ -1734,21 +1984,21 @@ namespace System.Globalization // All of our era names internal String[] EraNames(CalendarId calendarId) { - Contract.Assert(calendarId > 0, "[CultureData.saEraNames] Expected Calendar.ID > 0"); + Debug.Assert(calendarId > 0, "[CultureData.saEraNames] Expected Calendar.ID > 0"); return this.GetCalendar(calendarId).saEraNames; } internal String[] AbbrevEraNames(CalendarId calendarId) { - Contract.Assert(calendarId > 0, "[CultureData.saAbbrevEraNames] Expected Calendar.ID > 0"); + Debug.Assert(calendarId > 0, "[CultureData.saAbbrevEraNames] Expected Calendar.ID > 0"); return this.GetCalendar(calendarId).saAbbrevEraNames; } internal String[] AbbreviatedEnglishEraNames(CalendarId calendarId) { - Contract.Assert(calendarId > 0, "[CultureData.saAbbrevEraNames] Expected Calendar.ID > 0"); + Debug.Assert(calendarId > 0, "[CultureData.saAbbrevEraNames] Expected Calendar.ID > 0"); return this.GetCalendar(calendarId).saAbbrevEnglishEraNames; } @@ -1808,9 +2058,9 @@ namespace System.Globalization //////////////////////////////////////////////////////////////////////////// private static String UnescapeNlsString(String str, int start, int end) { - Contract.Requires(str != null); - Contract.Requires(start >= 0); - Contract.Requires(end >= 0); + Debug.Assert(str != null); + Debug.Assert(start >= 0); + Debug.Assert(end >= 0); StringBuilder result = null; for (int i = start; i < str.Length && i <= end; i++) @@ -1908,8 +2158,8 @@ namespace System.Globalization private static int IndexOfTimePart(string format, int startIndex, string timeParts) { - Contract.Assert(startIndex >= 0, "startIndex cannot be negative"); - Contract.Assert(timeParts.IndexOfAny(new char[] { '\'', '\\' }) == -1, "timeParts cannot include quote characters"); + Debug.Assert(startIndex >= 0, "startIndex cannot be negative"); + Debug.Assert(timeParts.IndexOfAny(new char[] { '\'', '\\' }) == -1, "timeParts cannot include quote characters"); bool inQuote = false; for (int i = startIndex; i < format.Length; ++i) { @@ -1944,9 +2194,9 @@ namespace System.Globalization return -1; } - private static bool IsCustomCultureId(int cultureId) + internal static bool IsCustomCultureId(int cultureId) { - return (cultureId == LOCALE_CUSTOM_DEFAULT || cultureId == LOCALE_CUSTOM_UNSPECIFIED); + return (cultureId == CultureInfo.LOCALE_CUSTOM_DEFAULT || cultureId == CultureInfo.LOCALE_CUSTOM_UNSPECIFIED); } internal void GetNFIValues(NumberFormatInfo nfi) @@ -1954,7 +2204,6 @@ namespace System.Globalization if (this.IsInvariantCulture) { // FUTURE: NumberFormatInfo already has default values for many of these fields. Can we not do this? - // if we do need to do this, then why don't we set nfi.nativeDigits in this case? nfi.positiveSign = _sPositiveSign; nfi.negativeSign = _sNegativeSign; @@ -1972,7 +2221,7 @@ namespace System.Globalization } else { - Contract.Assert(_sWindowsName != null, "[CultureData.GetNFIValues] Expected _sWindowsName to be populated by already"); + Debug.Assert(_sWindowsName != null, "[CultureData.GetNFIValues] Expected _sWindowsName to be populated by already"); // String values nfi.positiveSign = GetLocaleInfo(LocaleStringData.PositiveSign); nfi.negativeSign = GetLocaleInfo(LocaleStringData.NegativeSign); @@ -1997,6 +2246,8 @@ namespace System.Globalization { nfi.nativeDigits[i] = new string(digits[i], 1); } + + nfi.digitSubstitution = GetDigitSubstitution(_sRealName); } // @@ -2043,9 +2294,26 @@ namespace System.Globalization // This is ONLY used for caching names and shouldn't be used for anything else internal static string AnsiToLower(string testString) { + int index = 0; + + while (index<testString.Length && (testString[index]<'A' || testString[index]>'Z' )) + { + index++; + } + if (index >= testString.Length) + { + return testString; // we didn't really change the string + } + StringBuilder sb = new StringBuilder(testString.Length); + for (int i=0; i<index; i++) + { + sb.Append(testString[i]); + } - for (int ich = 0; ich < testString.Length; ich++) + sb.Append((char) (testString[index] -'A' + 'a')); + + for (int ich = index+1; ich < testString.Length; ich++) { char ch = testString[ich]; sb.Append(ch <= 'Z' && ch >= 'A' ? (char)(ch - 'A' + 'a') : ch); @@ -2072,10 +2340,14 @@ namespace System.Globalization EnglishLanguageName = 0x00001001, /// <summary>native name of language, eg "Deutsch" (coresponds to LOCALE_SNATIVELANGUAGENAME)</summary> NativeLanguageName = 0x00000004, + /// <summary>localized name of country, eg "Germany" in UI language (coresponds to LOCALE_SLOCALIZEDCOUNTRYNAME)</summary> + LocalizedCountryName = 0x00000006, /// <summary>English name of country, eg "Germany" (coresponds to LOCALE_SENGLISHCOUNTRYNAME)</summary> EnglishCountryName = 0x00001002, /// <summary>native name of country, eg "Deutschland" (coresponds to LOCALE_SNATIVECOUNTRYNAME)</summary> NativeCountryName = 0x00000008, + /// <summary>abbreviated language name (coresponds to LOCALE_SABBREVLANGNAME)</summary> + AbbreviatedWindowsLanguageName = 0x00000003, /// <summary>list item separator (coresponds to LOCALE_SLIST)</summary> ListSeparator = 0x0000000C, /// <summary>decimal separator (coresponds to LOCALE_SDECIMAL)</summary> @@ -2086,6 +2358,10 @@ namespace System.Globalization Digits = 0x00000013, /// <summary>local monetary symbol (coresponds to LOCALE_SCURRENCY)</summary> MonetarySymbol = 0x00000014, + /// <summary>English currency name (coresponds to LOCALE_SENGCURRNAME)</summary> + CurrencyEnglishName = 0x00001007, + /// <summary>Native currency name (coresponds to LOCALE_SNATIVECURRNAME)</summary> + CurrencyNativeName = 0x00001008, /// <summary>uintl monetary symbol (coresponds to LOCALE_SINTLSYMBOL)</summary> Iso4217MonetarySymbol = 0x00000015, /// <summary>monetary decimal separator (coresponds to LOCALE_SMONDECIMALSEP)</summary> @@ -2101,9 +2377,15 @@ namespace System.Globalization /// <summary>negative sign (coresponds to LOCALE_SNEGATIVESIGN)</summary> NegativeSign = 0x00000051, /// <summary>ISO abbreviated language name (coresponds to LOCALE_SISO639LANGNAME)</summary> + Iso639LanguageTwoLetterName = 0x00000059, + /// <summary>ISO abbreviated country name (coresponds to LOCALE_SISO639LANGNAME2)</summary> + Iso639LanguageThreeLetterName = 0x00000067, + /// <summary>ISO abbreviated language name (coresponds to LOCALE_SISO639LANGNAME)</summary> Iso639LanguageName = 0x00000059, /// <summary>ISO abbreviated country name (coresponds to LOCALE_SISO3166CTRYNAME)</summary> Iso3166CountryName = 0x0000005A, + /// <summary>3 letter ISO country code (coresponds to LOCALE_SISO3166CTRYNAME2)</summary> + Iso3166CountryName2 = 0x00000068, // 3 character ISO country name /// <summary>Not a Number (coresponds to LOCALE_SNAN)</summary> NaNSymbol = 0x00000069, /// <summary>+ Infinity (coresponds to LOCALE_SPOSINFINITY)</summary> @@ -2112,6 +2394,8 @@ namespace System.Globalization NegativeInfinitySymbol = 0x0000006b, /// <summary>Fallback name for resources (coresponds to LOCALE_SPARENT)</summary> ParentName = 0x0000006d, + /// <summary>Fallback name for within the console (coresponds to LOCALE_SCONSOLEFALLBACKNAME)</summary> + ConsoleFallbackName = 0x0000006e, /// <summary>Returns the percent symbol (coresponds to LOCALE_SPERCENT)</summary> PercentSymbol = 0x00000076, /// <summary>Returns the permille (U+2030) symbol (coresponds to LOCALE_SPERMILLE)</summary> @@ -2138,6 +2422,10 @@ namespace System.Globalization { /// <summary>language id (coresponds to LOCALE_ILANGUAGE)</summary> LanguageId = 0x00000001, + /// <summary>geographical location id, (coresponds to LOCALE_IGEOID)</summary> + GeoId = 0x00000008, + /// <summary>0 = context, 1 = none, 2 = national (coresponds to LOCALE_IDIGITSUBSTITUTION)</summary> + DigitSubstitution = 0x00001014, /// <summary>0 = metric, 1 = US (coresponds to LOCALE_IMEASURE)</summary> MeasurementSystem = 0x0000000D, /// <summary>number of fractional digits (coresponds to LOCALE_IDIGITS)</summary> @@ -2168,7 +2456,15 @@ namespace System.Globalization /// <summary>Returns 0-11 for the negative percent format (coresponds to LOCALE_INEGATIVEPERCENT)</summary> NegativePercentFormat = 0x00000074, /// <summary>Returns 0-3 for the positive percent format (coresponds to LOCALE_IPOSITIVEPERCENT)</summary> - PositivePercentFormat = 0x00000075 + PositivePercentFormat = 0x00000075, + /// <summary>default ansi code page (coresponds to LOCALE_IDEFAULTCODEPAGE)</summary> + OemCodePage = 0x0000000B, + /// <summary>default ansi code page (coresponds to LOCALE_IDEFAULTANSICODEPAGE)</summary> + AnsiCodePage = 0x00001004, + /// <summary>default mac code page (coresponds to LOCALE_IDEFAULTMACCODEPAGE)</summary> + MacCodePage = 0x00001011, + /// <summary>default ebcdic code page (coresponds to LOCALE_IDEFAULTEBCDICCODEPAGE)</summary> + EbcdicCodePage = 0x00001012, } } } |