Пример #1
0
        public override bool TryExtract(SyntaxNode node, out LocalizableStringOccurence result)
        {
            result = null;

            if (node is ElementAccessExpressionSyntax accessor &&
                accessor.Expression is IdentifierNameSyntax identifierName &&
                LocalizerAccessors.LocalizerIdentifiers.Contains(identifierName.Identifier.Text) &&
                accessor.ArgumentList != null)
            {
                var argument = accessor.ArgumentList.Arguments.FirstOrDefault();
                if (argument != null && argument.Expression is LiteralExpressionSyntax literal && literal.IsKind(SyntaxKind.StringLiteralExpression))
                {
                    result = new LocalizableStringOccurence()
                    {
                        Text     = literal.Token.ValueText,
                        Context  = this.MetadataProvider.GetContext(node),
                        Location = this.MetadataProvider.GetLocation(node)
                    };

                    return(true);
                }
            }

            return(false);
        }
Пример #2
0
        protected LocalizableStringOccurence CreateLocalizedString(string text, string textPlural, T node)
        {
            var result = new LocalizableStringOccurence()
            {
                Text       = text,
                TextPlural = textPlural,
                Location   = this.MetadataProvider.GetLocation(node),
                Context    = this.MetadataProvider.GetContext(node)
            };

            return(result);
        }
Пример #3
0
        public override bool TryExtract(LiquidExpressionContext expressionContext, out LocalizableStringOccurence result)
        {
            result = null;
            var filter = expressionContext.Expression;

            if (filter.Name == "t")
            {
                if (filter.Input is LiteralExpression literal)
                {
                    var text = literal.EvaluateAsync(new Fluid.TemplateContext()).GetAwaiter().GetResult().ToStringValue();
                    result = this.CreateLocalizedString(text, null, expressionContext);
                    return(true);
                }
            }

            return(false);
        }
Пример #4
0
        public override bool TryExtract(SyntaxNode node, out LocalizableStringOccurence result)
        {
            result = null;

            if (node is InvocationExpressionSyntax invocation &&
                invocation.Expression is MemberAccessExpressionSyntax accessor &&
                accessor.Expression is IdentifierNameSyntax identifierName &&
                LocalizerAccessors.LocalizerIdentifiers.Contains(identifierName.Identifier.Text) &&
                accessor.Name.Identifier.Text == "Plural")
            {
                var arguments = invocation.ArgumentList.Arguments;
                if (arguments.Count >= 2 &&
                    arguments[1].Expression is ArrayCreationExpressionSyntax array)
                {
                    if (array.Type.ElementType is PredefinedTypeSyntax arrayType &&
                        arrayType.Keyword.Text == "string" &&
                        array.Initializer.Expressions.Count >= 2 &&
                        array.Initializer.Expressions[0] is LiteralExpressionSyntax singularLiteral && singularLiteral.IsKind(SyntaxKind.StringLiteralExpression) &&
                        array.Initializer.Expressions[1] is LiteralExpressionSyntax pluralLiteral && pluralLiteral.IsKind(SyntaxKind.StringLiteralExpression))
                    {
                        result = this.CreateLocalizedString(singularLiteral.Token.ValueText, pluralLiteral.Token.ValueText, node);
                        return(true);
                    }
                }
                else
                {
                    if (arguments.Count >= 3 &&
                        arguments[1].Expression is LiteralExpressionSyntax singularLiteral && singularLiteral.IsKind(SyntaxKind.StringLiteralExpression) &&
                        arguments[2].Expression is LiteralExpressionSyntax pluralLiteral && pluralLiteral.IsKind(SyntaxKind.StringLiteralExpression))
                    {
                        result = this.CreateLocalizedString(singularLiteral.Token.ValueText, pluralLiteral.Token.ValueText, node);
                        return(true);
                    }
                }
            }

            return(false);
        }
        public override bool TryExtract(SyntaxNode node, out LocalizableStringOccurence result)
        {
            result = null;

            if (node is AttributeArgumentSyntax argument &&
                argument.Expression.Parent.ToFullString().StartsWith(_argumentName) &&
                node.Parent?.Parent is AttributeSyntax accessor &&
                accessor.Name.ToString() == DisplayAttributeName &&
                argument.Expression is LiteralExpressionSyntax literal &&
                literal.IsKind(SyntaxKind.StringLiteralExpression))
            {
                result = new LocalizableStringOccurence()
                {
                    Text     = literal.Token.ValueText,
                    Context  = MetadataProvider.GetContext(node),
                    Location = MetadataProvider.GetLocation(node)
                };

                return(true);
            }

            return(false);
        }
Пример #6
0
        public void Constructor_PopulatesProperties()
        {
            var source = new LocalizableStringOccurence()
            {
                Context    = "PoExtractor",
                Text       = "Computer",
                TextPlural = "Computers",
                Location   = new LocalizableStringLocation()
                {
                    Comment        = "Comment",
                    SourceFile     = "Test.cs",
                    SourceFileLine = 1
                }
            };

            var result = new LocalizableString(source);

            Assert.Equal(source.Context, result.Context);
            Assert.Equal(source.Text, result.Text);
            Assert.Equal(source.TextPlural, result.TextPlural);

            Assert.Single(result.Locations, source.Location);
        }
        public override bool TryExtract(SyntaxNode node, out LocalizableStringOccurence result)
        {
            result = null;

            if (node is AttributeSyntax accessor && accessor.ArgumentList != null)
            {
                var argument = accessor.ArgumentList.Arguments
                               .Where(a => a.Expression.Parent.ToFullString().StartsWith(ErrorMessageAttributeName))
                               .FirstOrDefault();
                if (argument != null && argument.Expression is LiteralExpressionSyntax literal && literal.IsKind(SyntaxKind.StringLiteralExpression))
                {
                    result = new LocalizableStringOccurence()
                    {
                        Text     = literal.Token.ValueText,
                        Context  = MetadataProvider.GetContext(node),
                        Location = MetadataProvider.GetLocation(node)
                    };

                    return(true);
                }
            }

            return(false);
        }