CA1303: ローカライズされたパラメーターとしてリテラルを渡さないでください

TypeName

DoNotPassLiteralsAsLocalizedParameters

CheckId

CA1303

カテゴリ

Microsoft.Globalization

互換性に影響する変更点

なし

原因

メソッドが、.NET Framework クラス ライブラリのコンストラクターまたはメソッドへのパラメーターとして、リテラル文字列を渡しています。その文字列はローカライズできません。

この警告は、リテラル文字列が値としてパラメーターまたはプロパティに渡されており、次の条件の 1 つ以上に該当する場合に表示されます。

  • パラメーターまたはプロパティの LocalizableAttribute 属性が true に設定されている。

  • パラメーターまたはプロパティの名前に、"Text"、"Message"、または "Caption" という文字列が含まれている。

  • Console.Write メソッドまたは Console.WriteLine メソッドに渡される文字列パラメーターの名前が、"value" または "format" である。

規則の説明

ソース コードに埋め込まれているリテラル文字列は、ローカライズが困難です。

違反の修正方法

この規則違反を修正するには、リテラル文字列を ResourceManager クラスのインスタンスによって取得した文字列で置換します。

警告を抑制する状況

コード ライブラリをローカライズしない場合、またはコード ライブラリを使用した文字列がエンド ユーザーまたは開発者に表示されない場合は、この規則による警告を抑制しても安全です。

こうすることで、ローカライズされた文字列を渡すことができないメソッドについて、ユーザーがノイズを除去できるようになります。除去するには、パラメーターまたはプロパティに付けられた名前を変更するか、これらの項目を条件付きにします。

使用例

2 つの引数のいずれかが範囲外であるときに、例外をスローするメソッドを次の例に示します。 1 つ目の引数では、リテラル文字列が例外のコンストラクターに渡されるため、規則違反です。 2 つ目の引数では、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));
            }
        }
    };
}

参照

概念

アプリケーションのリソース