private PluralFormatInfo.PluralRuleDelegate GetPluralRule(IFormatProvider provider)
        {
            // Let's retirm the correct Plural Rule to use:
            PluralFormatInfo pluralFormatInfo = null;

            // See if a custom PluralFormatInfo is available from the FormatProvider:
            if (provider != null)
            {
                pluralFormatInfo = (PluralFormatInfo)provider.GetFormat(typeof(PluralFormatInfo));
            }

            // If no custom PluralFormatInfo, let's use our default:
            if (pluralFormatInfo == null)
            {
                pluralFormatInfo = defaultPluralFormatInfo;
            }

            // Only continue if we have a PluralFormatInfo:
            if (pluralFormatInfo == null)
            {
                return(null);
            }


            // Get the culture, only if it was provided:
            var cultureInfo = provider as CultureInfo;

            // Retrieve the plural rule from the PluralFormatInfo:
            return(pluralFormatInfo.GetPluralRule(cultureInfo));
        }
 private static string getValue(PluralFormatInfo.PluralRuleDelegate pluralRule, int value, string[] units)
 {
     // Get the plural index from the plural rule,
     // unless there's only 1 unit in the first place:
     var pluralIndex = (units.Length == 1) ? 0 : pluralRule(value, units.Length);
     return string.Format(units[pluralIndex], value);
 }
        public TimeTextInfo(PluralFormatInfo.PluralRuleDelegate pluralRule, string[] week, string[] day, string[] hour, string[] minute, string[] second, string[] millisecond, string[] w, string[] d, string[] h, string[] m, string[] s, string[] ms, string lessThan)
        {
            this.PluralRule = pluralRule;
            
            this.week = week;
            this.day = day;
            this.hour = hour;
            this.minute = minute;
            this.second = second;
            this.millisecond = millisecond;

            this.w = w;
            this.d = d;
            this.h = h;
            this.m = m;
            this.s = s;
            this.ms = ms;

            this.lessThan = lessThan;
        }
 /// <summary>
 /// Initializes the plugin with a custom default rule provider.
 /// </summary>
 /// <param name="defaultPluralFormatInfo"></param>
 public PluralLocalizationFormatter(PluralFormatInfo defaultPluralFormatInfo)
 {
     this.defaultPluralFormatInfo = defaultPluralFormatInfo;
 }
 /// <summary>
 /// Initializes the plugin with rules for many common languages.
 /// If no CultureInfo is supplied to the formatter, the
 /// default language rules will be used by default.
 /// </summary>
 public PluralLocalizationFormatter(string defaultTwoLetterISOLanguageName)
 {
     this.defaultPluralFormatInfo = new CommonLanguagesPluralFormatInfo(defaultTwoLetterISOLanguageName);
 }
 /// <summary>
 /// Initializes the plugin with a custom default rule provider.
 /// </summary>
 /// <param name="defaultPluralFormatInfo"></param>
 public PluralLocalizationFormatter(PluralFormatInfo defaultPluralFormatInfo)
 {
     this.defaultPluralFormatInfo = defaultPluralFormatInfo;
 }
 /// <summary>
 /// Initializes the plugin with rules for many common languages.
 /// If no CultureInfo is supplied to the formatter, the
 /// default language rules will be used by default.
 /// </summary>
 public PluralLocalizationFormatter(string defaultTwoLetterISOLanguageName)
 {
     this.defaultPluralFormatInfo = new CommonLanguagesPluralFormatInfo(defaultTwoLetterISOLanguageName);
 }