Sdílet prostřednictvím


CA1303: Nepředávejte literály jako lokalizované parametry

Název_typu

DoNotPassLiteralsAsLocalizedParameters

CheckId

CA1303

Kategorie

Microsoft.Globalization

Změnit rozdělení

Bez rozdělení

Příčina

Metoda předá řetězec literálu jako parametr do konstruktoru nebo metody v .NET Framework třídy knihovny a že by měl být řetězec Lokalizovatelný.

Toto upozornění je aktivována, když řetězcový literál je předáno jako hodnotu parametru nebo vlastnosti a je splněna jedna nebo více z následujících případů:

  • LocalizableAttribute Atribut parametr nebo vlastnost nastavena na hodnotu true.

  • Název parametru nebo vlastnost obsahuje "Text", "Zpráva" nebo "Titulek".

  • "Hodnota" nebo "formát" je název parametru řetězec, který je předán metodě Console.Write nebo Console.WriteLine.

Popis pravidla

Řetězcové literály, které jsou vloženy do zdrojového kódu je obtížné lokalizovat.

Jak opravit porušení

Opravit porušení tohoto pravidla, nahraďte řetězcový literál řetězce načíst prostřednictvím instance ResourceManager třídy.

Při potlačení upozornění

Je bezpečné bude lokalizován knihovny kódu nebo řetězec není vystavena koncového uživatele nebo vývojáře pomocí knihovny kódu potlačit varování od tohoto pravidla.

Uživatelům můžete vyloučit hluku proti metod, které by neměly být předány lokalizovaných řetězců přejmenováním buď parametr nebo vlastnost s názvem nebo označením položky jako podmíněné.

Příklad

Následující příklad ukazuje způsob, který výjimku buď dva argumenty jsou mimo rozsah.První argument konstruktoru výjimka je předán řetězcový literál, který poruší toto pravidlo.Druhý argument konstruktoru správně předán řetězec načtené pomocí 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));
            }
        }
    };
}

Viz také

Koncepty

Prostředky v aplikacích klasické pracovní plochy