Пример #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));
 }
Пример #2
0
        private async ObjectPromise GetTranslation(ContextObject context, ScopeData scopeData, IMorestachioLocalizationService service)
        {
            var valueContext = await MorestachioExpression.GetValue(context, scopeData);

            var culture = scopeData.ParserOptions.CultureInfo;

            if (ExplicitCulture != null)
            {
                var cultureValue = (await ExplicitCulture.GetValue(context, scopeData)).Value;
                if (cultureValue is CultureInfo cul)
                {
                    culture = cul;
                }
                else if (cultureValue is string strCul)
                {
                    culture = new CultureInfo(strCul);
                }
            }
            else
            {
                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(scopeData), culture, arguments));
        }