ResourceManager ResourceManager ResourceManager ResourceManager Class

定義

実行時にカルチャ固有のリソースにアクセスする便利な手段を提供するリソース マネージャーを表します。Represents a resource manager that provides convenient access to culture-specific resources at run time.

public ref class ResourceManager
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class ResourceManager
type ResourceManager = class
Public Class ResourceManager
継承
ResourceManagerResourceManagerResourceManagerResourceManager
派生
属性

次の例では、明示的なカルチャおよび暗黙的な現在の UI カルチャを使用して、メイン アセンブリとサテライト アセンブリから文字列リソースを取得する方法を示します。The following example demonstrates how to use an explicit culture and the implicit current UI culture to obtain string resources from a main assembly and a satellite assembly. 詳細については、サテライト アセンブリの作成の記事内の「グローバル アセンブリ キャッシュにインストールされていないサテライト アセンブリのディレクトリの場所」セクションを参照してください。For more information, see the "Directory Locations for Satellite Assemblies Not Installed in the Global Assembly Cache" section of the Creating Satellite Assemblies topic.

この例を実行するには、To run this example:

  1. アプリ ディレクトリで、次のリソース文字列を含む rmc.txt という名前のファイルを作成します。In the app directory, create a file named rmc.txt that contains the following resource strings:

    
    day=Friday  
    year=2006  
    holiday="Cinco de Mayo"  
    
  2. 次のように、リソース ファイル ジェネレーター を使用して、入力ファイル rmc.txt からリソース ファイル rmc.resources を生成します。Use the Resource File Generator to generate the rmc.resources resource file from the rmc.txt input file as follows:

    resgen rmc.txt  
    
  3. アプリ ディレクトリのサブディレクトリを作成し、"es-MX" という名前をつけます。Create a subdirectory of the app directory and name it "es-MX". これは、続く 3 つの手順で作成するサテライト アセンブリのカルチャ名です。This is the culture name of the satellite assembly that you will create in the next three steps.

  4. 次のリソース文字列を含む rmc.es-MX.txt という名前のファイルを es-MX のディレクトリに作成します。Create a file named rmc.es-MX.txt in the es-MX directory that contains the following resource strings:

    
    day=Viernes  
    year=2006  
    holiday="Cinco de Mayo"  
    
  5. 次のように、リソース ファイル ジェネレーター を使用して、入力ファイル rmc.es-MX.txt からリソース ファイル rmc.es-MX.resources を生成します。Use the Resource File Generator to generate the rmc.es-MX.resources resource file from the rmc.es-MX.txt input file as follows:

    resgen rmc.es-MX.txt  
    
  6. この例のファイル名が rmc.vb または rmc.cs のどちらかであると仮定します。Assume that the filename for this example is rmc.vb or rmc.cs. 下記のソース コードをファイルにコピーします。Copy the following source code into a file. それをコンパイルし、メイン アセンブリのリソース ファイルである rmc.resources を実行可能アセンブリに埋め込みます。Then compile it and embed the main assembly resource file, rmc.resources, in the executable assembly. Visual Basic コンパイラを使用している場合、構文は次のようになります。If you are using the Visual Basic compiler, the syntax is:

    vbc rmc.vb /resource:rmc.resources  
    

    これは C# コンパイラの対応する構文です。The corresponding syntax for the C# compiler is:

    csc /resource:rmc.resources rmc.cs  
    
  7. アセンブリ リンカー を使用して、サテライト アセンブリを作成します。Use the Assembly Linker to create a satellite assembly. アプリのベース名が rmc なら、サテライト アセンブリの名前は rmc.resources.dll である必要があります。If the base name of the app is rmc, the satellite assembly name must be rmc.resources.dll. サテライト アセンブリは es-MX ディレクトリに作成する必要があります。The satellite assembly should be created in the es-MX directory. es-MX が現在のディレクトリの場合は、このコマンドを使用します。If es-MX is the current directory, use this command:

    al /embed:rmc.es-MX.resources /c:es-MX /out:rmc.resources.dll   
    
  8. rmc.exe を実行して、埋め込まれたリソース文字列の取得と表示を行います。Run rmc.exe to obtain and display the embedded resource strings.

using System;
using System.Resources;
using System.Reflection;
using System.Threading;
using System.Globalization;

class Example 
{
    public static void Main() 
    {
    string day;
    string year;
    string holiday;
    string celebrate = "{0} will occur on {1} in {2}.\n";

    // Create a resource manager. 
    ResourceManager rm = new ResourceManager("rmc", 
                             typeof(Example).Assembly);

    Console.WriteLine("Obtain resources using the current UI culture.");

    // Get the resource strings for the day, year, and holiday 
    // using the current UI culture. 
    day  = rm.GetString("day");
    year = rm.GetString("year");
    holiday = rm.GetString("holiday");
    Console.WriteLine(celebrate, holiday, day, year);

    // Obtain the es-MX culture.
    CultureInfo ci = new CultureInfo("es-MX");

    Console.WriteLine("Obtain resources using the es-MX culture.");

   // Get the resource strings for the day, year, and holiday 
   // using the specified culture. 
    day  = rm.GetString("day", ci);
    year = rm.GetString("year", ci);
    holiday = rm.GetString("holiday", ci);
// ---------------------------------------------------------------
// Alternatively, comment the preceding 3 code statements and 
// uncomment the following 4 code statements:
// ----------------------------------------------------------------
// Set the current UI culture to "es-MX" (Spanish-Mexico).
//    Thread.CurrentThread.CurrentUICulture = ci;

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message. 
//    day  = rm.GetString("day");
//    year = rm.GetString("year");
//    holiday = rm.GetString("holiday");
// ---------------------------------------------------------------

// Regardless of the alternative that you choose, display a message 
// using the retrieved resource strings.
    Console.WriteLine(celebrate, holiday, day, year);
    }
}
/*
This example displays the following output:

   Obtain resources using the current UI culture.
   "5th of May" will occur on Friday in 2006.
   
   Obtain resources using the es-MX culture.
   "Cinco de Mayo" will occur on Viernes in 2006.
*/
Imports System.Resources
Imports System.Reflection
Imports System.Threading
Imports System.Globalization

Class Example
    Public Shared Sub Main() 
        Dim day As String
        Dim year As String
        Dim holiday As String
        Dim celebrate As String = "{0} will occur on {1} in {2}." & vbCrLf

        ' Create a resource manager. 
        Dim rm As New ResourceManager("rmc", GetType(Example).Assembly)

        Console.WriteLine("Obtain resources using the current UI culture.")

        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. 
        day = rm.GetString("day")
        year = rm.GetString("year")
        holiday = rm.GetString("holiday")
        Console.WriteLine(celebrate, holiday, day, year)

        ' Obtain the es-MX culture.
        Dim ci As New CultureInfo("es-MX")

        Console.WriteLine("Obtain resources using the es-MX culture.")

        ' Get the resource strings for the day, year, and holiday 
        ' using the es-MX culture.  
        day = rm.GetString("day", ci)
        year = rm.GetString("year", ci)
        holiday = rm.GetString("holiday", ci)

        ' ---------------------------------------------------------------
        ' Alternatively, comment the preceding 3 code statements and 
        ' uncomment the following 4 code statements:
        ' ----------------------------------------------------------------
        ' Set the current UI culture to "es-MX" (Spanish-Mexico).
        '    Thread.CurrentThread.CurrentUICulture = ci
        ' Get the resource strings for the day, year, and holiday 
        ' using the current UI culture. 
        '    day  = rm.GetString("day")
        '    year = rm.GetString("year")
        '    holiday = rm.GetString("holiday")
        ' ---------------------------------------------------------------

        ' Regardless of the alternative that you choose, display a message 
        ' using the retrieved resource strings.
        Console.WriteLine(celebrate, holiday, day, year)
    End Sub 
End Class
' This example displays the following output:
'Obtain resources using the current UI culture.
'"5th of May" will occur on Friday in 2006.
'
'Obtain resources using the es-MX culture.
'"Cinco de Mayo" will occur on Viernes in 2006.

注釈

重要

このクラスのメソッドを信頼されていないデータを指定して呼び出すことには、セキュリティ上のリスクが伴います。Calling methods from this class with untrusted data is a security risk. このクラスのメソッドの呼び出しは、信頼されたデータだけを指定して実行してください。Call the methods from this class only with trusted data. 詳しくは、「Data Validation」(データの入力規則) を参照してください。For more information, see Data Validation.

ResourceManager クラスは、アセンブリに埋め込まれているバイナリ .resources ファイル、または、スタンドアロンの .resources ファイルからリソースを取得します。The ResourceManager class retrieves resources from a binary .resources file that is embedded in an assembly or from a standalone .resources file. アプリがローカライズされ、ローカライズされたリソースがサテライト アセンブリに配置されているなら、アプリは、カルチャ固有のリソースを検索し、ローカライズされたリソースが存在しない場合は、リソース フォールバックを提供します。また、リソースのシリアル化をサポートします。If an app has been localized and localized resources have been deployed in satellite assemblies, it looks up culture-specific resources, provides resource fallback when a localized resource does not exist, and supports resource serialization.

デスクトップ アプリや Windows 8.x ストアWindows 8.x Store アプリでのリソース作成および管理の詳細については、次のセクションを参照してください。For more information about creating and managing resources in desktop apps and Windows 8.x ストアWindows 8.x Store apps, see the following sections:

デスクトップ アプリDesktop Apps

デスクトップ アプリの場合、ResourceManager クラスは、バイナリ リソース (.resources) ファイルからリソースを取得します。For desktop apps, the ResourceManager class retrieves resources from binary resource (.resources) files. 通常は、言語コンパイラかアセンブリ リンカー (AL.exe) がアセンブリにこれらのリソース ファイルを埋め込みます。Typically, a language compiler or the Assembly Linker (AL.exe) embeds these resource files in an assembly. CreateFileBasedResourceManager メソッドを呼び出すことによって、ResourceManager オブジェクトを使用して、アセンブリに埋め込まれていない .resources ファイルからリソースを直接取得できます。You can also use a ResourceManager object to retrieve resources directly from a .resources file that is not embedded in an assembly, by calling the CreateFileBasedResourceManager method.

注意事項

ASP.NET アプリでスタンドアロン .resources ファイルを使用すると、XCOPY による配置が中断されます。ReleaseAllResources メソッドによって明示的に解放されるまで、リソースがロックされたままになるためです。Using standalone .resources files in an ASP.NET app will break XCOPY deployment, because the resources remain locked until they are explicitly released by the ReleaseAllResources method. ASP.NET アプリでリソースを配置する場合は、サテライト アセンブリに .resources ファイルをコンパイルする必要があります。If you want to deploy resources with your ASP.NET apps, you should compile your .resources files into satellite assemblies.

リソース ベースのアプリでは、1 つの .resources ファイルは既定のカルチャのリソースを含んでいます。そのリソースは、カルチャ固有のリソースが見つからない場合に使用されます。In a resource-based app, one .resources file contains the resources of the default culture whose resources are used if no culture-specific resources can be found. たとえば、アプリの既定のカルチャが英語 (en) の場合は、英語 (米国) (en-US) やフランス語 (フランス) (fr-FR) などの、特定のカルチャに対してローカライズされたリソースが見つからないときに、英語の言語リソースが使用されます。For example, if an app's default culture is English (en), the English language resources are used whenever localized resources cannot be found for a specific culture, such as English (United States) (en-US) or French (France) (fr-FR). 通常は、既定のカルチャのリソースはメイン アプリ アセンブリに埋め込まれ、他のローカライズされたリソースはサテライト アセンブリに埋め込まれます。Typically, the resources for the default culture are embedded in the main app assembly, and resources for other localized cultures are embedded in satellite assemblies. サテライト アセンブリはリソースのみを含みます。Satellite assemblies contain only resources. サテライト アセンブリは、メイン アセンブリと同じルート ファイル名と、resources.dll の拡張子を持ちます。They have the same root file name as the main assembly and an extension of .resources.dll. アプリのアセンブリがグローバル アセンブリ キャッシュに登録されていない場合は、サテライト アセンブリは、アセンブリのカルチャに対応する名前を持つ、アプリのサブディレクトリに格納されます。For apps whose assemblies are not registered in the global assembly cache, satellite assemblies are stored in an app subdirectory whose name corresponds to the assembly's culture.

リソースの作成Creating Resources

リソース ベースのアプリを開発する際は、テキスト ファイル (.txt か .restext 拡張子を持つファイル) または XML ファイル (.resx 拡張子を持つファイル) にリソース情報を格納します。When you develop a resource-based app, you store resource information in text files (files that have a .txt or .restext extension) or XML files (files that have a .resx extension). それからリソース ファイル ジェネレーター (Resgen.exe) を使用して、テキスト ファイルまたは XML ファイルをコンパイルし、バイナリ .resources ファイルを作成します。You then compile the text or XML files with the Resource File Generator (Resgen.exe) to create a binary .resources file. C# や Visual Basic コンパイラにおける /resources のようなコンパイラ オプションを使用して、作成した .resources ファイルを実行可能ファイルまたはライブラリに埋め込むことができます。または、アセンブリ リンカー (Al.exe) を使用して、サテライト アセンブリに埋め込むことができます。You can then embed the resulting .resources file in an executable or library by using a compiler option such as /resources for the C# and Visual Basic compilers, or you can embed it in a satellite assembly by using the . Visual Studio プロジェクトに .resx ファイルを含めると、Visual Studio はビルド プロセスの一部として、既定のリソースとローカライズされたリソースのコンパイルおよび埋め込みを自動的に処理します。If you include a .resx file in your Visual Studio project, Visual Studio handles the compilation and embedding of default and localized resources automatically as part of the build process.

理想的には、アプリがサポートするすべての言語か、少なくとも各言語で意味をなすサブセットに対して、リソースを作成してください。Ideally, you should create resources for every language your app supports, or at least for a meaningful subset of each language. バイナリ .resources ファイルの名前は、basename.cultureName.resources の名前付け規則に従います。ここで basename は、必要な詳細のレベルに応じて、アプリの名前またはクラスの名前になります。The binary .resources file names follow the naming convention basename.cultureName.resources, where basename is the name of the app or the name of a class, depending on the level of detail you want. cultureName を判断するには、CultureInfo.Name プロパティを使用します。The CultureInfo.Name property is used to determine cultureName. アプリの既定のカルチャのリソースには、basename.resources の名前をつけてください。A resource for the app's default culture should be named basename.resources.

たとえば、ベースの名前に MyResources を持つリソース ファイルにいくつかのリソースが含まれているアセンブリを想定します。For example, suppose that an assembly has several resources in a resource file that has the base name MyResources. これらのリソース ファイルは、日本 (日本語) のカルチャには MyResources.ja-JP.resources、ドイツのカルチャには MyResources.de.resources、簡体字中国語のカルチャには MyResources.zh-CHS.resources、フランス語 (ベルギー) のカルチャには MyResources.fr-BE.resources、などの名前を持つ必要があります。These resource files should have names such as MyResources.ja-JP.resources for the Japan (Japanese) culture, MyResources.de.resources for the German culture, MyResources.zh-CHS.resources for the simplified Chinese culture, and MyResources.fr-BE.resources for the French (Belgium) culture. 既定のリソース ファイルは MyResources.resources の名前を持つ必要があります。The default resource file should be named MyResources.resources. 通常は、カルチャ固有のリソース ファイルは、カルチャごとにサテライト アセンブリにパッケージ化されます。The culture-specific resource files are commonly packaged in satellite assemblies for each culture. 既定のリソース ファイルは、アプリのメイン アセンブリに埋め込まれる必要があります。The default resource file should be embedded in the app's main assembly.

注意してくださいアセンブリ リンカーにより、プライベートとしてマーク済みであるリソースが常にマークするに public として他のアセンブリによってアクセスできるようにします。Note that Assembly Linker allows resources to be marked as private, but you should always mark them as public so they can be accessed by other assemblies. (サテライト アセンブリはコードを含まないため、プライベートとしてマークされたリソースは、どんな方法を使ってもアプリで使用できません。)(Because a satellite assembly contains no code, resources that are marked as private are unavailable to your app through any mechanism.)

リソースの作成、パッケージ化、および、配置の詳細については、リソース ファイルの作成サテライト アセンブリの作成リソースのパッケージ化と配置の記事を参照してください。For more information about creating, packaging, and deploying resources, see the articles Creating Resource Files, Creating Satellite Assemblies, and Packaging and Deploying Resources.

ResourceManager オブジェクトのインスタンス化Instantiating a ResourceManager Object

埋め込まれた .resources ファイルからリソースを取得する ResourceManager オブジェクトのインスタンス化は、それのクラス コンストラクターのオーバーロードの 1 つを呼び出すことによって行います。You instantiate a ResourceManager object that retrieves resources from an embedded .resources file by calling one of its class constructor overloads. これは、ResourceManager オブジェクトを、特定の .resources ファイルや、サテライト アセンブリにあり関連するローカライズされた .resources ファイルとを密に結びつけます。This tightly couples a ResourceManager object with a particular .resources file and with any associated localized .resources files in satellite assemblies.

最もよく呼び出されるコンストラクターは次の 2 つです。The two most commonly called constructors are:

  • ResourceManager(String, Assembly) は、指定した 2 つの情報に基づいてリソースを検索します。それらは .resources ファイルのベース名と、既定の .resources ファイルが存在するアセンブリです。ResourceManager(String, Assembly) looks up resources based on two pieces of information that you supply: the base name of the .resources file, and the assembly in which the default .resources file resides. ベース名は、.resources ファイルの名前空間とルート名を含み、それのカルチャや拡張子を含みません。The base name includes the namespace and root name of the .resources file, without its culture or extension. コマンド ラインからコンパイルされた .resources ファイルは、通常は名前空間の名前を含みませんが、Visual Studio 環境で作成した .resources ファイルはそれを含むことに注意してください。Note that .resources files that are compiled from the command line typically do not include a namespace name, whereas .resources files that are created in the Visual Studio environment do. たとえば、リソース ファイルの名前が MyCompany.StringResources.resources であり、Example.Main という名前の静的メソッドから ResourceManager コンストラクターを呼び出す場合、次のコードが .resources ファイルからリソースを取得できる ResourceManager オブジェクトをインスタンス化します。For example, if a resource file is named MyCompany.StringResources.resources and the ResourceManager constructor is called from a static method named Example.Main, the following code instantiates a ResourceManager object that can retrieve resources from the .resources file:

    ResourceManager rm = new ResourceManager("MyCompany.StringResources", 
                                             typeof(Example).Assembly);
    
    Dim rm As New ResourceManager("MyCompany.StringResources",
                                  GetType(Example).Assembly)
    
  • ResourceManager(Type) は、型オブジェクトからの情報に基づいて、サテライト アセンブリにあるリソースを検索します。ResourceManager(Type) looks up resources in satellite assemblies based on information from a type object. 型の完全修飾名は、ファイル名の拡張子を含まない .resources ファイルのベース名に対応します。The type's fully qualified name corresponds to the base name of the .resources file without its file name extension. Visual Studio リソース デザイナーを使用して作成されたデスクトップ アプリでは、Visual Studio は .resources ファイルのルート名と同じ完全修飾名を持つラッパー クラスを作成します。In desktop apps that are created by using the Visual Studio Resource Designer, Visual Studio creates a wrapper class whose fully qualified name is the same as the root name of the .resources file. たとえば、リソース ファイルの名前が MyCompany.StringResources.resources であり、MyCompany.StringResources という名前のラッパー クラスがある場合、次のコードが .resources ファイルからリソースを取得できる ResourceManager オブジェクトをインスタンス化します。For example, if a resource file is named MyCompany.StringResources.resources and there is a wrapper class named MyCompany.StringResources, the following code instantiates a ResourceManager object that can retrieve resources from the .resources file:

    ResourceManager rm = new ResourceManager(typeof(MyCompany.StringResources));
    
    Dim rm As New ResourceManager(GetType(MyCompany.StringResources))
    

適切なリソースが見つからない場合、コンストラクターの呼び出しは有効な ResourceManager オブジェクトを作成します。If the appropriate resources cannot be found, the constructor call creates a valid ResourceManager object. ただし、リソースを取得しようとすると、MissingManifestResourceException 例外がスローされます。However, the attempt to retrieve a resource throws a MissingManifestResourceException exception. 例外に対処する方法については、この記事で後述する MissingManifestResourceException および MissingSatelliteAssemblyException 例外の処理を参照してください。For information about dealing with the exception, see the Handling MissingManifestResourceException and MissingSatelliteAssembly Exceptions section later in this article.

次の例は、ResourceManager オブジェクトをインスタンス化する方法を示しています。The following example shows how to instantiate a ResourceManager object. それには ShowTime.exe という名前の実行可能ファイルのソース コードが含まれています。It contains the source code for an executable named ShowTime.exe. また、次に示す TimeHeader という唯一の文字列リソースを含む、Strings.txt という名前のテキスト ファイルも含まれます。It also includes the following text file named Strings.txt that contains a single string resource, TimeHeader:

TimeHeader=The current time is  

バッチ ファイルを使用して、リソース ファイルを生成し、実行可能ファイルに埋め込むことができます。You can use a batch file to generate the resource file and embed it into the executable. C# コンパイラを使用して、実行可能ファイルを生成するバッチ ファイルを次に示します。Here's the batch file to generate an executable by using the C# compiler:


resgen strings.txt  
csc ShowTime.cs /resource:strings.resources  

Visual Basic コンパイラでは、次のバッチ ファイルを使用できます。For the Visual Basic compiler, you can use the following batch file:


resgen strings.txt  
vbc ShowTime.vb /resource:strings.resources  
using System;
using System.Resources;

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("Strings", 
                               typeof(Example).Assembly);
      string timeString = rm.GetString("TimeHeader");
      Console.WriteLine("{0} {1:T}", timeString, DateTime.Now);   
   }
}
// The example displays output like the following:
//        The current time is 2:03:14 PM
Imports System.Resources

Module Example
   Public Sub Main()
      Dim rm As New ResourceManager("Strings", GetType(Example).Assembly)
      Dim timeString As String = rm.GetString("TimeHeader")
      Console.WriteLine("{0} {1:T}", timeString, Date.Now)   
   End Sub
End Module
' The example displays output similar to the following:
'       The current time is 2:03:14 PM

ResourceManager とカルチャ固有のリソースResourceManager and Culture-Specific Resources

リソースのパッケージ化と配置の記事で説明したように、ローカライズされたアプリはリソースを配置する必要があります。A localized app requires resources to be deployed, as discussed in the article Packaging and Deploying Resources. アセンブリが正しく構成されているなら、リソース マネージャーは、現在のスレッドの Thread.CurrentUICulture プロパティに基づいて、どのリソースを取得するかを決定します。If the assemblies are properly configured, the resource manager determines which resources to retrieve based on the current thread's Thread.CurrentUICulture property. (そのプロパティは現在のスレッドの UI カルチャを返します。) たとえば、メイン アセンブリに既定の英語の言語リソースがあり、2 つのサテライト アセンブリにフランス語とロシア語の言語リソースがあるようにアプリがコンパイルされていて、Thread.CurrentUICulture プロパティが fr-FR に設定されている場合、リソース マネージャーはフランス語のリソースを取得します。(That property also returns the current thread's UI culture.) For example, if an app is compiled with default English language resources in the main assembly and with French and Russian language resources in two satellite assemblies, and the Thread.CurrentUICulture property is set to fr-FR, the resource manager retrieves the French resources.

CurrentUICulture プロパティは明示的または暗黙的に設定できます。You can set the CurrentUICulture property explicitly or implicitly. それを設定する方法によって、ResourceManager オブジェクトがカルチャに基づいてリソースを取得する方法が決定されます。The way you set it determines how the ResourceManager object retrieves resources based on culture:

  • 明示的に Thread.CurrentUICulture プロパティに特定のカルチャを設定する場合、リソース マネージャーは常に、ユーザーのブラウザーまたはオペレーティング システムの言語に関係なく、そのカルチャのリソースを取得します。If you explicitly set the Thread.CurrentUICulture property to a specific culture, the resource manager always retrieves the resources for that culture, regardless of the user's browser or operating system language. 既定の英語の言語リソースと、英語 (米国)、フランス語 (フランス)、およびロシア語 (ロシア) のリソースを含む 3 つのサテライト アセンブリとともにコンパイルされているアプリを考えます。Consider an app that is compiled with default English language resources and three satellite assemblies that contain resources for English (United States), French (France), and Russian (Russia). CurrentUICulture プロパティが fr-FR に設定されている場合、たとえユーザーのオペレーティング システムの言語がフランス語ではないとしても、ResourceManager オブジェクトは常にフランス語 (フランス) のリソースを取得します。If the CurrentUICulture property is set to fr-FR, the ResourceManager object always retrieves the French (France) resources, even if the user's operating system language is not French. プロパティを明示的に設定する前に、これが目的の動作であることを確認してください。Make sure that this is the desired behavior before you set the property explicitly.

    ASP.NET アプリでは、サーバーの設定が受信したクライアント要求と一致しない可能性があるため、Thread.CurrentUICulture プロパティを明示的に設定する必要があります。In ASP.NET apps, you must set the Thread.CurrentUICulture property explicitly, because it is unlikely that the setting on the server will match incoming client requests. ASP.NET アプリは Thread.CurrentUICulture プロパティをユーザーのブラウザーが受け入れ可能な言語に明示的に設定できます。An ASP.NET app can set the Thread.CurrentUICulture property explicitly to the user's browser accept language.

    Thread.CurrentUICulture プロパティを明示的に設定することによって、そのスレッドの現在の UI カルチャが定義されます。Explicitly setting the Thread.CurrentUICulture property defines the current UI culture for that thread. これは、アプリの他のスレッドの現在の UI カルチャには影響しません。It does not affect the current UI culture of any other threads in an app.

  • CultureInfo.DefaultThreadCurrentUICulture 静的プロパティに UI カルチャを表す CultureInfo オブジェクトを割り当てることで、アプリ ドメイン内のすべてのスレッドの UI カルチャを設定できます。You can set the UI culture of all threads in an app domain by assigning a CultureInfo object that represents that culture to the static CultureInfo.DefaultThreadCurrentUICulture property.

  • 現在の UI カルチャを明示的に設定せず、現在のアプリ ドメインに既定のカルチャを定義しない場合、CultureInfo.CurrentUICulture プロパティは Windows の GetUserDefaultUILanguage 関数によって暗黙的に設定されます。If you do not explicitly set the current UI culture and you do not define a default culture for the current app domain, the CultureInfo.CurrentUICulture property is set implicitly by the Windows GetUserDefaultUILanguage function. この関数は Multilingual User Interface (MUI) によって提供されます。MUI は、ユーザーが既定の言語を設定できるようにします。This function is provided by the Multilingual User Interface (MUI), which enables the user to set the default language. UI 言語がユーザーによって設定されていない場合、その既定値はシステムによってインストールされた言語になります。これはオペレーティング システムのリソースの言語です。If the UI language is not set by the user, it defaults to the system-installed language, which is the language of operating system resources.

次の単純な "Hello world" の例では、現在の UI カルチャを明示的に設定します。The following simple "Hello world" example sets the current UI culture explicitly. これには、英語 (米国) (en-US)、フランス語 (フランス) (fr-FR)、およびロシア語 (ロシア) (ru-RU) の 3 つのカルチャのリソースが含まれています。It contains resources for three cultures: English (United States) or en-US, French (France) or fr-FR, and Russian (Russia) or ru-RU. en-US のリソースは、Greetings.txt という名前のテキスト ファイルに含まれています。The en-US resources are contained in a text file named Greetings.txt:

HelloString=Hello world!  

fr-FR のリソースは、Greetings.fr-FR.txt という名前のテキスト ファイルに含まれています。The fr-FR resources are contained in a text file named Greetings.fr-FR.txt:

HelloString=Salut tout le monde!  

ru-RU のリソースは、Greetings.ru-RU.txt という名前のテキスト ファイルに含まれています。The ru-RU resources are contained in a text file named Greetings.ru-RU.txt:

HelloString=Всем привет!  

次に、この例のソース コード (Visual Basic バージョンの Example.vb または C# バージョンの Example.cs) を示します。Here's the source code for the example (Example.vb for the Visual Basic version or Example.cs for the C# version):

using System;
using System.Globalization;
using System.Resources;
using System.Threading;

public class Example
{
   public static void Main()
   {
      // Create array of supported cultures
      string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU" };
      Random rnd = new Random();
      int cultureNdx = rnd.Next(0, cultures.Length);
      CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
      ResourceManager rm = new ResourceManager("Greetings", typeof(Example).Assembly);
      try {
         CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]);
         Thread.CurrentThread.CurrentCulture = newCulture;
         Thread.CurrentThread.CurrentUICulture = newCulture;
         string greeting = String.Format("The current culture is {0}.\n{1}",
                                         Thread.CurrentThread.CurrentUICulture.Name,
                                         rm.GetString("HelloString"));
         Console.WriteLine(greeting);
      }
      catch (CultureNotFoundException e) {
         Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName);
      }
      finally {
         Thread.CurrentThread.CurrentCulture = originalCulture;
         Thread.CurrentThread.CurrentUICulture = originalCulture;
      }
   }
}
// The example displays output like the following:
//       The current culture is ru-RU.
//       Всем привет!
Imports System.Globalization
Imports System.Resources
Imports System.Threading

Module Example
   Sub Main()
      ' Create array of supported cultures
      Dim cultures() As String = {"en-CA", "en-US", "fr-FR", "ru-RU" }
      Dim rnd As New Random()
      Dim cultureNdx As Integer = rnd.Next(0, cultures.Length)
      Dim originalCulture As CultureInfo = Thread.CurrentThread.CurrentCulture
      Dim rm As New ResourceManager("Greetings", GetType(Example).Assembly)
      Try
         Dim newCulture As New CultureInfo(cultures(cultureNdx))
         Thread.CurrentThread.CurrentCulture = newCulture
         Thread.CurrentThread.CurrentUICulture = newCulture
         Dim greeting As String = String.Format("The current culture is {0}.{1}{2}",
                                                Thread.CurrentThread.CurrentUICulture.Name,
                                                vbCrLf, rm.GetString("HelloString"))

         Console.WriteLine(greeting)
      Catch e As CultureNotFoundException
         Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName)
      Finally
         Thread.CurrentThread.CurrentCulture = originalCulture
         Thread.CurrentThread.CurrentUICulture = originalCulture
      End Try
   End Sub
End Module
' The example displays output like the following:
'       The current culture is ru-RU.
'       Всем привет!

この例をコンパイルするには、次のコマンドを含むバッチ (.bat) ファイルを作成し、コマンド プロンプトからそれを実行します。To compile this example, create a batch (.bat) file that contains the following commands and run it from the command prompt. C# を使用している場合は、vbc の代わりに csc を指定し、Example.vb の代わりに Example.cs を指定します。If you're using C#, specify csc instead of vbc and Example.cs instead of Example.vb.

resgen Greetings.txt   
vbc Example.vb /resource:Greetings.resources  

resgen Greetings.fr-FR.txt  
Md fr-FR  
al /embed:Greetings.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll  

resgen Greetings.ru-RU.txt  
Md ru-RU  
al /embed:Greetings.ru-RU.resources /culture:ru-RU /out:ru-RU\Example.resources.dll  

リソースの取得Retrieving Resources

特定のリソースにアクセスするには、GetObject(String)GetString(String) メソッドを呼び出します。You call the GetObject(String) and GetString(String) methods to access a specific resource. GetStream(String) メソッドを呼び出して、文字列以外のリソースをバイト配列として取得することもできます。You can also call the GetStream(String) method to retrieve non-string resources as a byte array. 既定では、リソースがローカライズされているアプリでは、これらのメソッドは、呼び出しを行ったスレッドの現在の UI カルチャによって決定されるカルチャのリソースを返します。By default, in an app that has localized resources, these methods return the resource for the culture determined by the current UI culture of the thread that made the call. スレッドの現在の UI カルチャを定義する方法の詳細については、前のセクションの ResourceManager とカルチャ固有のリソースを参照してください。See the previous section, ResourceManager and Culture-Specific Resources, for more information about how the current UI culture of a thread is defined. リソース マネージャーが現在のスレッドの UI カルチャのリソースを見つけられない場合は、フォールバック プロセスを使用して、指定したリソースを取得します。If the resource manager cannot find the resource for the current thread's UI culture, it uses a fallback process to retrieve the specified resource. リソース マネージャーがローカライズされたリソースを何も見つけられない場合は、既定のカルチャのリソースを使用します。If the resource manager cannot find any localized resources, it uses the resources of the default culture. リソース フォールバック規則の詳細については、リソースのパッケージ化と配置の記事内の「リソース フォールバック プロセス」セクションを参照してください。For more information about resource fallback rules, see the "Resource Fallback Process" section of the article Packaging and Deploying Resources.

注意

ResourceManager クラスのコンストラクターで指定された .resources ファイルが見つからない場合、リソースを取得しようとすると、MissingManifestResourceException または MissingSatelliteAssemblyException 例外がスローされます。If the .resources file specified in the ResourceManager class constructor cannot be found, the attempt to retrieve a resource throws a MissingManifestResourceException or MissingSatelliteAssemblyException exception. 例外に対処する方法については、この記事で後述する MissingManifestResourceException および MissingSatelliteAssemblyException 例外の処理を参照してください。For information about dealing with the exception, see the Handling MissingManifestResourceException and MissingSatelliteAssemblyException Exceptions section later in this topic.

次の例では、GetString メソッドを使用して、カルチャ固有のリソースを取得します。The following example uses the GetString method to retrieve culture-specific resources. これは、英語 (en)、フランス語 (フランス) (fr-FR)、およびロシア語 (ロシア) (ru-RU) の .txt ファイルからコンパイルされたリソースで構成されます。It consists of resources compiled from .txt files for the English (en), French (France) (fr-FR), and Russian (Russia) (ru-RU) cultures. 例では、現在のカルチャと現在の UI カルチャを、英語 (米国)、フランス語 (フランス)、ロシア語 (ロシア)、およびスウェーデン語 (スウェーデン) に変更します。The example changes the current culture and current UI culture to English (United States), French (France), Russian (Russia), and Swedish (Sweden). それから、GetString メソッドを呼び出して、ローカライズされた文字列を取得します。この文字列は現在の日付と月と一緒に表示されます。It then calls the GetString method to retrieve the localized string, which it displays along with the current day and month. 現在の UI カルチャがスウェーデン語 (スウェーデン) である場合を除き、適切なローカライズされた文字列が出力に表示されることに注意してください。Notice that the output displays the appropriate localized string except when the current UI culture is Swedish (Sweden). スウェーデン語の言語リソースが利用できないため、アプリは代わりに既定のカルチャである英語のリソースを使用します。Because Swedish language resources are unavailable, the app instead uses the resources of the default culture, which is English.

例には、次の表に記載されたテキスト ベースのリソース ファイルが必要です。The example requires the text-based resource files listed in following table. それぞれには DateStart という名前の唯一の文字列リソースがあります。Each has a single string resource named DateStart.

カルチャCulture ファイル名File name リソース名Resource name リソースの値Resource value
en-USen-US DateStrings.txtDateStrings.txt DateStart Today isToday is
fr-FRfr-FR DateStrings.fr-FR.txtDateStrings.fr-FR.txt DateStart Aujourd'hui, c'est leAujourd'hui, c'est le
ru-RUru-RU DateStrings.ru-RU.txtDateStrings.ru-RU.txt DateStart СегодняСегодня

次に、この例のソース コード (Visual Basic バージョンの ShowDate.vb または C# バージョンの ShowDate.cs) を示します。Here's the source code for the example (ShowDate.vb for the Visual Basic version or ShowDate.cs for the C# version of the code).

using System;
using System.Globalization;
using System.Resources;
using System.Threading;

[assembly:NeutralResourcesLanguage("en")]

public class Example
{
   public static void Main()
   {
      string[] cultureNames = { "en-US", "fr-FR", "ru-RU", "sv-SE" };
      ResourceManager rm = new ResourceManager("DateStrings",
                                               typeof(Example).Assembly);
      
      foreach (var cultureName in cultureNames) {
         CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
         Thread.CurrentThread.CurrentCulture = culture; 
         Thread.CurrentThread.CurrentUICulture = culture;

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name);
         string dateString = rm.GetString("DateStart");
         Console.WriteLine("{0} {1:M}.\n", dateString, DateTime.Now);                           
      }                                           
   }
}
// The example displays output similar to the following:
//       Current UI Culture: en-US
//       Today is February 03.
//       
//       Current UI Culture: fr-FR
//       Aujourd'hui, c'est le 3 février
//       
//       Current UI Culture: ru-RU
//       Сегодня февраля 03.
//       
//       Current UI Culture: sv-SE
//       Today is den 3 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

<Assembly:NeutralResourcesLanguage("en")>

Module Example
   Public Sub Main()
      Dim cultureNames() As String = { "en-US", "fr-FR", "ru-RU", "sv-SE" }
      Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)
      
      For Each cultureName In cultureNames
         Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
         Thread.CurrentThread.CurrentCulture = culture 
         Thread.CurrentThread.CurrentUICulture = culture

         Console.WriteLine("Current UI Culture: {0}", 
                           CultureInfo.CurrentUICulture.Name)
         Dim dateString As String = rm.GetString("DateStart")
         Console.WriteLine("{0} {1:M}.", dateString, Date.Now)                           
         Console.WriteLine()
      Next                                           
   End Sub
End Module
' The example displays output similar to the following:
'       Current UI Culture: en-US
'       Today is February 03.
'       
'       Current UI Culture: fr-FR
'       Aujourd'hui, c'est le 3 février
'       
'       Current UI Culture: ru-RU
'       Сегодня февраля 03.
'       
'       Current UI Culture: sv-SE
'       Today is den 3 februari.

この例をコンパイルするには、次のコマンドを含むバッチ ファイルを作成し、コマンド プロンプトからそれを実行します。To compile this example, create a batch file that contains the following commands and run it from the command prompt. C# を使用している場合は、vbc の代わりに csc を指定し、showdate.vb の代わりに showdate.cs を指定します。If you're using C#, specify csc instead of vbc and showdate.cs instead of showdate.vb.


resgen DateStrings.txt  
vbc showdate.vb /resource:DateStrings.resources  

md fr-FR  
resgen DateStrings.fr-FR.txt  
al /out:fr-FR\Showdate.resources.dll /culture:fr-FR /embed:DateStrings.fr-FR.resources   

md ru-RU  
resgen DateStrings.ru-RU.txt  
al /out:ru-RU\Showdate.resources.dll /culture:ru-RU /embed:DateStrings.ru-RU.resources  

現在の UI カルチャ以外の特定のカルチャのリソースを取得する方法は 2 つあります。There are two ways to retrieve the resources of a specific culture other than the current UI culture:

  • GetString(String, CultureInfo)GetObject(String, CultureInfo)、またはGetStream(String, CultureInfo) メソッドを呼び出して、指定したカルチャのリソースを取得できます。You can call the GetString(String, CultureInfo), GetObject(String, CultureInfo), or GetStream(String, CultureInfo) method to retrieve a resource for a specific culture. ローカライズされたリソースが見つからない場合、リソース マネージャーはリソース フォールバック プロセスを使用して、適切なリソースを見つけます。If a localized resource cannot be found, the resource manager uses the resource fallback process to locate an appropriate resource.

  • GetResourceSet メソッドを呼び出して、特定のカルチャのリソースを表す ResourceSet オブジェクトを取得できます。You can call the GetResourceSet method to obtain a ResourceSet object that represents the resources for a particular culture. メソッドの呼び出しでは、ローカライズされたリソースが見つからない場合に、親カルチャのリソース マネージャーのプローブを作成するかどうかや、単純に既定のカルチャのリソースにフォールバックするかどうかを指定できます。In the method call, you can determine whether the resource manager probes for parent cultures if it is unable to find localized resources, or whether it simply falls back to the resources of the default culture. その後、ResourceSet のメソッドを使用して、(そのカルチャに向けてローカライズされた) リソースに名前でアクセスしたり、または、セット内のリソースを列挙したりできます。You can then use the ResourceSet methods to access the resources (localized for that culture) by name, or to enumerate the resources in the set.

MissingManifestResourceException および MissingSatelliteAssemblyException 例外の処理Handling MissingManifestResourceException and MissingSatelliteAssemblyException Exceptions

特定のリソースを取得しようとしても、リソース マネージャーがそのリソースを見つけられないときに、既定のカルチャが定義されていないか、または既定のカルチャのリソースが見つからない場合、リソース マネージャーは、メイン アセンブリにリソースを探しているなら、MissingManifestResourceException 例外をスローし、サテライト アセンブリにリソースを探しているなら、MissingSatelliteAssemblyException 例外をスローします。If you try to retrieve a specific resource, but the resource manager cannot find that resource and either no default culture has been defined or the resources of the default culture cannot be located, the resource manager throws a MissingManifestResourceException exception if it expects to find the resources in the main assembly or a MissingSatelliteAssemblyException if it expects to find the resources in a satellite assembly. 例外がスローされるのは、GetStringGetObject などのリソース取得メソッドを呼び出すときであり、ResourceManager オブジェクトをインスタンス化するときではないことに注意してください。Note that the exception is thrown when you call a resource retrieval method such as GetString or GetObject, and not when you instantiate a ResourceManager object.

次の条件下では、通常、例外がスローされます。The exception is typically thrown under the following conditions:

  • 適切なリソース ファイルまたはサテライト アセンブリが存在しません。The appropriate resource file or satellite assembly does not exist. リソース マネージャーによって、アプリの既定のリソースがメイン アプリ アセンブリに埋め込まれていることが期待される場合に、それらが存在しません。If the resource manager expects the app's default resources to be embedded in the main app assembly, they are absent. NeutralResourcesLanguageAttribute 属性によって、アプリの既定のリソースがサテライト アセンブリに存在することが指示されている場合に、そのアセンブリが見つかりません。If the NeutralResourcesLanguageAttribute attribute indicates that the app's default resources reside in a satellite assembly, that assembly cannot be found. アプリをコンパイルするときに、リソースがメイン アセンブリに埋め込まれているか、あるいは必要なサテライト アセンブリが生成され、適切な名前がついていることを確認します。When you compile your app, make sure that resources are embedded in the main assembly or that the necessary satellite assembly is generated and is named appropriately. その名前は appName.resources.dll の形式をとる必要があります。また、含まれているリソースのカルチャに基づいて名前をつけたディレクトリに配置する必要があります。Its name should take the form appName.resources.dll, and it should be located in a directory named after the culture whose resources it contains.

  • アプリに既定のカルチャ、あるいはニュートラル カルチャがありません。Your app doesn't have a default or neutral culture defined. ソース コード ファイルまたはプロジェクトの情報ファイル (Visual Basic アプリでは AssemblyInfo.vb、C# アプリでは AssemblyInfo.cs) に NeutralResourcesLanguageAttribute 属性を追加します。Add the NeutralResourcesLanguageAttribute attribute to a source code file or to the project information file (AssemblyInfo.vb for a Visual Basic app or AssemblyInfo.cs for a C# app) file.

  • ResourceManager(String, Assembly) コンストラクターの baseName パラメーターに .resources ファイルの名前が指定されていません。The baseName parameter in the ResourceManager(String, Assembly) constructor does not specify the name of a .resources file. 名前には、リソース ファイルの完全修飾名前空間を含める必要がありますが、そのファイル名拡張子は不要です。The name should include the resource file's fully qualified namespace but not its file name extension. 通常、Visual Studio で作成されるリソース ファイルは名前空間の名前を含みますが、コマンド プロンプトで作成されコンパイルされたリソース ファイルはそれを含みません。Typically, resource files that are created in Visual Studio include namespace names, but resource files that are created and compiled at the command prompt do not. 次のユーティリティをコンパイルして実行すると、埋め込まれた .resources ファイルの名前を判断できます。You can determine the names of embedded .resources files by compiling and running the following utility. これは、メイン アセンブリまたはサテライト アセンブリの名前をコマンド ライン パラメーターとして指定するコンソール アプリです。This is a console app that accepts the name of a main assembly or satellite assembly as a command-line parameter. これは、リソース マネージャーがリソースを正しく特定できるように、baseName パラメーターに指定するべき文字列を表示します。It displays the strings that should be provided as the baseName parameter so that the resource manager can correctly identify the resource.

    using System;
    using System.IO;
    using System.Reflection;
    using System.Resources;
    
    public class Example
    {
       public static void Main()
       {
          if (Environment.GetCommandLineArgs().Length == 1) { 
             Console.WriteLine("No filename.");
             return;
          }
          
          string filename = Environment.GetCommandLineArgs()[1].Trim();
          // Check whether the file exists.
          if (! File.Exists(filename)) {
             Console.WriteLine("{0} does not exist.", filename);
             return;
          }   
          
          // Try to load the assembly.
          Assembly assem = Assembly.LoadFrom(filename);
          Console.WriteLine("File: {0}", filename);
             
          // Enumerate the resource files.
          string[] resNames = assem.GetManifestResourceNames();
          if (resNames.Length == 0)
             Console.WriteLine("   No resources found.");
    
          foreach (var resName in resNames)
             Console.WriteLine("   Resource: {0}", resName.Replace(".resources", ""));
    
          Console.WriteLine();
       }
    }
    
    Imports System.IO
    Imports System.Reflection
    Imports System.Resources
     
    Module Example
       Public Sub Main()
          If Environment.GetCommandLineArgs.Length = 1 Then 
             Console.WriteLine("No filename.")
             Exit Sub
          End If
          Dim filename As String = Environment.GetCommandLineArgs(1).Trim()
          ' Check whether the file exists.
          If Not File.Exists(filename) Then
             Console.WriteLine("{0} does not exist.", filename)
             Exit Sub
          End If   
          
          ' Try to load the assembly.
          Dim assem As Assembly = Assembly.LoadFrom(filename)
          Console.WriteLine("File: {0}", filename)
             
          ' Enumerate the resource files.
          Dim resNames() As String = assem.GetManifestResourceNames()
          If resNames.Length = 0 Then
             Console.WriteLine("   No resources found.")
          End If
          For Each resName In resNames
             Console.WriteLine("   Resource: {0}", resName.Replace(".resources", ""))
          Next
          Console.WriteLine()
       End Sub
    End Module
    

アプリケーションの現在のカルチャを明示的に変更する場合、リソース マネージャーは CultureInfo.CurrentUICulture プロパティではなく CultureInfo.CurrentCulture プロパティの値に基づいてリソース セットを取得することも覚えておいてください。If you are changing the current culture of your application explicitly, you should also remember that the resource manager retrieves a resource set based on the value of the CultureInfo.CurrentUICulture property, and not the CultureInfo.CurrentCulture property. 通常は、一方の値を変更するなら、もう一方も変更する必要があります。Typically, if you change one value, you should also change the other.

リソースのバージョン管理Resource Versioning

アプリの既定のリソースを含むメイン アセンブリは、アプリのサテライト アセンブリから切り離されているため、サテライト アセンブリを再配置せずに、メイン アセンブリの新しいバージョンをリリースできます。Because the main assembly that contains an app's default resources is separate from the app's satellite assemblies, you can release a new version of your main assembly without redeploying the satellite assemblies. 既存のサテライト アセンブリを使用し、メイン アセンブリの新しいバージョンと一緒にそれらを再配置しないようにリソース マネージャーに指示するためには、SatelliteContractVersionAttribute 属性を使用します。You use the SatelliteContractVersionAttribute attribute to use existing satellite assemblies and instruct the resource manager not to redeploy them with a new version of your main assembly,

サテライト アセンブリのバージョン管理サポートの詳細については、リソースの取得の記事を参照してください。For more information about versioning support for satellite assemblies, see the article Retrieving Resources.

<satelliteassemblies> 構成ファイルのノード<satelliteassemblies> Configuration File Node

Web サイト (HREF .exe ファイル) から展開と実行がされる実行可能ファイルの場合、ResourceManager オブジェクトは Web 経由でサテライト アセンブリのプローブを作成する可能性があり、アプリのパフォーマンスが低下することがあります。For executables that are deployed and run from a website (HREF .exe files), the ResourceManager object may probe for satellite assemblies over the web, which can hurt your app's performance. パフォーマンスの問題を排除するために、アプリと一緒に配置したサテライト アセンブリへのプローブを制限できます。To eliminate the performance problem, you can limit this probing to the satellite assemblies that you have deployed with your app. これを行うには、アプリの構成ファイル内に <satelliteassemblies> ノードを作成し、アプリの特定のカルチャのセットを配置したことと、ResourceManager オブジェクトがそのノードに示されていないカルチャのプローブを作成するべきではないことを指定します。To do this, you create a <satelliteassemblies> node in your app's configuration file to specify that you have deployed a specific set of cultures for your app, and that the ResourceManager object should not try to probe for any culture that is not listed in that node.

注意

<satelliteassemblies> ノードの作成より推奨される方法は、ClickOnce 配置マニフェストの機能を使用することです。The preferred alternative to creating a <satelliteassemblies> node is to use the ClickOnce Deployment Manifest feature.

アプリの構成ファイルで、次のようなセクションを作成します。In your app's configuration file, create a section similar to the following:

<?xml version ="1.0"?>  
<configuration>  
    <satelliteassemblies>  
        <assembly name="MainAssemblyName, Version=versionNumber, Culture=neutral, PublicKeyToken=null|yourPublicKeyToken">  
            <culture>cultureName1</culture>  
            <culture>cultureName2</culture>  
            <culture>cultureName3</culture>  
        </assembly>  
    </satelliteassemblies>  
</configuration>  

この構成情報は次のように編集します。Edit this configuration information as follows:

  • 配置するメイン アセンブリごとに <assembly> ノードを 1 つ以上指定し、各ノードで完全修飾アセンブリ名を指定します。Specify one or more <assembly> nodes for each main assembly that you deploy, where each node specifies a fully qualified assembly name. MainAssemblyName の場所にメイン アセンブリの名前を指定し、メイン アセンブリに対応する VersionPublicKeyToken、および Culture 属性の値を指定します。Specify the name of your main assembly in place of MainAssemblyName, and specify the Version, PublicKeyToken, and Culture attribute values that correspond to your main assembly.

    Version 属性には、アセンブリのバージョン番号を指定します。For the Version attribute, specify the version number of your assembly. たとえば、アセンブリの最初のリリースでは、バージョン番号は 1.0.0.0 になるでしょう。For example, the first release of your assembly might be version number 1.0.0.0.

    PublicKeyToken 属性には、厳密な名前でアセンブリに署名していない場合は、キーワード null を指定し、アセンブリに署名した場合は、公開キー トークンを指定します。For the PublicKeyToken attribute, specify the keyword null if you have not signed your assembly with a strong name, or specify your public key token if you have signed your assembly.

    Culture 属性には、メイン アセンブリを指定するためにキーワード neutral を指定し、ResourceManager クラスが <culture> ノードに示されているカルチャに対してのみプローブを作成するようにします。For the Culture attribute, specify the keyword neutral to designate the main assembly and cause the ResourceManager class to probe only for the cultures listed in the <culture> nodes.

    完全修飾アセンブリ名の詳細については、アセンブリ名の記事を参照してください。For more information about fully qualified assembly names, see the article Assembly Names. 厳密な名前付きアセンブリの詳細については、厳密な名前付きアセンブリの作成と使用の記事を参照してください。For more information about strong-named assemblies, see the article Creating and Using Strong-Named Assemblies.

  • "fr-FR" などの特定のカルチャ名、または "fr" などのニュートラル カルチャ名を持つ <culture> ノードを 1 つ以上指定します。Specify one or more <culture> nodes with a specific culture name, such as "fr-FR", or a neutral culture name, such as "fr".

<satelliteassemblies> ノード下に示されていないアセンブリにリソースが必要な場合、ResourceManager クラスは標準のプローブ規則を使用してカルチャにプローブを作成します。If resources are needed for any assembly not listed under the <satelliteassemblies> node, the ResourceManager class probes for cultures using standard probing rules.

Windows 8.x ストアWindows 8.x Store アプリApps

重要

ResourceManager クラスは Windows 8.x ストアWindows 8.x Store アプリでサポートされていますが、その使用は推奨されていません。Although the ResourceManager class is supported in Windows 8.x ストアWindows 8.x Store apps, we do not recommend its use. ポータブル クラス ライブラリPortable Class Library アプリで使用できるWindows 8.x ストアWindows 8.x Storeを開発する場合にのみ、このクラスを使用します。Use this class only when you develop ポータブル クラス ライブラリPortable Class Library projects that can be used with Windows 8.x ストアWindows 8.x Store apps. Windows 8.x ストアWindows 8.x Store アプリのリソースを取得するには、Windows.ApplicationModel.Resources.ResourceLoader クラスを代わりに使用します。To retrieve resources from Windows 8.x ストアWindows 8.x Store apps, use the Windows.ApplicationModel.Resources.ResourceLoader class instead.

Windows 8.x ストアWindows 8.x Store アプリでは、ResourceManager クラスはパッケージ リソース インデックス (PRI) ファイルからリソースを取得します。For Windows 8.x ストアWindows 8.x Store apps, the ResourceManager class retrieves resources from package resource index (PRI) files. 単一の PRI ファイル (アプリケーション パッケージの PRI ファイル) には、既定のカルチャとすべてのローカライズされたリソースの両方が含まれています。A single PRI file (the application package PRI file) contains the resources for both the default culture and any localized cultures. 1 つ以上の XML リソース (.resw) 形式のリソース ファイルから PRI ファイルを作成するには、MakePRI ユーティリティを使用します。You use the MakePRI utility to create a PRI file from one or more resource files that are in XML resource (.resw) format. Visual Studio プロジェクトに含まれているリソースは、Visual Studio が自動的に PRI ファイルの作成とパッケージ化のプロセスを処理します。For resources that are included in a Visual Studio project, Visual Studio handles the process of creating and packaging the PRI file automatically. その後、.NET Framework の ResourceManager クラスを使用して、アプリやライブラリのリソースにアクセスできます。You can then use the .NET Framework ResourceManager class to access the app's or library's resources.

Windows 8.x ストアWindows 8.x Store アプリでは、デスクトップ アプリの場合と同じ方法で ResourceManager オブジェクトのインスタンスを作成できます。You can instantiate a ResourceManager object for a Windows 8.x ストアWindows 8.x Store app in the same way that you do for a desktop app.

それから、GetString(String) メソッドに取得するリソースの名前を渡すことによって、特定のカルチャのリソースにアクセスすることができます。You can then access the resources for a particular culture by passing the name of the resource to be retrieved to the GetString(String) method. 既定では、このメソッドは、呼び出しを行ったスレッドの現在の UI カルチャによって決定されるカルチャのリソースを返します。By default, this method returns the resource for the culture determined by the current UI culture of the thread that made the call. リソースの名前と、取得するリソースのカルチャを表す CultureInfo オブジェクトを GetString(String, CultureInfo) メソッドに渡すことによって、特定のカルチャのリソースも取得できます。You can also retrieve the resources for a specific culture by passing the name of the resource and a CultureInfo object that represents the culture whose resource is to be retrieved to the GetString(String, CultureInfo) method. 現在の UI カルチャまたは指定したカルチャのリソースが見つからない場合、リソース マネージャーは UI 言語フォールバック リストを使用して、適切なリソースを見つけます。If the resource for the current UI culture or the specified culture cannot be found, the resource manager uses a UI language fallback list to locate a suitable resource.

コンストラクター

ResourceManager() ResourceManager() ResourceManager() ResourceManager()

ResourceManager クラスの新しいインスタンスを既定値で初期化します。Initializes a new instance of the ResourceManager class with default values.

ResourceManager(String, Assembly) ResourceManager(String, Assembly) ResourceManager(String, Assembly) ResourceManager(String, Assembly)

指定したアセンブリ内で指定したルート名を持つファイルに含まれているリソースを検索する ResourceManager クラスの新しいインスタンスを初期化します。Initializes a new instance of the ResourceManager class that looks up resources contained in files with the specified root name in the given assembly.

ResourceManager(String, Assembly, Type) ResourceManager(String, Assembly, Type) ResourceManager(String, Assembly, Type) ResourceManager(String, Assembly, Type)

指定した ResourceSet クラスを使用して、指定したアセンブリ内で指定したルート名を持つファイルに含まれるリソースを検索する ResourceManager クラスの新しいインスタンスを初期化します。Initializes a new instance of the ResourceManager class that uses a specified ResourceSet class to look up resources contained in files with the specified root name in the given assembly.

ResourceManager(Type) ResourceManager(Type) ResourceManager(Type) ResourceManager(Type)

指定した型オブジェクトの情報に基づいて、サテライト アセンブリでリソースを検索する ResourceManager クラスの新しいインスタンスを初期化します。Initializes a new instance of the ResourceManager class that looks up resources in satellite assemblies based on information from the specified type object.

フィールド

BaseNameField BaseNameField BaseNameField BaseNameField

ResourceManager がリソースを検索するリソース ファイルのルート名を指定します。Specifies the root name of the resource files that the ResourceManager searches for resources.

HeaderVersionNumber HeaderVersionNumber HeaderVersionNumber HeaderVersionNumber

ResourceManager の現在の実装が解釈および作成できるリソース ファイル ヘッダーのバージョンを指定します。Specifies the version of resource file headers that the current implementation of ResourceManager can interpret and produce.

MagicNumber MagicNumber MagicNumber MagicNumber

リソース ファイルを識別するために使用する番号を保持します。Holds the number used to identify resource files.

MainAssembly MainAssembly MainAssembly MainAssembly

リソースを含むメイン アセンブリを指定します。Specifies the main assembly that contains the resources.

ResourceSets ResourceSets ResourceSets ResourceSets

カルチャから Hashtable オブジェクトへの割り当てを返す ResourceSet を格納します。Contains a Hashtable that returns a mapping from cultures to ResourceSet objects.

プロパティ

BaseName BaseName BaseName BaseName

ResourceManager がリソースを検索するリソース ファイルのルート名を取得します。Gets the root name of the resource files that the ResourceManager searches for resources.

FallbackLocation FallbackLocation FallbackLocation FallbackLocation

既定のフォールバック リソースの取得元の場所を取得または設定します。Gets or sets the location from which to retrieve default fallback resources.

IgnoreCase IgnoreCase IgnoreCase IgnoreCase

リソース マネージャーが GetString(String) メソッドと GetObject(String) メソッドで大文字と小文字を区別しないリソースの検索を許可しているかどうかを示す値を取得または設定します。Gets or sets a value that indicates whether the resource manager allows case-insensitive resource lookups in the GetString(String) and GetObject(String) methods.

ResourceSetType ResourceSetType ResourceSetType ResourceSetType

ResourceSet オブジェクトの構築にリソース マネージャーが使用するリソース セット オブジェクトの型を取得します。Gets the type of the resource set object that the resource manager uses to construct a ResourceSet object.

メソッド

CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type) CreateFileBasedResourceManager(String, String, Type)

リソースのアセンブリ マニフェストではなく特定のディレクトリを検索する ResourceManager オブジェクトを返します。Returns a ResourceManager object that searches a specific directory instead of an assembly manifest for resources.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly) GetNeutralResourcesLanguage(Assembly)

指定したアセンブリで NeutralResourcesLanguageAttribute 属性の値を取得して、メイン アセンブリの既定のリソースのカルチャ固有の情報を返します。Returns culture-specific information for the main assembly's default resources by retrieving the value of the NeutralResourcesLanguageAttribute attribute on a specified assembly.

GetObject(String) GetObject(String) GetObject(String) GetObject(String)

指定した文字列以外のリソースの値を返します。Returns the value of the specified non-string resource.

GetObject(String, CultureInfo) GetObject(String, CultureInfo) GetObject(String, CultureInfo) GetObject(String, CultureInfo)

指定されたカルチャ用にローカライズされている指定された文字列以外のリソースの値を取得します。Gets the value of the specified non-string resource localized for the specified culture.

GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo) GetResourceFileName(CultureInfo)

指定した CultureInfo オブジェクトのリソース ファイルの名前を生成します。Generates the name of the resource file for the given CultureInfo object.

GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean) GetResourceSet(CultureInfo, Boolean, Boolean)

特定のカルチャのリソース セットを取得します。Retrieves the resource set for a particular culture.

GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly) GetSatelliteContractVersion(Assembly)

指定したアセンブリの SatelliteContractVersionAttribute 属性で指定されたバージョンを返します。Returns the version specified by the SatelliteContractVersionAttribute attribute in the given assembly.

GetStream(String) GetStream(String) GetStream(String) GetStream(String)

指定したリソースからアンマネージ メモリ ストリーム オブジェクトを返します。Returns an unmanaged memory stream object from the specified resource.

GetStream(String, CultureInfo) GetStream(String, CultureInfo) GetStream(String, CultureInfo) GetStream(String, CultureInfo)

指定したカルチャを使用し、指定したリソースからアンマネージ メモリ ストリーム オブジェクトを返します。Returns an unmanaged memory stream object from the specified resource, using the specified culture.

GetString(String) GetString(String) GetString(String) GetString(String)

指定されている文字列リソースの値を返します。Returns the value of the specified string resource.

GetString(String, CultureInfo) GetString(String, CultureInfo) GetString(String, CultureInfo) GetString(String, CultureInfo)

指定したカルチャにローカライズされている文字列リソースの値を返します。Returns the value of the string resource localized for the specified culture.

GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean) InternalGetResourceSet(CultureInfo, Boolean, Boolean)

リソース セットを検索するための実装を提供します。Provides the implementation for finding a resource set.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ReleaseAllResources() ReleaseAllResources() ReleaseAllResources() ReleaseAllResources()

リソース マネージャーに、すべての Close() オブジェクトの ResourceSet メソッドを呼び出し、すべてのリソースを解放するように指示します。Tells the resource manager to call the Close() method on all ResourceSet objects and release all resources.

ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)

適用対象

スレッド セーフ

この型はスレッド セーフです。This type is thread safe.

こちらもご覧ください