protected virtual async Task <string> HandleNestingRegexMatchAsync(string source, string language, IDictionary <string, object> args, TranslateAsyncDelegate translateAsync, Match match) { var expression = match.Groups[1]; string key; IDictionary <string, object> childArgs; if (expression.Value.IndexOf(FormatSeparator, StringComparison.Ordinal) < 0) { key = expression.Value; childArgs = args; } else { var keyParts = expression.Value.Split(FormatSeparator, 2); key = keyParts[0]; var childArgsString = keyParts[1].Trim(); childArgs = await ParseNestedArgsAsync(childArgsString, language, args); } var value = await translateAsync(language, key, childArgs); if (value == null) { return(source); } if (value.Contains(match.Value)) { return(source); } return(source.ReplaceFirst(match.Value, value)); }
public virtual async Task <string> NestAsync(string source, string language, IDictionary <string, object> args, TranslateAsyncDelegate translateAsync) { var matches = NestingRegex.Matches(source); var result = source; for (var i = 0; i < matches.Count; i++) { var match = matches[i]; result = await HandleNestingRegexMatchAsync(result, language, args, translateAsync, match); } return(result); }
public Task <string> NestAsync(string source, string language, IDictionary <string, object> args, TranslateAsyncDelegate translateAsync) { throw new NotSupportedException("Nesting is not supported by the Polyglot.js format interpolator."); }