다음을 통해 공유


CA1303: 리터럴을 지역화된 매개 변수로 전달하지 마십시오.

TypeName

DoNotPassLiteralsAsLocalizedParameters

CheckId

CA1303

범주

Microsoft.Globalization

변경 수준

주요 변경 아님

원인

메서드가 .NET Framework 클래스 라이브러리의 생성자 또는 메서드에 문자열 리터럴을 매개 변수로 전달하는데 이 문자열은 지역화될 수 있어야 합니다.

이 경고는 리터럴 문자열이 매개 변수 또는 속성에 대한 값으로 전달되고 다음 사례 중 하나 이상이 참일 때 발생합니다.

  • 매개 변수 또는 속성의 LocalizableAttribute 특성은 true로 설정됩니다.

  • 매개 변수 또는 속성 이름에 "Text", "Message" 또는 "Caption"이 포함되어 있습니다.

  • Console.Write or Console.WriteLine 메서드에 전달되는 문자열 매개 변수의 이름은 "값" 또는 "형식"입니다.

규칙 설명

소스 코드에 포함된 문자열 리터럴은 지역화하기 어렵습니다.

위반 문제를 해결하는 방법

이 규칙 위반 문제를 해결하려면 문자열 리터럴을 ResourceManager 클래스의 인스턴스를 통해 검색한 문자열로 바꿉니다.

경고를 표시하지 않는 경우

코드 라이브러리가 지역화되지 않는 경우 또는 코드 라이브러리를 사용하는 개발자 또는 최종 사용자에게 문자열이 노출되지 않는 경우에는 이 규칙에서 경고를 표시하지 않아도 안전합니다.

사용자는 명명된 매개 변수 또는 속성의 이름을 바꾸거나 이러한 항목을 조건부로 만들어서 지역화된 문자열을 전달하면 안 되는 메서드에 방해가 되는 요소를 제거할 수 있습니다.

예제

다음 예제에서는 두 인수 중 하나가 범위를 벗어나면 예외를 throw하는 메서드를 보여 줍니다. 첫 번째 인수의 경우 예외 생성자에 이 규칙을 위반하는 리터럴 문자열이 전달됩니다. 두 번째 인수의 경우 생성자에 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));
            }
        }
    };
}

참고 항목

개념

응용 프로그램의 리소스