/// <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)); }
/// <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)); }