// Constructors public CultureAndRegionInfoBuilder(string cultureName, CultureAndRegionModifiers flags) { }
/** * Method to create a new culture either by mixing or inheriting from the * InvariantCulture */ public void GetNewCultureInfo(NumberFormatInfo numberFormat, DateTimeFormatInfo dateFormat, string locale, string name) { try { CultureInfo ci = new CultureInfo(locale); RegionInfo ri; //In case the locale name is empty as is for Invariant culture if (locale.Length == 0) { ri = RegionInfo.CurrentRegion; } else { ri = new RegionInfo(locale); } // See if we're neutral CultureAndRegionModifiers mods = CultureAndRegionModifiers.None; if (name.IndexOf('-') < 0) { mods |= CultureAndRegionModifiers.Neutral; } // See if we already have one try { CultureInfo test = CultureInfo.GetCultureInfo(name); mods |= CultureAndRegionModifiers.Replacement; } catch (System.ArgumentException) { // name doesn't exist (yet) } //Use the builder to register the culture CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder( name, mods); cib.LoadDataFromCultureInfo(ci); cib.LoadDataFromRegionInfo(ri); cib.NumberFormat = numberFormat; cib.GregorianDateTimeFormat = dateFormat; cib.IetfLanguageTag = name; cib.Register(); //Add the new culture using the DisplayCulture Add(name); MessageBox.Show(Constants.SuccessMessage); } catch (System.IO.IOException) { //The .nlp file already exists MessageBox.Show(Constants.ErrorFileFound); } catch (System.ArgumentOutOfRangeException ex) { MessageBox.Show(ex.ToString()); } }
/// <summary> /// Creates a CultureAndRegionInfoBuilder object for the NCLDR culture /// </summary> /// <param name="cldrCultureName">The name of the CLDR culture from which to create the .NET culture</param> /// <param name="dotNetCultureName">The name of the .NET custom culture to create</param> /// <returns>A CultureAndRegionInfoBuilder object for the NCLDR culture</returns> public static CultureAndRegionInfoBuilder CreateNCldrCultureAndRegionInfoBuilder(string cldrCultureName, string dotNetCultureName) { Culture culture = Culture.GetCulture(cldrCultureName); CultureAndRegionModifiers cultureAndRegionModifiers = culture.IsNeutralCulture ? CultureAndRegionModifiers.Neutral : CultureAndRegionModifiers.None; CultureAndRegionInfoBuilder builder = new CultureAndRegionInfoBuilder(dotNetCultureName, cultureAndRegionModifiers); CultureInfo parentCultureInfo = GetParentCultureInfo(culture); builder.Parent = parentCultureInfo; if (string.IsNullOrEmpty(culture.EnglishName)) { builder.CultureEnglishName = culture.Identity.CultureName; } else { builder.CultureEnglishName = culture.EnglishName; } if (string.IsNullOrEmpty(culture.NativeName) && string.IsNullOrEmpty(culture.EnglishName)) { builder.CultureNativeName = culture.Identity.CultureName; } else if (string.IsNullOrEmpty(culture.NativeName)) { builder.CultureNativeName = culture.EnglishName; } else { builder.CultureNativeName = culture.NativeName; } builder.TwoLetterISOLanguageName = culture.Identity.Language.Id; // CLDR does not have data for ThreeLetterISOLanguageName but one must be assigned for the culture to be valid builder.ThreeLetterISOLanguageName = culture.Identity.Language.Id; // CLDR does not have data for ThreeLetterWindowsLanguageName but one must be assigned for the culture to be valid builder.ThreeLetterWindowsLanguageName = culture.Identity.Language.Id; // The CultureAndRegionInfoBuilder requires dummy values for these properties // even though there is no region or currency values builder.RegionEnglishName = "xxx"; builder.RegionNativeName = "xxx"; builder.ThreeLetterISORegionName = "xxx"; builder.ThreeLetterWindowsRegionName = "xxx"; builder.TwoLetterISORegionName = "xx"; builder.ISOCurrencySymbol = "xx"; builder.CurrencyEnglishName = "xxx"; builder.CurrencyNativeName = "xxx"; if (culture.Identity.Region != null) { Region region = culture.Identity.Region; builder.RegionEnglishName = region.EnglishName; string regionNativeName = region.DisplayName(culture.Identity.Language.Id); if (string.IsNullOrEmpty(regionNativeName)) { builder.RegionNativeName = region.EnglishName; } else { builder.RegionNativeName = regionNativeName; } RegionCode regionCode = RegionExtensions.GetRegionCode(region.Id); if (regionCode != null && regionCode.Alpha3 != null) { builder.ThreeLetterISORegionName = regionCode.Alpha3; } else { builder.ThreeLetterISORegionName = region.Id; } // CLDR does not have data for ThreeLetterWindowsRegionName but one must be assigned for the culture to be valid builder.ThreeLetterWindowsRegionName = region.Id; builder.TwoLetterISORegionName = region.Id; builder.IsMetric = RegionExtensions.GetMeasurementSystem(region.Id).IsMetric; } else { builder.IsMetric = RegionExtensions.GetMeasurementSystem(NCldr.RegionIdForTheWorld).IsMetric; } // CLDR does not have data for KeyboardLayoutId or GeoId builder.IetfLanguageTag = cldrCultureName; builder.GregorianDateTimeFormat = CreateDateTimeFormatInfo(culture); builder.AvailableCalendars = GetAvailableCalendars(culture); builder.NumberFormat = CreateNumberFormatInfo(culture); if (culture.Numbers != null && culture.Numbers.CurrencyDisplayNameSets != null && culture.Numbers.CurrentCurrencyPeriod != null) { string currencyName = culture.Numbers.CurrentCurrencyPeriod.Id; if (!string.IsNullOrEmpty(currencyName)) { builder.ISOCurrencySymbol = currencyName; builder.CurrencyEnglishName = CultureExtensions.GetCurrencyDisplayName(currencyName, "en"); string currencyNativeName = CultureExtensions.GetCurrencyDisplayName(currencyName, culture.Identity.Language.Id); builder.CurrencyNativeName = currencyNativeName == null ? builder.CurrencyEnglishName : currencyNativeName; } } builder.TextInfo = parentCultureInfo.TextInfo; builder.CompareInfo = parentCultureInfo.CompareInfo; return(builder); }
/** * Method to create a new culture instance by inheriting from * a culture */ public void NewCultureInstance(string locale, string name) { try { CultureInfo ci = new CultureInfo(locale); RegionInfo ri; //In case the locale name is empty as is for Invariant culture if (locale.Length == 0) { ri = RegionInfo.CurrentRegion; } else { ri = new RegionInfo(locale); } //Split the name to language and region string[] lang = ci.Name.Split(Constants.CharHyphen); // See if we're neutral CultureAndRegionModifiers mods = CultureAndRegionModifiers.None; if (name.IndexOf('-') < 0) { mods |= CultureAndRegionModifiers.Neutral; } // See if we already have one try { CultureInfo test = CultureInfo.GetCultureInfo(name); mods |= CultureAndRegionModifiers.Replacement; } catch (System.ArgumentException) { // name doesn't exist (yet) } //Use the builder to register the culture CultureAndRegionInfoBuilder cib = new CultureAndRegionInfoBuilder( name, mods); cib.LoadDataFromCultureInfo(ci); if ((mods & CultureAndRegionModifiers.Neutral) == 0) { cib.LoadDataFromRegionInfo(ri); } cib.IetfLanguageTag = name; cib.Register(); //Add the new culture using the DisplayCulture Add(name); MessageBox.Show(Constants.SuccessMessage); } catch (System.ArgumentOutOfRangeException ex) { MessageBox.Show(ex.ToString()); } catch (System.InvalidOperationException) { MessageBox.Show("That culture already exists. Please add a NEW instance of a culture"); } catch (System.ArgumentException) { MessageBox.Show("That culture already exists. Please add a NEW instance of a culture"); } }
// Constructors public CultureAndRegionInfoBuilder(string cultureName, CultureAndRegionModifiers flags) {}