LocalizedHelloWorld サンプルは、コンソール アプリケーションのサテライト アセンブリの作成例および使用例を示します。C# コンソール アプリケーションのリソースの作成方法、リソースのローカライズ方法、およびローカライズされたサテライト アセンブリのビルド方法を示します。
このサンプルは C# を使用して作成されていますが、サンプルの原理と手法は、任意の言語で作成された任意のマネージ アプリケーションのローカライズに使用できます。
サンプルのビルドと実行
このサンプルをビルドして実行するには
- ソリューション LocalizedHelloWorld.sln を開きます。
- [ビルド] メニューの [ソリューションのビルド] をクリックします。
- [デバッグ] メニューの [デバッグなしで開始] をクリックします。
- アプリケーションでサポートされているカルチャを入力し、そのカルチャのリソースを表示します。サンプルには、en、en-US、ko-KR、および英語である default の各リソースが付属しています。
新しいカルチャを追加するには
英語 (英国) のリソースを追加する手順を次に示します。
- "MyResources.en-GB.txt" という名前の新規テキスト ファイルを Resources C++ ユーティリティ プロジェクトに追加します。
- 適切な <名前>=<値> 行を必要なコメントと共に新規テキスト ファイルに追加します。
- 新規ファイルのカスタム ビルド ステップを追加します。これは、プロジェクト内のほかのリソース ファイルの場合と同じです。
ResGen.exe "$(InputPath)"
- カスタム ビルド ステップの出力を "$(InputName).resources" に設定します。
- このプロジェクトをビルドします。メイン アセンブリを再度ビルドする必要はありません。
- "..\Resources\MyResources.en-GB.resources" という名前の既存のファイルを SatelliteAssemblies C++ ユーティリティ プロジェクトに追加します。
- このファイルのカスタム ビルド ステップを追加します。これは、ほかのファイルのカスタム ビルド ステップと同様です。
mkdir $(ProjectDir)..\bin\$(OutDir)\en-GB
al.exe /culture:en-GB /out:"$(ProjectDir)..\bin\$(OutDir)\en-GB\HelloWorld.resources.dll" /embed:"$(InputPath)","HelloWorld.Resources.$(InputFileName)" /template:"$(ProjectDir)..\obj\$(IntDir)\HelloWorld.exe"
- カスタム ビルド ステップの出力を "$(ProjectDir)..\bin\$(OutDir)\en-GB\HelloWorld.resources.dll" に設定します。
- このプロジェクトをビルドします。メイン アセンブリを再度ビルドする必要はありません。
- サンプルを実行し、新規リソースを試行します。
コマンド ラインからサンプルをビルドするには
メモ デバッグやその他の理由で、C# コマンド ラインにオプションを追加できます。
- Resources サブディレクトリにあるすべてのカルチャのリソースをコンパイルします。
ResGen.exe MyResources.txt
ResGen.exe MyResources.en-US.txt
ResGen.exe MyResources.ko-KR.txt
- 出力ディレクトリ "bin\Debug" を作成するか、次の手順で別のディレクトリを使用します。
- メイン アセンブリをコンパイルし、ルート プロジェクト ディレクトリにある既定のリソースを埋め込みます。
csc.exe /out:bin\Debug\HelloWorld.exe /res:Resources\MyResources.resources,HelloWorld.Resources.MyResources.resources Class1.cs AssemblyInfo.cs
- ルート プロジェクト ディレクトリにあるサテライト アセンブリをビルドします。
mkdir bin\Debug\en-US
mkdir bin\Debug\ko-KR
al.exe /culture:en-US /out:bin\Debug\en-US\HelloWorld.resources.dll /embed:Resources\MyResources.en-US.resources,HelloWorld.Resources.MyResources.en-US.resources /template:bin\Debug\HelloWorld.exe
al.exe /culture:ko-KR /out:bin\Debug\ko-KR\HelloWorld.resources.dll /embed:Resources\MyResources.ko-KR.resources,HelloWorld.Resources.MyResources.ko-KR.resources /template:bin\Debug\HelloWorld.exe
サンプル内のプロジェクト
このサンプルには 3 つのプロジェクトが含まれ、3 つのアセンブリを生成します。
Resources C++ ユーティリティ プロジェクト
これは、最初のプロジェクトです。ResGen.exe を呼び出して .txt ファイルを .resources ファイルにコンパイルするカスタム ビルド ステップを使用して、マネージ リソースをビルドします。リソース テキスト ファイルには、<名前>=<値> ステートメントの行と、ポンド記号 (#) で開始するコメント行が含まれます。コードでは、このファイルで指定された名前を使用して文字列が読み込まれます。
韓国語のリソースでは、ASCII 以外の文字を保持するためにファイルを UTF-8 として保存する必要があります。各カルチャがすべての名前に対して値を持つ必要はないことにも注意してください。
適切なカルチャに対する値が存在しない場合、リソース マネージャは親カルチャに自動的にフォール バックします。たとえば、現在のカルチャが ko-KR の場合、リソース マネージャは最初に "ko-KR" リソース、次に "ko" リソース、最後に既定のリソースで名前を検索します。技術的には、これらのリソース ファイルには任意の名前を指定できますが、通常は次の規則に従って名前を付けます。
<基本名>[.<カルチャ>] リソース
カルチャが空の場合は、既定のカルチャが想定されます。
HelloWorld C# コンソール プロジェクト
これは、2 番目のプロジェクトです。メインの C# アプリケーションを構築し、既定のリソース (最初のプロジェクトにより MyResources.txt から構築された MyResources.resources) を埋め込みます。
SatelliteAssemblies C++ ユーティリティ プロジェクト
これは、3 番目のプロジェクトです。カスタム ビルド ステップでローカライズされたリソースを含む 2 つのサテライト アセンブリをビルドします。"/embed" オプションでリソース ファイルを渡し、"/culture" オプションでカルチャを設定し、"/template" オプションでアセンブリ情報 (タイトル、バージョンなど) をメイン アセンブリからコピーして、Al.exe を呼び出しサテライト アセンブリを作成します。
サテライト アセンブリは、メイン アセンブリのカルチャに基づいて名前が付けられたサブディレクトリ内にある必要があります。サテライト アセンブリのファイル名はメイン アセンブリと同じ名前ですが、ファイル拡張子の前に ".resources" が挿入されます。たとえば、メイン アセンブリが "c:\bin\a.dll" の場合、en-US サテライト アセンブリは "c:\bin\en-US\a.resources.dll" になります。
"/embed" オプションの 2 番目の引数であるリソース名にも注目してください。この名前は、リソース マネージャが特定のリソース グループの検索に使用する名前であり、名前と ".resources" の間に適切なカルチャ文字列 (大文字と小文字が区別される) が含まれている必要があります。Al.exe はメイン アセンブリからほとんどの情報を取得するため、この 3 番目のプロジェクトは 2 番目のプロジェクトより後に構築する必要があります。
クラスとキーワード
このサンプルでは、次の各クラスを使用します。
System.Resources.ResourceManager
このサンプルでは、次のキーワードを使用します。
managed resources、satellite assembly、localized resources、ResGen.exe、al.exe、/embed、/res、/template、/culture、System.Resources、System.Resources.ResourceManager、System.Resources.ResourceManager.GetString
参照
Visual C# のサンプル | 一般的なサンプル | コンソール : ローカライズされた Hello World サンプル