Compartilhar via


CA1303: Não passe os literais como parâmetros localizados

TypeName

DoNotPassLiteralsAsLocalizedParameters

CheckId

CA1303

<strong>Categoria</strong>

Microsoft.Globalization

Alteração significativa

Não separável

Causa

Um método passa uma seqüência de caracteres literal como um parâmetro para um construtor ou um método na .NET Framework a classe de biblioteca e a seqüência de caracteres deve ser localizável.

Esse aviso é gerado quando uma seqüência literal é passada como um valor para uma propriedade ou um parâmetro e uma ou mais das seguintes situações forem verdadeira:

  • O LocalizableAttribute atributo do parâmetro ou propriedade é definido como true.

  • O nome de parâmetro ou propriedade contém "Texto", "Mensagem" ou "Legenda".

  • O nome do parâmetro de seqüência de caracteres que é passado para um método de console. Write ou console. WriteLine é o "valor" ou "format".

Descrição da regra

Literais de seqüência de caracteres que são incorporados no código-fonte são difíceis de localizar.

Como corrigir violações

Para corrigir uma violação desta regra, substitua a seqüência literal recuperada por meio de uma instância de uma seqüência de caracteres de ResourceManager classe.

Quando suprimir avisos

É seguro eliminar um aviso esta regra se a biblioteca de código não será localizada ou se a seqüência de caracteres não é exposta ao usuário final ou um desenvolvedor usando a biblioteca de código.

Os usuários podem eliminar o ruído de métodos que não devem ser passados seqüências localizadas, renomeando o parâmetro ou uma propriedade chamada ou marcando esses itens como condicional.

Exemplo

O exemplo a seguir mostra um método que lança uma exceção quando qualquer um dos dois argumentos estão fora do intervalo. Para o primeiro argumento, o construtor de exceção é passado uma seqüência de caracteres literal, viola essa regra. Para o segundo argumento, o construtor é passado recuperada por meio de uma seqüência de caracteres corretamente um ResourceManager.

Imports System
Imports System.Globalization
Imports System.Reflection
Imports System.Resources
Imports System.Windows.Forms


<assembly: System.Resources.NeutralResourcesLanguageAttribute("en-US")>
Namespace GlobalizationLibrary

    Public Class DoNotPassLiterals

        Dim stringManager As System.Resources.ResourceManager

        Sub New()
            stringManager = New System.Resources.ResourceManager( _
                "en-US", System.Reflection.Assembly.GetExecutingAssembly())
        End Sub

        Sub TimeMethod(hour As Integer, minute As Integer)

            If(hour < 0 Or hour > 23) Then
                MessageBox.Show( _
                    "The valid range is 0 - 23.") 'CA1303 fires because the parameter for method Show is Text
            End If

            If(minute < 0 Or minute > 59) Then
                 MessageBox.Show( _
                    stringManager.GetString("minuteOutOfRangeMessage", _
                        System.Globalization.CultureInfo.CurrentUICulture))
            End If

        End Sub

    End Class

End Namespace
using System;
using System.Globalization;
using System.Reflection;
using System.Resources;
using System.Windows.Forms;



[assembly: NeutralResourcesLanguageAttribute("en-US")]
namespace GlobalizationLibrary
{
    public class DoNotPassLiterals
    {
        ResourceManager stringManager;
        public DoNotPassLiterals()
        {
            stringManager =
            new ResourceManager("en-US", Assembly.GetExecutingAssembly());
        }

        public void TimeMethod(int hour, int minute)
        {
            if (hour < 0 || hour > 23)
            {
                MessageBox.Show(
                "The valid range is 0 - 23."); //CA1303 fires because the parameter for method Show is Text
            }

            if (minute < 0 || minute > 59)
            {
                MessageBox.Show(
                stringManager.GetString(
                "minuteOutOfRangeMessage", CultureInfo.CurrentUICulture));
            }
        }
    }

}


using namespace System;
using namespace System::Globalization;
using namespace System::Reflection;
using namespace System::Resources;
using namespace System::Windows::Forms;

[assembly: NeutralResourcesLanguageAttribute("en-US")];
namespace GlobalizationLibrary
{
    public ref class DoNotPassLiterals
    {
        ResourceManager^ stringManager;

    public:
        DoNotPassLiterals()
        {
            stringManager = 
                gcnew ResourceManager("en-US", Assembly::GetExecutingAssembly());
        }

        void TimeMethod(int hour, int minute)
        {
            if(hour < 0 || hour > 23)
            {
                MessageBox::Show(
                    "The valid range is 0 - 23."); //CA1303 fires because the parameter for method Show is Text
            }

            if(minute < 0 || minute > 59)
            {
                MessageBox::Show(
                    stringManager->GetString("minuteOutOfRangeMessage", CultureInfo::CurrentUICulture));
            }
        }
    };
}

Consulte também

Conceitos

Recursos em aplicativos