Example #1
0
 public CultureDisplayNames GetCultureDisplayNames(UCultureInfo uCulture, DisplayContextOptions options)
 {
     return(cache.GetOrCreate(new Tuple <UCultureInfo, DisplayContextOptions>(uCulture, options), (key) =>
     {
         return new DataTableCultureDisplayNames(key.Item1, key.Item2);
     }));
 }
Example #2
0
            internal LastResortCultureDisplayNames(UCultureInfo culture, DisplayContextOptions options)
#pragma warning disable 612, 618
                : base()
#pragma warning restore 612, 618
            {
                this.culture = culture;
                this.options = options;
            }
Example #3
0
        /// <summary>
        /// Returns an instance of <see cref="CultureDisplayNames"/> that
        /// returns names formatted for the provided <paramref name="locale"/>,
        /// using the provided <see cref="DisplayContextOptions"/> settings.
        /// </summary>
        /// <param name="locale">The display locale.</param>
        /// <param name="options">One or more context settings (e.g. for dialect handling, capitalization, etc.)</param>
        /// <returns>A <see cref="CultureDisplayNames"/> instance.</returns>
        /// <draft>ICU 60</draft>
        public static CultureDisplayNames GetInstance(UCultureInfo locale, DisplayContextOptions options)
        {
            CultureDisplayNames result = null;
            var culture = locale; //.ToUCultureInfo();

            options = options.Freeze();
            if (cultureDisplayNamesFactory != null)
            {
                result = cultureDisplayNamesFactory.GetCultureDisplayNames(culture, options);
            }
            if (result == null)
            {
                result = new LastResortCultureDisplayNames(culture, options);
            }
            return(result);
        }
Example #4
0
 /// <summary>
 /// Returns an instance of <see cref="CultureDisplayNames"/> that
 /// returns names formatted for the provided <paramref name="locale"/>,
 /// using the provided <see cref="DisplayContextOptions"/> settings.
 /// </summary>
 /// <param name="locale">The display locale.</param>
 /// <param name="options">One or more context settings (e.g. for dialect handling, capitalization, etc.)</param>
 /// <returns>A <see cref="CultureDisplayNames"/> instance.</returns>
 /// <draft>ICU 60</draft>
 public static CultureDisplayNames GetInstance(CultureInfo locale, DisplayContextOptions options)
 {
     return(GetInstance(locale.ToUCultureInfo(), options));
 }
Example #5
0
        public DataTableCultureDisplayNames(UCultureInfo culture, DisplayContextOptions options)
#pragma warning disable 612, 618
            : base()
#pragma warning restore 612, 618
        {
            this.displayContextOptions = options.Freeze();
            this.langData   = languageDataTableProvider.GetDataTable(culture, options.SubstituteHandling == SubstituteHandling.NoSubstitute);
            this.regionData = regionDataTableProvider.GetDataTable(culture, options.SubstituteHandling == SubstituteHandling.NoSubstitute);
            this.locale     = langData.CultureInfo != null && langData.CultureInfo.Equals(CultureInfo.InvariantCulture)
                ? regionData.CultureInfo.ToUCultureInfo()
                : langData.CultureInfo.ToUCultureInfo();

            // Note, by going through DataTable, this uses table lookup rather than straight lookup.
            // That should get us the same data, I think.  This way we don't have to explicitly
            // load the bundle again.  Using direct lookup didn't seem to make an appreciable
            // difference in performance.
            string sep = langData.Get("localeDisplayPattern", "separator");

            if (sep == null || "separator".Equals(sep))
            {
                sep = "{0}, {1}";
            }
            StringBuilder sb = new StringBuilder();

            this.separatorFormat = SimpleFormatterImpl.CompileToStringMinMaxArguments(sep, sb, 2, 2);

            string pattern = langData.Get("localeDisplayPattern", "pattern");

            if (pattern == null || "pattern".Equals(pattern))
            {
                pattern = "{0} ({1})";
            }
            this.format = SimpleFormatterImpl.CompileToStringMinMaxArguments(pattern, sb, 2, 2);
            if (pattern.Contains("("))
            {
                formatOpenParen         = '(';
                formatCloseParen        = ')';
                formatReplaceOpenParen  = '[';
                formatReplaceCloseParen = ']';
            }
            else
            {
                formatOpenParen         = '(';
                formatCloseParen        = ')';
                formatReplaceOpenParen  = '[';
                formatReplaceCloseParen = ']';
            }

            string keyTypePattern = langData.Get("localeDisplayPattern", "keyTypePattern");

            if (keyTypePattern == null || "keyTypePattern".Equals(keyTypePattern))
            {
                keyTypePattern = "{0}={1}";
            }
            this.keyTypeFormat = SimpleFormatterImpl.CompileToStringMinMaxArguments(
                keyTypePattern, sb, 2, 2);

            // Get values from the contextTransforms data if we need them
            // Also check whether we will need a break iterator (depends on the data)
            bool needBrkIter = false;

            if (options.Capitalization == Capitalization.UIListOrMenu ||
                options.Capitalization == Capitalization.Standalone)
            {
                capitalizationUsage = new bool[Enum.GetValues(typeof(CapitalizationContextUsage)).Length]; // initialized to all false
                ICUResourceBundle         rb   = (ICUResourceBundle)UResourceBundle.GetBundleInstance(ICUData.IcuBaseName, locale);
                CapitalizationContextSink sink = new CapitalizationContextSink(this);
                try
                {
                    rb.GetAllItemsWithFallback("contextTransforms", sink);
                }
                catch (MissingManifestResourceException)
                {
                    // Silently ignore.  Not every locale has contextTransforms.
                }
                needBrkIter = sink.hasCapitalizationUsage;
            }
            // Get a sentence break iterator if we will need it
            if (needBrkIter || options.Capitalization == Capitalization.BeginningOfSentence)
            {
                capitalizationBrkIter = BreakIterator.GetSentenceInstance(locale);
            }

            this.currencyDisplayInfo = CurrencyData.Provider.GetInstance(locale, false);
        }