Exemple #1
0
        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;
        }
Exemple #2
0
        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);
        }