Freigeben über


CA1303: Literale nicht als lokalisierte Parameter übergeben

TypeName

DoNotPassLiteralsAsLocalizedParameters

CheckId

CA1303

Kategorie

Microsoft.Globalization

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Eine Methode übergibt ein Zeichenfolgenliteral als Parameter an einen Konstruktor oder eine Methode in der .NET Framework-Klassenbibliothek, und diese Zeichenfolge sollte lokalisierbar sein.

Diese Warnung wird ausgelöst, wenn eine Literalzeichenfolge als Wert an einen Parameter oder eine Eigenschaft übergeben wird und mindestens einer der folgenden Fälle wahr ist:

  • Das LocalizableAttribute-Attribut des Parameters oder der Eigenschaft ist auf "true" festgelegt.

  • Der Parameter oder Eigenschaftenname enthält "Text", "Meldung" oder "Beschriftung".

  • Der Name des Zeichenfolgenparameters, der an eine Console.Write-Methode oder eine Console.WriteLine-Methode übergeben wird, ist entweder "Wert" oder "Format".

Regelbeschreibung

Zeichenfolgenliterale, die in Quellcode eingebettet werden, sind schwierig zu lokalisieren.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, ersetzen Sie das Zeichenfolgenliteral durch eine Zeichenfolge, die durch eine Instanz der ResourceManager-Klasse abgerufen wird.

Wann sollten Warnungen unterdrückt werden?

Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn die Codebibliothek nicht lokalisiert wird oder wenn die Zeichenfolge dem Endbenutzer bzw. einem Entwickler nicht über die Codebibliothek zur Verfügung gestellt wird.

Die Benutzer können Störungen für Methoden beseitigen, an die keine lokalisierten Zeichenfolgen übergeben werden sollten, indem sie den Parameter oder die Eigenschaft umbenennen oder indem sie diese Elemente als bedingt kennzeichnen.

Beispiel

Das folgende Beispiel zeigt eine Methode, die eine Ausnahme auslöst, wenn eines ihrer beiden Argumente außerhalb des Bereichs liegt. Beim ersten Argument wird an den Ausnahmekonstruktor eine Literalzeichenfolge übergeben, die gegen diese Regel verstößt. Beim zweiten Argument wird an den Konstruktor ordnungsgemäß eine durch ResourceManager abgerufene Zeichenfolge übergeben.

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

Siehe auch

Konzepte

Ressourcen in Anwendungen