CA1303: Nie należy przekazywać literałów jako parametrów zlokalizowanych
TypeName |
DoNotPassLiteralsAsLocalizedParameters |
CheckId |
CA1303 |
Kategoria |
Microsoft.Globalization |
Złamanie zmiany |
Bez podziału |
Przyczyna
Metoda przekazuje ciąg literału jako parametr do konstruktora lub metody w .NET Framework klasy biblioteki i ciąg należy lokalizowalny.
To ostrzeżenie jest wywoływane, gdy literału string jest przekazywana jako wartość parametru lub właściwości i jest spełniony jeden lub więcej z następujących przypadków:
LocalizableAttribute Atrybut parametru lub właściwość jest ustawiona na wartość true.
Nazwa parametru lub właściwości zawiera "Tekst", "Wiadomości" lub "Tytuł".
Nazwa parametru ciąg, który jest przekazywany do metody Console.Write lub Console.WriteLine jest "wartość" lub "format".
Opis reguły
Literały ciągów znaków, które są osadzone w kodzie źródłowym są trudne do zlokalizowania.
Jak naprawić naruszenia
Aby naprawić naruszenie tej zasady, należy zastąpić literał ciągu znaków ciąg pobierane za pośrednictwem instancji ResourceManager klasy.
Kiedy do pomijania ostrzeżenia
Bezpiecznie pomija ostrzeżenia, od tej reguły biblioteki kodu nie jest lokalizowany lub ciąg nie jest narażony na użytkownika końcowego lub autora, przy użyciu biblioteki kodu.
Użytkowników można wyeliminować hałasu przeciwko metod, które nie powinny być przekazywane zlokalizowane ciągi albo zmiana nazwy parametru lub właściwości o nazwie lub oznakowania te elementy jako warunkowe.
Przykład
W poniższym przykładzie metoda, która zgłasza wyjątek w przypadku, gdy albo jej dwa argumenty są poza zakresem.Dla pierwszego argumentu konstruktora wyjątek jest przekazywany literału ciągu, który narusza tej reguły.Dla drugiego argumentu konstruktora jest poprawnie przekazany ciąg pobranych za pośrednictwem 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));
}
}
};
}