Example #1
0
        private static PluralRuleSet[] GetPluralRuleSets(bool ordinals = false)
        {
            if (options != null && ((ordinals && !options.IncludeOrdinalRuleSets) ||
                                    (!ordinals && !options.IncludePluralRuleSets)))
            {
                return(null);
            }

            string filename    = ordinals ? "ordinals" : "plurals";
            string ruleSetType = ordinals ? "ordinal" : "plural";

            XDocument document = GetXmlDocument(String.Format(@"common\supplemental\{0}.xml", filename));

            IEnumerable <XElement> ldmlElements       = document.Elements("supplementalData");
            List <XElement>        pluralRuleSetDatas = (from item in ldmlElements.Elements("plurals")
                                                         .Elements("pluralRules")
                                                         select item).ToList();

            if (pluralRuleSetDatas != null && pluralRuleSetDatas.Count > 0)
            {
                List <PluralRuleSet> pluralRuleSets = new List <PluralRuleSet>();
                foreach (XElement data in pluralRuleSetDatas)
                {
                    string cultureNames = data.Attribute("locales").Value.ToString();
                    Progress(String.Format("Adding {0} rule set", ruleSetType), cultureNames);

                    PluralRuleSet pluralRuleSet = new PluralRuleSet();
                    pluralRuleSet.CultureNames = cultureNames.Split(' ');

                    List <XElement> pluralRuleDatas = (from item in data
                                                       .Elements("pluralRule")
                                                       select item).ToList();
                    if (pluralRuleDatas != null)
                    {
                        List <PluralRule> pluralRules = new List <PluralRule>();
                        foreach (XElement pluralRuleData in pluralRuleDatas)
                        {
                            PluralRule pluralRule = new PluralRule();
                            pluralRule.Id   = GetPluralRuleCount(pluralRuleData.Attribute("count").Value.ToString());
                            pluralRule.Rule = pluralRuleData.Value;
                            pluralRules.Add(pluralRule);
                        }

                        pluralRuleSet.PluralRules = pluralRules.ToArray();
                    }

                    pluralRuleSets.Add(pluralRuleSet);
                    Progress(String.Format("Added {0} rule set", ruleSetType), cultureNames, ProgressEventType.Added, pluralRuleSet);
                }

                return(pluralRuleSets.ToArray());
            }

            return(null);
        }
        /// <summary>
        /// GetPluralRules gets the PluralRules that match the language of a culture from an array of sets of PluralRules
        /// </summary>
        /// <param name="pluralRuleSets">An array of sets of PluralRules</param>
        /// <param name="cultureName">The culture name to get the PluralRules for</param>
        /// <returns>An array of PluralRules that match the language of a culture from an array of sets of PluralRules</returns>
        private static PluralRule[] GetPluralRules(PluralRuleSet[] pluralRuleSets, string cultureName)
        {
            string language = GetLanguage(cultureName);
            foreach (PluralRuleSet pluralRuleSet in pluralRuleSets)
            {
                if (pluralRuleSet.CultureNames.Contains(language))
                {
                    return pluralRuleSet.PluralRules;
                }
            }

            return null;
        }