.NET アプリのリソースResources in .NET apps

ほとんどの製品レベルのアプリでは、リソースを使用する必要があります。Nearly every production-quality app has to use resources. リソースとは、アプリと共に論理的に配置される、実行不可能な任意のデータです。A resource is any nonexecutable data that is logically deployed with an app. リソースは、アプリ内でエラー メッセージとして表示されたり、ユーザー インターフェイスの一部として表示されたりします。A resource might be displayed in an app as error messages or as part of the user interface. リソースには、文字列、画像、永続化されたオブジェクトなど、多数の形式のデータを含めることができます。Resources can contain data in a number of forms, including strings, images, and persisted objects. (永続化されたオブジェクトをリソース ファイルに書き込むには、そのオブジェクトをシリアル化できる必要があります。) データをリソース ファイルに格納しておけば、アプリ全体を再コンパイルすることなくデータを変更できます。(To write persisted objects to a resource file, the objects must be serializable.) Storing your data in a resource file enables you to change the data without recompiling your entire app. また、データの格納場所が 1 つになり、複数の場所に格納されているハードコーディングされたデータを利用する必要がなくなります。It also enables you to store data in a single location, and eliminates the need to rely on hard-coded data that is stored in multiple locations.

.NET Framework および .NET Core では、リソースの作成とローカライズが包括的にサポートされます。The .NET Framework and .NET Core provide comprehensive support for the creation and localization of resources. さらに、.NET では、ローカライズされたリソースのパッケージ化および配置のためのシンプルなモデルがサポートされています。In addition, .NET supports a simple model for packaging and deploying localized resources.

ASP.NET のリソースについては、「ASP.NET Web ページのリソースの概要」を参照してください。For information about resources in ASP.NET, see ASP.NET Web Page Resources Overview.

リソースを作成してローカライズするCreate and localize resources

ローカライズされていないアプリでは、リソース ファイルをアプリ データ、特にソース コード内の複数の場所にハードコーディングされる可能性がある文字列のリポジトリとして使用できます。In a non-localized app, you can use resource files as a repository for app data, particularly for strings that might otherwise be hard-coded in multiple locations in source code. ほとんどの場合、リソースはテキスト (.txt) ファイルまたは XML (.resx) ファイルとして作成し、Resgen.exe (リソース ファイル ジェネレーター) を使用して .resources バイナリ ファイルにコンパイルします。Most commonly, you create resources as either text (.txt) or XML (.resx) files, and use Resgen.exe (Resource File Generator) to compile them into binary .resources files. その後、これらのファイルを、言語コンパイラによってアプリの実行可能ファイルに埋め込むことができます。These files can then be embedded in the app's executable file by a language compiler. リソースの作成の詳細については、リソース ファイルの作成に関する記事を参照してください。For more information about creating resources, see Creating Resource Files.

アプリのリソースを特定のカルチャに合わせてローカライズすることもできます。You can also localize your app's resources for specific cultures. これにより、アプリのローカライズ (翻訳) バージョンを構築できます。This enables you to build localized (translated) versions of your apps. ローカライズされたリソースを使用するアプリを開発する場合、ニュートラル カルチャまたはフォールバック カルチャとして使用するカルチャを指定します。適切なリソースを利用できない場合には、そのカルチャのリソースが使用されます。When you develop an app that uses localized resources, you designate a culture that serves as the neutral or fallback culture whose resources are used if no suitable resources are available. 一般に、ニュートラル カルチャのリソースはアプリの実行可能ファイルに格納されます。Typically, the resources of the neutral culture are stored in the app's executable. 個々のローカライズされたカルチャ用のその他のリソースは、スタンドアロンのサテライト アセンブリに格納されます。The remaining resources for individual localized cultures are stored in standalone satellite assemblies. 詳細については、サテライト アセンブリの作成に関する記事を参照してください。For more information, see Creating Satellite Assemblies.

リソースをパッケージ化して配置するPackage and deploy resources

ローカライズされたアプリ リソースはサテライト アセンブリに配置します。You deploy localized app resources in satellite assemblies. サテライト アセンブリには 1 つのカルチャのリソースが含まれます。アプリ コードは含まれません。A satellite assembly contains the resources of a single culture; it does not contain any app code. サテライト アセンブリの配置モデルでは、1 つの既定アセンブリ (一般的にはメイン アセンブリ) と、アプリがサポートするカルチャごとに 1 つのサテライト アセンブリを使用するアプリを作成します。In the satellite assembly deployment model, you create an app with one default assembly (which is typically the main assembly) and one satellite assembly for each culture that the app supports. サテライト アセンブリはメイン アセンブリには含まれないため、アプリのメイン アセンブリを交換しなくても、特定のカルチャに対応するリソースのみを簡単に置換または更新できます。Because the satellite assemblies are not part of the main assembly, you can easily replace or update resources corresponding to a specific culture without replacing the app's main assembly.

どのリソースをアプリの既定のリソース アセンブリに含めるかは、慎重に決定してください。Carefully determine which resources will make up your app's default resource assembly. これはメイン アセンブリの一部に含まれるため、変更するためにはメイン アセンブリを置き換える必要が生じます。Because it is a part of the main assembly, any changes to it will require you to replace the main assembly. 既定のリソースを提供しないと、リソース フォールバック プロセスによって既定のリソースが検索されるときに例外が発生します。If you do not provide a default resource, an exception will be thrown when the resource fallback process attempts to find it. アプリが適切にデザインされていれば、リソースの使用によって例外が発生することはありません。In a well-designed app, using resources should never throw an exception.

詳細については、リソースのパッケージ化と配置に関する記事を参照してください。For more information, see the Packaging and Deploying Resources article.

リソースを取得するRetrieve resources

アプリでは、実行時に、CultureInfo.CurrentUICulture プロパティで指定されるカルチャに基づいて、適切なローカライズ バージョンのリソースがスレッド単位で読み込まれます。At run time, an app loads the appropriate localized resources on a per-thread basis, based on the culture specified by the CultureInfo.CurrentUICulture property. このプロパティ値の派生は次のように行われます。This property value is derived as follows:

  • ローカライズされたカルチャを表す CultureInfo オブジェクトを Thread.CurrentUICulture プロパティに直接割り当てます。By directly assigning a CultureInfo object that represents the localized culture to the Thread.CurrentUICulture property.

  • カルチャが明示的に割り当てられていない場合は、CultureInfo.DefaultThreadCurrentUICulture プロパティから既定のスレッド UI カルチャを取得します。If a culture is not explicitly assigned, by retrieving the default thread UI culture from the CultureInfo.DefaultThreadCurrentUICulture property.

  • 既定のスレッド UI カルチャが明示的に割り当てられていない場合は、ローカル コンピューター上の現在のユーザーのカルチャを取得します。If a default thread UI culture is not explicitly assigned, by retrieving the culture for the current user on the local computer. Windows 上で実行されている .NET 実装では、Windows の GetUserDefaultUILanguage 関数を呼び出すことによってそれが行われます。.NET implementations running on Windows do this by calling the Windows GetUserDefaultUILanguage function.

現在の UI カルチャを設定する方法の詳細については、CultureInfoCultureInfo.CurrentUICulture のリファレンス ページを参照してください。For more information about how the current UI culture is set, see the CultureInfo and CultureInfo.CurrentUICulture reference pages.

これで、System.Resources.ResourceManager クラスを使用して、現在の UI カルチャまたは特定のカルチャのリソースを取得できます。You can then retrieve resources for the current UI culture or for a specific culture by using the System.Resources.ResourceManager class. ResourceManager クラスは、リソースを取得する場合に最もよく使用されますが、System.Resources 名前空間には、リソースの取得に使用できるその他の型も含まれています。Although the ResourceManager class is most commonly used for retrieving resources, the System.Resources namespace contains additional types that you can use to retrieve resources. 次の設定があります。These include:

  • ResourceReader クラス。アセンブリに埋め込まれているリソースまたはスタンドアロンの .resources バイナリ ファイルに格納されているリソースを列挙できます。The ResourceReader class, which enables you to enumerate resources embedded in an assembly or stored in a standalone binary .resources file. これは、実行時に使用可能なリソースの正確な名前がわからない場合に役立ちます。It is useful when you don't know the precise names of the resources that are available at run time.

  • ResXResourceReader クラス。XML (.resx) ファイルからリソースを取得できます。The ResXResourceReader class, which enables you to retrieve resources from an XML (.resx) file.

  • ResourceSet クラス。フォールバック規則に従わずに特定のカルチャのリソースを取得できます。The ResourceSet class, which enables you to retrieve the resources of a specific culture without observing fallback rules. リソースは、アセンブリ、またはスタンドアロンの .resources バイナリ ファイルに格納できます。The resources can be stored in an assembly or a standalone binary .resources file. また、IResourceReader の実装も開発できます。この実装によって、ResourceSet クラスを使用して他のソースからリソースを取得できるようになります。You can also develop an IResourceReader implementation that enables you to use the ResourceSet class to retrieve resources from some other source.

  • ResXResourceSet クラス。XML リソース ファイル内のすべての項目を取得してメモリに格納できます。The ResXResourceSet class, which enables you to retrieve all the items in an XML resource file into memory.

関連項目See also