protected override void InitInternal(ICollection <string> locales, PluralRulesOptions options) { LocaleMatcher matcher = options.LocaleMatcher; this.Type = options.Type; this.Digits = options.Digits; this.Locale = ResolveLocale(locales, matcher); this.resolver = CldrPluralRules.Resolve(this.Type, this.Locale); this.PluralCategories = resolver.PluralCategories; }
protected NumberFormatDigitOptions GetNumberFormatDigitOptions(int minFractionDigits, int maxFractionDigits, NumberNotation notation) { NumberFormatDigitOptions info = new NumberFormatDigitOptions(); info.MinimumIntegerDigits = GetOption(PropertyKey.MinimumIntegerDigits, 1, 21, 1); if (readOnly) { EcmaValue mnsd = options[PropertyKey.MinimumSignificantDigits]; EcmaValue mxsd = options[PropertyKey.MaximumSignificantDigits]; EcmaValue mnfd = options[PropertyKey.MinimumFractionDigits]; EcmaValue mxfd = options[PropertyKey.MaximumFractionDigits]; if (mnsd != default || mxsd != default) { info.MinimumSignificantDigits = ParseNumberOption(PropertyKey.MinimumSignificantDigits, mnsd, 1, 21, 1); info.MaximumSignificantDigits = ParseNumberOption(PropertyKey.MaximumSignificantDigits, mxsd, info.MinimumSignificantDigits, 21, 21); info.UseSignificantDigits = true; info.RoundingType = RoundingType.SignificantDigits; } else { info.RoundingType = notation == NumberNotation.Compact ? RoundingType.CompactRounding : RoundingType.FractionDigits; info.MinimumFractionDigits = ParseNumberOption(PropertyKey.MinimumFractionDigits, mnfd, 0, 20, minFractionDigits); info.MaximumFractionDigits = ParseNumberOption(PropertyKey.MaximumFractionDigits, mxfd, info.MinimumFractionDigits, 20, Math.Max(info.MinimumFractionDigits, maxFractionDigits)); } } else { object mnsd, mxsd, mnfd, mxfd; parsedOptions.TryGetValue(PropertyKey.MinimumSignificantDigits, out mnsd); parsedOptions.TryGetValue(PropertyKey.MaximumSignificantDigits, out mxsd); parsedOptions.TryGetValue(PropertyKey.MinimumFractionDigits, out mnfd); parsedOptions.TryGetValue(PropertyKey.MaximumFractionDigits, out mxfd); if (mnsd != null || mxsd != null) { info.MinimumSignificantDigits = ParseNumberOption(PropertyKey.MinimumSignificantDigits, new EcmaValue(mnsd), 1, 21, 1); info.MaximumSignificantDigits = ParseNumberOption(PropertyKey.MaximumSignificantDigits, new EcmaValue(mxsd), info.MinimumSignificantDigits, 21, 21); info.UseSignificantDigits = true; } else { info.RoundingType = notation == NumberNotation.Compact ? RoundingType.CompactRounding : RoundingType.FractionDigits; info.MinimumFractionDigits = ParseNumberOption(PropertyKey.MinimumFractionDigits, new EcmaValue(mnfd), 0, 20, minFractionDigits); info.MaximumFractionDigits = ParseNumberOption(PropertyKey.MaximumFractionDigits, new EcmaValue(mxfd), info.MinimumFractionDigits, 20, Math.Max(info.MinimumFractionDigits, maxFractionDigits)); } } return(info); }