/// <summary>
        /// Matches a source string to a target variant according to the current culture and the specified rule.
        /// </summary>
        /// <param name="source">The source string.</param>
        /// <param name="target">The target string.</param>
        /// <param name="rule">The rule which defines how to perform the match.</param>
        /// <returns>The variant of <paramref name="source"/> which is the best match for <paramref name="target"/> according to the specified rule.</returns>
        public static String MatchVariant(LocalizedString source, LocalizedStringVariant target, String rule)
        {
            Contract.Require(target, nameof(target));
            Contract.RequireNotEmpty(rule, nameof(rule));

            return(MatchVariantInternal(CurrentCulture, CurrentLanguage, source, target, rule));
        }
        /// <summary>
        /// Matches a source string to a target variant according to the specified culture and rule.
        /// </summary>
        /// <param name="culture">The culture for which to perform the match.</param>
        /// <param name="source">The source string.</param>
        /// <param name="target">The target string.</param>
        /// <param name="rule">The rule which defines how to perform the match.</param>
        /// <returns>The variant of <paramref name="source"/> which is the best match for <paramref name="target"/> according to the specified rule.</returns>
        public static String MatchVariant(String culture, LocalizedString source, LocalizedStringVariant target, String rule)
        {
            Contract.RequireNotEmpty(culture, nameof(culture));
            Contract.Require(target, nameof(target));
            Contract.RequireNotEmpty(rule, nameof(rule));

            return(MatchVariantInternal(culture, null, source, target, rule));
        }
        /// <summary>
        /// Matches a source string to a target variant according to the specified culture and rule.
        /// </summary>
        private static String MatchVariantInternal(String culture, String language, LocalizedString source, LocalizedStringVariant target, StringSegment rule)
        {
            if (registeredMatchEvaluatorByCulture.TryGetValue(culture, out var registry))
            {
                foreach (var kvp in registry)
                {
                    if (rule.Equals(kvp.Key))
                    {
                        return((kvp.Value == null) ? null : kvp.Value(source, target));
                    }
                }
            }

            if (language != null)
            {
                if (registeredMatchEvaluatorsByLanguage.TryGetValue(language, out registry))
                {
                    foreach (var kvp in registry)
                    {
                        if (rule.Equals(kvp.Key))
                        {
                            return((kvp.Value == null) ? null : kvp.Value(source, target));
                        }
                    }
                }
            }

            return(null);
        }
        /// <summary>
        /// Matches a source string to a target variant according to the specified culture and rule.
        /// </summary>
        private static String MatchVariantInternal(String culture, String language, LocalizedString source, LocalizedStringVariant target, String rule)
        {
            if (registeredMatchEvaluatorByCulture.TryGetValue(culture, out var registry))
            {
                if (registry.TryGetValue(rule, out var evaluator))
                {
                    return(evaluator(source, target));
                }
            }

            if (language != null)
            {
                if (registeredMatchEvaluatorsByLanguage.TryGetValue(language, out registry))
                {
                    if (registry.TryGetValue(rule, out var evaluator))
                    {
                        return(evaluator(source, target));
                    }
                }
            }

            return(null);
        }
 /// <summary>
 /// Matches a source string to a target variant according to the specified culture and rule.
 /// </summary>
 /// <param name="culture">The culture for which to perform the match.</param>
 /// <param name="source">The source string.</param>
 /// <param name="target">The target string.</param>
 /// <param name="rule">The rule which defines how to perform the match.</param>
 /// <returns>The variant of <paramref name="source"/> which is the best match for <paramref name="target"/> according to the specified rule.</returns>
 public static String MatchVariant(String culture, LocalizedString source, LocalizedStringVariant target, StringSegment rule)
 {
     return(MatchVariantInternal(culture, null, source, target, rule));
 }
Example #6
0
 /// <summary>
 /// Adds an argument to the string formatter.
 /// </summary>
 /// <param name="value">The value to add as an argument.</param>
 public void AddArgument(LocalizedStringVariant value)
 {
     arguments.Add(new StringFormatterArgument(value));
 }