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