Exemplo n.º 1
0
        private static void GenericDelegateInvoke()
        {
            FormulaDelegate <int>    intAddition    = AddInt;
            FormulaDelegate <double> doubleAddition = AddDouble;

            Console.WriteLine("Invoking intAddition(2,3)");
            Console.WriteLine($"Result = {intAddition(2, 3)}");

            Console.WriteLine("Invoking doubleAddition(2.2, 3.5)");
            Console.WriteLine($"Result = {doubleAddition(2.2, 3.5)}");
        }
Exemplo n.º 2
0
        /// <summary>
        /// Get plural form index for given locale by given number.
        /// </summary>
        /// <remarks>
        ///	Default furmulas created using information from http://cldr.unicode.org/
        /// </remarks>
        /// <param name="cultureInfo"></param>
        /// <param name="number"></param>
        /// <returns></returns>
        public int GetPluralFormIndex(CultureInfo cultureInfo, long number)
        {
            Trace.WriteLine(
                String.Format("Getting plural index for locale \"{0}\" and number \"{1}\".", cultureInfo.Name, number),
                "Lib.Gettext");

            if (_CustomFormulas.ContainsKey(cultureInfo.LCID))
            {
                FormulaDelegate formula = _CustomFormulas[cultureInfo.LCID];
                if (formula != null)
                {
                    Trace.WriteLine(String.Format("Using custom plural formula for locale \"{0}\".", cultureInfo.Name),
                                    "Lib.Gettext");
                    return(formula.Invoke(number));
                }
            }

            string langCode = cultureInfo.TwoLetterISOLanguageName;

            Trace.WriteLine(
                String.Format("Using built-in plural formula with langcode \"{0}\" for locale \"{1}\".", langCode,
                              cultureInfo.Name), "Lib.Gettext");


            switch (langCode)
            {
            case "az":
            case "bm":
            case "bo":
            case "dz":
            case "fa":
            case "id":
            case "ig":
            case "ii":
            case "hu":
            case "ja":
            case "jv":
            case "ka":
            case "kde":
            case "kea":
            case "km":
            case "kn":
            case "ko":
            case "lo":
            case "ms":
            case "my":
            case "sah":
            case "ses":
            case "sg":
            case "th":
            case "to":
            case "tr":
            case "vi":
            case "wo":
            case "yo":
            case "zh":
                return(0);

            case "ar":
                return((number == 0)
                               ? 0
                               : ((number == 1)
                                      ? 1
                                      : ((number == 2)
                                             ? 2
                                             : (((number >= 3) && (number <= 10))
                                                    ? 3
                                                    : (((number >= 11) && (number <= 99)) ? 4 : 5)))));

            case "asa":
            case "af":
            case "bem":
            case "bez":
            case "bg":
            case "bn":
            case "brx":
            case "ca":
            case "cgg":
            case "chr":
            case "da":
            case "de":
            case "dv":
            case "ee":
            case "el":
            case "en":
            case "eo":
            case "es":
            case "et":
            case "eu":
            case "fi":
            case "fo":
            case "fur":
            case "fy":
            case "gl":
            case "gsw":
            case "gu":
            case "ha":
            case "haw":
            case "he":
            case "is":
            case "it":
            case "jmc":
            case "kaj":
            case "kcg":
            case "kk":
            case "kl":
            case "ksb":
            case "ku":
            case "lb":
            case "lg":
            case "mas":
            case "ml":
            case "mn":
            case "mr":
            case "nah":
            case "nb":
            case "nd":
            case "ne":
            case "nl":
            case "nn":
            case "no":
            case "nr":
            case "ny":
            case "nyn":
            case "om":
            case "or":
            case "pa":
            case "pap":
            case "ps":
            case "pt":
            case "rof":
            case "rm":
            case "rwk":
            case "saq":
            case "seh":
            case "sn":
            case "so":
            case "sq":
            case "ss":
            case "ssy":
            case "st":
            case "sv":
            case "sw":
            case "syr":
            case "ta":
            case "te":
            case "teo":
            case "tig":
            case "tk":
            case "tn":
            case "ts":
            case "ur":
            case "wae":
            case "ve":
            case "vun":
            case "xh":
            case "xog":
            case "zu":
                return((number == 1) ? 0 : 1);

            case "ak":
            case "am":
            case "bh":
            case "fil":
            case "ff":
            case "fr":
            case "guw":
            case "hi":
            case "kab":
            case "ln":
            case "mg":
            case "nso":
            case "ti":
            case "wa":
                return(((number == 0) || (number == 1)) ? 0 : 1);

            case "lv":
                return((number == 0) ? 0 : (((number % 10 == 1) && (number % 100 != 11)) ? 1 : 2));

            case "iu":
            case "kw":
            case "naq":
            case "se":
            case "sma":
            case "smi":
            case "smj":
            case "smn":
            case "sms":
                return((number == 1) ? 0 : ((number == 2) ? 1 : 2));

            case "ga":
                return((number == 1)
                               ? 0
                               : ((number == 2)
                                      ? 1
                                      : (((number >= 3) && (number <= 6)) ? 2 : ((number >= 7 && number <= 10) ? 3 : 4))));

            case "ro":
            case "mo":
                return((number == 1) ? 0 : (((number == 0) || ((number % 100 > 0) && (number % 100 < 20))) ? 1 : 2));

            case "lt":
                return(((number % 10 == 1) && (number % 100 != 11))
                               ? 0
                               : (((number % 10 >= 2) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2));

            case "be":
            case "bs":
            case "hr":
            case "ru":
            case "sh":
            case "sr":
            case "uk":
                return(((number % 10 == 1) && (number % 100 != 11))
                               ? 0
                               : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 10) || (number % 100 >= 20)))
                                      ? 1
                                      : 2));

            case "cs":
            case "sk":
                return((number == 1) ? 0 : (((number >= 2) && (number <= 4)) ? 1 : 2));

            case "pl":
                return((number == 1)
                               ? 0
                               : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 12) || (number % 100 > 14)))
                                      ? 1
                                      : 2));

            case "sl":
                return((number % 100 == 1)
                               ? 0
                               : ((number % 100 == 2) ? 1 : (((number % 100 == 3) || (number % 100 == 4)) ? 2 : 3)));

            case "mt":
                return((number == 1)
                               ? 0
                               : (((number == 0) || ((number % 100 > 1) && (number % 100 < 11)))
                                      ? 1
                                      : (((number % 100 > 10) && (number % 100 < 20)) ? 2 : 3)));

            case "mk":
                return(((number % 10 == 1) && (number != 11)) ? 0 : 1);

            case "cy":
                return((number == 0)
                               ? 0
                               : ((number == 1)
                                      ? 1
                                      : ((number == 2) ? 2 : ((number == 3) ? 3 : ((number == 6) ? 4 : 5)))));

            case "lag":
            case "ksh":
                return((number == 0) ? 0 : ((number == 1) ? 1 : 2));

            case "shi":
                return(((number == 0) && (number == 1)) ? 0 : (((number >= 2) && (number <= 10)) ? 1 : 2));

            case "tzm":
                return(((number == 0) || (number == 1) || (((number >= 11) && (number <= 99)))) ? 0 : 1);

            case "gv":
                return(((number % 10 == 1) || (number % 10 == 2) || (number % 20 == 0)) ? 0 : 1);

            case "gd":
                return(((number == 1) || (number == 11))
                               ? 0
                               : (((number == 2) || (number == 12))
                                      ? 1
                                      : (((((number >= 3) && (number <= 10)) || ((number >= 13) && (number <= 19)))
                                              ? 2
                                              : 3))));

            default:
                return(0);
            }
        }
Exemplo n.º 3
0
 /// <summary>
 /// Set custom plural form formula function for given locale.
 /// </summary>
 /// <param name="cultureInfo">Locale</param>
 /// <param name="formula">Function that returns plural form index by given number.</param>
 public void SetCustomFormula(CultureInfo cultureInfo, FormulaDelegate formula)
 {
     _CustomFormulas.Add(cultureInfo.LCID, formula);
 }
Exemplo n.º 4
0
 /// <summary>
 /// Set custom plural form formula function for given locale.
 /// </summary>
 /// <param name="cultureInfo">Locale</param>
 /// <param name="formula">Function that returns plural form index by given number.</param>
 public void SetCustomFormula(CultureInfo cultureInfo, FormulaDelegate formula)
 {
     _CustomFormulas.Add(cultureInfo.LCID, formula);
 }
Exemplo n.º 5
0
 public Item(string name, string format, FormulaDelegate toBase, FormulaDelegate toUnit)
     : this(name, format, Parser.Number, x => toBase((double)x), x => toUnit((double)x))
 {
 }