/// <summary> /// Converts the specified value object to a <see cref='System.Globalization.CultureInfo'/> /// object. /// </summary> public override object?ConvertFrom(ITypeDescriptorContext?context, CultureInfo?culture, object value) { // Only when GetCultureName returns culture.Name, we use CultureInfoMapper // (Since CultureInfoMapper will transfer Culture.DisplayName to Culture.Name). // Otherwise, we just keep the value unchanged. if (value is string text) { if (GetCultureName(CultureInfo.InvariantCulture).Equals(string.Empty)) { text = CultureInfoMapper.GetCultureInfoName((string)value); } string defaultCultureString = DefaultCultureString; if (culture != null && culture.Equals(CultureInfo.InvariantCulture)) { defaultCultureString = DefaultInvariantCultureString; } // Look for the default culture info. CultureInfo?retVal = null; if (string.IsNullOrEmpty(text) || string.Equals(text, defaultCultureString, StringComparison.Ordinal)) { retVal = CultureInfo.InvariantCulture; } // Now look in our set of installed cultures. if (retVal == null) { foreach (CultureInfo info in GetStandardValues(context)) { if (info != null && string.Equals(GetCultureName(info), text, StringComparison.Ordinal)) { retVal = info; break; } } } // Now try to create a new culture info from this value. if (retVal == null) { try { retVal = new CultureInfo(text); } catch { } } // Finally, try to find a partial match. if (retVal == null) { foreach (CultureInfo info in _values !) { if (info != null && GetCultureName(info).StartsWith(text, StringComparison.CurrentCulture)) { retVal = info; break; } } } // No good. We can't support it. if (retVal == null) { throw new ArgumentException(SR.Format(SR.CultureInfoConverterInvalidCulture, (string)value), nameof(value)); } return(retVal); } return(base.ConvertFrom(context, culture, value)); }
/// <summary> /// <para> /// Converts the specified value object to a <see cref='System.Globalization.CultureInfo'/> /// object. /// </para> /// </summary> public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (value is string) { // Hack, Only when GetCultureName returns culture.Name, we use CultureInfoMapper // (Since CultureInfoMapper will transfer Culture.DisplayName to Culture.Name). // Otherwise, we just keep the value unchange. string text = (string)value; if (GetCultureName(CultureInfo.InvariantCulture).Equals("")) { text = CultureInfoMapper.GetCultureInfoName((string)value); } CultureInfo retVal = null; CultureInfo currentUICulture = CultureInfo.CurrentUICulture; if (culture != null && culture.Equals(CultureInfo.InvariantCulture)) { CultureInfo.CurrentUICulture = culture; } try { // Look for the default culture info. // if (text == null || text.Length == 0 || string.Compare(text, DefaultCultureString, StringComparison.Ordinal) == 0) { retVal = CultureInfo.InvariantCulture; } // Now look in our set of installed cultures. // if (retVal == null) { ICollection values = GetStandardValues(context); IEnumerator e = values.GetEnumerator(); while (e.MoveNext()) { CultureInfo info = (CultureInfo)e.Current; if (info != null && string.Compare(GetCultureName(info), text, StringComparison.Ordinal) == 0) { retVal = info; break; } } } // Now try to create a new culture info from this value // if (retVal == null) { try { retVal = new CultureInfo(text); } catch { } } // Finally, try to find a partial match // if (retVal == null) { text = text.ToLower(CultureInfo.CurrentCulture); IEnumerator e = _values.GetEnumerator(); while (e.MoveNext()) { CultureInfo info = (CultureInfo)e.Current; if (info != null && GetCultureName(info).ToLower(CultureInfo.CurrentCulture).StartsWith(text)) { retVal = info; break; } } } } finally { CultureInfo.CurrentUICulture = culture; } // No good. We can't support it. // if (retVal == null) { throw new ArgumentException(SR.Format(SR.CultureInfoConverterInvalidCulture, (string)value)); } return(retVal); } return(base.ConvertFrom(context, culture, value)); }
public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value) { if (!(value is string)) { return(base.ConvertFrom(context, culture, value)); } string strA = (string)value; if (this.GetCultureName(CultureInfo.InvariantCulture).Equals("")) { strA = CultureInfoMapper.GetCultureInfoName((string)value); } CultureInfo invariantCulture = null; CultureInfo currentUICulture = Thread.CurrentThread.CurrentUICulture; if ((culture != null) && culture.Equals(CultureInfo.InvariantCulture)) { Thread.CurrentThread.CurrentUICulture = culture; } try { if (((strA == null) || (strA.Length == 0)) || (string.Compare(strA, this.DefaultCultureString, StringComparison.Ordinal) == 0)) { invariantCulture = CultureInfo.InvariantCulture; } if (invariantCulture == null) { IEnumerator enumerator = ((IEnumerable)this.GetStandardValues(context)).GetEnumerator(); while (enumerator.MoveNext()) { CultureInfo current = (CultureInfo)enumerator.Current; if ((current != null) && (string.Compare(this.GetCultureName(current), strA, StringComparison.Ordinal) == 0)) { invariantCulture = current; break; } } } if (invariantCulture == null) { try { invariantCulture = new CultureInfo(strA); } catch { } } if (invariantCulture == null) { strA = strA.ToLower(CultureInfo.CurrentCulture); IEnumerator enumerator2 = this.values.GetEnumerator(); while (enumerator2.MoveNext()) { CultureInfo info4 = (CultureInfo)enumerator2.Current; if ((info4 != null) && this.GetCultureName(info4).ToLower(CultureInfo.CurrentCulture).StartsWith(strA)) { invariantCulture = info4; goto Label_0138; } } } } finally { Thread.CurrentThread.CurrentUICulture = currentUICulture; } Label_0138: if (invariantCulture == null) { throw new ArgumentException(SR.GetString("CultureInfoConverterInvalidCulture", new object[] { (string)value })); } return(invariantCulture); }