Exemplo n.º 1
0
 /// <inheritdoc />
 public override int GetHashCode()
 {
     unchecked
     {
         return((base.GetHashCode() * 397) ^ (ExplicitCulture != null ? ExplicitCulture.GetHashCode() : 0));
     }
 }
Exemplo n.º 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));
        }