예제 #1
0
        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));
        }
예제 #2
0
        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);
        }
예제 #3
0
 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.");
 }