Пример #1
0
 public static object Translate(string key,
                                [ExternalData] IMorestachioLocalizationService localizationService,
                                [ExternalData] ParserOptions parserOptions,
                                [RestParameter] params object[] arguments)
 {
     return(localizationService.GetTranslationOrNull(key, parserOptions.CultureInfo, arguments));
 }
        private async Task <object> GetTranslation(ContextObject context, ScopeData scopeData, IMorestachioLocalizationService service)
        {
            var valueContext = await MorestachioExpression.GetValue(context, scopeData);

            var culture = context.Options.CultureInfo;

            if (scopeData.CustomData.TryGetValue(MorestachioCustomCultureLocalizationDocumentItem.LocalizationCultureKey,
                                                 out var customCulture) && customCulture is CultureInfo culInfo)
            {
                culture = culInfo;
            }

            var args = Children
                       .OfType <MorestachioLocalizationParameterDocumentItem>()
                       .Cast <ExpressionDocumentItemBase>()
                       .Select(f =>
                               new Func <ObjectPromise>(async() =>
                                                        (await f.MorestachioExpression.GetValue(context, scopeData)).Value))
                       .Concat(Children
                               .OfType <MorestachioLocalizationDocumentItem>()
                               .Select(f =>
                                       new Func <ObjectPromise>(async() => await f.GetTranslation(context, scopeData, service))))
                       .ToArray();

            var arguments = new object[args.Length];

            for (var index = 0; index < args.Length; index++)
            {
                var parameters = args[index];
                arguments[index] = (await parameters());
            }

            return(service.GetTranslationOrNull(await valueContext.RenderToString(), culture, arguments));
        }