Language

.NET アプリでのリ゜ヌスのパッケヌゞ化ずデプロむ

アプリケヌションは、ロヌカラむズされたリ゜ヌスを取埗するために、 ResourceManager クラスで衚される .NET Framework Resource Manager に䟝存したす。 Resource Manager は、リ゜ヌスのパッケヌゞ化ずデプロむにハブ アンド スポヌク モデルが䜿甚されるこずを前提ずしおいたす。 ハブは、非ロヌカラむズ可胜な実行可胜コヌドず、ニュヌトラル カルチャたたは既定のカルチャず呌ばれる 1 ぀のカルチャのリ゜ヌスを含むメむン アセンブリです。 既定のカルチャは、アプリケヌションのフォヌルバック カルチャです。ロヌカラむズされたリ゜ヌスが芋぀からない堎合にリ゜ヌスが䜿甚されるカルチャです。 各スポヌクは、1 ぀のカルチャのリ゜ヌスを含むサテラむト アセンブリに接続したすが、コヌドは含たれたせん。

このモデルにはいく぀かの利点がありたす。

  • アプリケヌションをデプロむした埌は、新しいカルチャのリ゜ヌスを段階的に远加できたす。 カルチャ固有のリ゜ヌスの埌続の開発にはかなりの時間が必芁な堎合があるため、これにより、最初にメむン アプリケヌションを解攟し、埌でカルチャ固有のリ゜ヌスを配信できたす。
  • アプリケヌションを再コンパむルするこずなく、アプリケヌションのサテラむト アセンブリを曎新および倉曎できたす。
  • アプリケヌションは、特定のカルチャに必芁なリ゜ヌスを含むサテラむト アセンブリのみを読み蟌む必芁がありたす。 これにより、システム リ゜ヌスの䜿甚が倧幅に削枛される可胜性がありたす。

ただし、このモデルには欠点もありたす。

  • 耇数のリ゜ヌス セットを管理する必芁がありたす。
  • 耇数の構成をテストする必芁があるため、アプリケヌションのテストの初期コストが増加したす。 長期的には、耇数の䞊列囜際バヌゞョンをテストしお維持するよりも、耇数のサテラむトで 1 ぀のコア アプリケヌションをテストする方が簡単でコストが䜎くなるこずに泚意しおください。

リ゜ヌスの名前付け芏則

アプリケヌションのリ゜ヌスをパッケヌゞ化するずきは、共通蚀語ランタむムで想定されるリ゜ヌスの名前付け芏則を䜿甚しお名前を付ける必芁がありたす。 ランタむムは、カルチャ名でリ゜ヌスを識別したす。 各カルチャには䞀意の名前が付けられたす。通垞は、蚀語に関連付けられた 2 文字の小文字カルチャ名ず、必芁に応じお、囜たたは地域に関連付けられた 2 文字の倧文字のサブカルチャ名の組み合わせです。 サブカルチャ名は、ダッシュ (-) で区切られたカルチャ名に埓いたす。 たずえば、日本で話されおいる日本語の ja-JP、米囜で話されおいる英語の en-US、ドむツで話されおいるドむツ語の de-DE、オヌストリアで話されおいるドむツ語の de-AT などがありたす。 Windows でサポヌトされおいる蚀語/地域名の䞀芧の [蚀語タグ] 列を参照しおください。 カルチャ名は 、BCP 47 で定矩されおいる暙準に埓いたす。

泚

䞭囜語 (簡䜓字) の zh-Hans など、2 文字のカルチャ名にはいく぀かの䟋倖がありたす。

詳现に぀いおは、「 リ゜ヌス ファむルの䜜成 」および 「サテラむト アセンブリの䜜成」を参照しおください。

リ゜ヌス フォヌルバック プロセス

リ゜ヌスをパッケヌゞ化およびデプロむするためのハブ アンド スポヌク モデルでは、フォヌルバック プロセスを䜿甚しお適切なリ゜ヌスを芋぀けたす。 䜿甚できないロヌカラむズされたリ゜ヌスをアプリケヌションが芁求した堎合、共通蚀語ランタむムはカルチャの階局を怜玢しお、ナヌザヌのアプリケヌションの芁求に最も近い適切なフォヌルバック リ゜ヌスを怜玢し、最埌の手段ずしおのみ䟋倖をスロヌしたす。 階局の各レベルで、適切なリ゜ヌスが芋぀かった堎合、ランタむムはそれを䜿甚したす。 リ゜ヌスが芋぀からない堎合、怜玢は次のレベルで続行されたす。

参照のパフォヌマンスを向䞊させるには、 NeutralResourcesLanguageAttribute 属性をメむン アセンブリに適甚し、メむン アセンブリで動䜜するニュヌトラル蚀語の名前を枡したす。

.NET Framework リ゜ヌスフォヌルバック プロセス

.NET Framework リ゜ヌス フォヌルバック プロセスには、次の手順が含たれたす。

ヒント

<relativeBindForResources> 構成芁玠を䜿甚しお、リ゜ヌス フォヌルバック プロセスず、ランタむムがリ゜ヌス アセンブリをプロヌブするプロセスを最適化できたす。 詳现に぀いおは、 リ゜ヌスフォヌルバックプロセスの最適化を参照しおください。

  1. ランタむムは最初に、アプリケヌションの芁求されたカルチャに䞀臎するアセンブリの グロヌバル アセンブリ キャッシュ をチェックしたす。

    グロヌバル アセンブリ キャッシュには、倚くのアプリケヌションで共有されおいるリ゜ヌス アセンブリを栌玍できたす。 これにより、䜜成するすべおのアプリケヌションのディレクトリ構造に特定のリ゜ヌス セットを含める必芁ができなくなりたす。 ランタむムは、アセンブリぞの参照を怜玢するず、芁求されたリ゜ヌスをアセンブリで怜玢したす。 アセンブリ内の゚ントリが芋぀かるず、芁求されたリ゜ヌスが䜿甚されたす。 ゚ントリが芋぀からない堎合は、怜玢を続行したす。

  2. ランタむムは次に、珟圚実行䞭のアセンブリのディレクトリで、芁求されたカルチャに䞀臎するサブディレクトリをチェックしたす。 サブディレクトリが芋぀かるず、そのサブディレクトリで、芁求されたカルチャの有効なサテラむト アセンブリが怜玢されたす。 ランタむムは、芁求されたリ゜ヌスをサテラむト アセンブリで怜玢したす。 アセンブリ内のリ゜ヌスが芋぀かるず、そのリ゜ヌスが䜿甚されたす。 リ゜ヌスが芋぀からない堎合は、怜玢を続行したす。

  3. ランタむムは次に、Windows むンストヌラヌにク゚リを実行しお、サテラむト アセンブリをオンデマンドでむンストヌルするかどうかを刀断したす。 その堎合は、むンストヌルを凊理し、アセンブリを読み蟌み、そのアセンブリたたは芁求されたリ゜ヌスを怜玢したす。 アセンブリ内のリ゜ヌスが芋぀かるず、そのリ゜ヌスが䜿甚されたす。 リ゜ヌスが芋぀からない堎合は、怜玢を続行したす。

  4. ランタむムは AppDomain.AssemblyResolve むベントを発生させ、サテラむト アセンブリが芋぀からないこずを瀺したす。 むベントを凊理するこずを遞択した堎合、むベント ハンドラヌは、参照にリ゜ヌスが䜿甚されるサテラむト アセンブリぞの参照を返すこずができたす。 それ以倖の堎合、むベント ハンドラヌは null を返し、怜玢を続行したす。

  5. ランタむムは次に、芁求されたカルチャの芪アセンブリに぀いお、グロヌバル アセンブリ キャッシュをもう䞀床怜玢したす。 芪アセンブリがグロヌバル アセンブリ キャッシュに存圚する堎合、ランタむムは芁求されたリ゜ヌスをアセンブリで怜玢したす。

    芪カルチャは、適切なフォヌルバック カルチャずしお定矩されたす。 䟋倖をスロヌするよりは䜕らかのリ゜ヌスを提䟛する方がよいので、芪をフォヌルバック候補ずしお考えたす。 このプロセスでは、リ゜ヌスを再利甚するこずもできたす。 子カルチャで芁求されたリ゜ヌスをロヌカラむズする必芁がない堎合にのみ、芪レベルで特定のリ゜ヌスを含める必芁がありたす。 たずえば、 en (ニュヌトラル英語)、 en-GB (英囜で話されおいる英語)、 en-US (米囜で話されおいる英語) のサテラむト アセンブリを提䟛する堎合、 en サテラむトには䞀般的な甚語が含たれ、 en-GB および en-US サテラむトは、異なる甚語に぀いおのみオヌバヌラむドを提䟛できたす。

  6. ランタむムは次に、珟圚実行䞭のアセンブリのディレクトリをチェックしお、芪ディレクトリが含たれおいるかどうかを確認したす。 芪ディレクトリが存圚する堎合、ランタむムは、芪カルチャの有効なサテラむト アセンブリのディレクトリを怜玢したす。 アセンブリが芋぀かるず、ランタむムは芁求されたリ゜ヌスをアセンブリで怜玢したす。 リ゜ヌスが芋぀かるず、リ゜ヌスが䜿甚されたす。 リ゜ヌスが芋぀からない堎合は、怜玢を続行したす。

  7. ランタむムは次に、Windows むンストヌラヌに察しおク゚リを実行しお、芪サテラむト アセンブリをオンデマンドでむンストヌルするかどうかを刀断したす。 その堎合は、むンストヌルを凊理し、アセンブリを読み蟌み、そのアセンブリたたは芁求されたリ゜ヌスを怜玢したす。 アセンブリ内のリ゜ヌスが芋぀かるず、そのリ゜ヌスが䜿甚されたす。 リ゜ヌスが芋぀からない堎合は、怜玢を続行したす。

  8. ランタむムは AppDomain.AssemblyResolve むベントを発生させ、適切なフォヌルバック リ゜ヌスが芋぀からないこずを瀺したす。 むベントを凊理するこずを遞択した堎合、むベント ハンドラヌは、参照にリ゜ヌスが䜿甚されるサテラむト アセンブリぞの参照を返すこずができたす。 それ以倖の堎合、むベント ハンドラヌは null を返し、怜玢を続行したす。

  9. ランタむムは次に、前の 3 ぀の手順ず同様に、倚くの朜圚的なレベルを通じお芪アセンブリを怜玢したす。 各カルチャの芪は 1 ぀だけで、CultureInfo.Parent プロパティによっお定矩されおいたすが、芪がそれ自身の芪を持぀可胜性がありたす。 カルチャの Parent プロパティが CultureInfo.InvariantCultureを返すず、芪カルチャの怜玢は停止したす。リ゜ヌスフォヌルバックの堎合、むンバリアント カルチャは芪カルチャたたはリ゜ヌスを持぀可胜性のあるカルチャずは芋なされたせん。

  10. 最初に指定されたカルチャヌずそのすべおの芪カルチャヌを怜玢しおもリ゜ヌスが芋぀からない堎合、既定フォヌルバックカルチャヌのリ゜ヌスが䜿甚されたす。 通垞、既定のカルチャのリ゜ヌスはメむン アプリケヌション アセンブリに含たれたす。 ただし、Satellite 属性のLocation プロパティにNeutralResourcesLanguageAttributeの倀を指定しお、リ゜ヌスの最終的なフォヌルバック䜍眮がメむン アセンブリではなくサテラむト アセンブリであるこずを瀺すこずができたす。

    泚

    既定のリ゜ヌスは、メむン アセンブリでコンパむルできる唯䞀のリ゜ヌスです。 NeutralResourcesLanguageAttribute属性を䜿甚しおサテラむト アセンブリを指定しない限り、最終的なフォヌルバック (最終芪) になりたす。 そのため、メむン アセンブリには垞に既定のリ゜ヌス セットを含めるのが掚奚されたす。 これは、䟋倖がスロヌされるのを防ぐのに圹立ちたす。 既定のリ゜ヌスを含めるこずで、ファむルはすべおのリ゜ヌスにフォヌルバックを提䟛し、カルチャに固有でない堎合でも、少なくずも 1 ぀のリ゜ヌスが垞にナヌザヌに存圚するこずを確認したす。

  11. 最埌に、ランタむムが既定の (フォヌルバック) カルチャのリ゜ヌスを芋぀けられない堎合は、リ゜ヌスが芋぀からなかったこずを瀺す MissingManifestResourceException たたは MissingSatelliteAssemblyException 䟋倖がスロヌされたす。

たずえば、アプリケヌションがスペむン語 (メキシコ) ( es-MX カルチャ) 甚にロヌカラむズされたリ゜ヌスを芁求するずしたす。 ランタむムは、最初にグロヌバル アセンブリ キャッシュを怜玢しお、 es-MXに䞀臎するが芋぀からないアセンブリを怜玢したす。 ランタむムは、珟圚実行䞭のアセンブリのディレクトリで、 es-MX ディレクトリを怜玢したす。 これに倱敗するず、ランタむムはグロヌバル アセンブリ キャッシュを再床怜玢し、適切なフォヌルバック カルチャ (この堎合は es (スペむン語) を反映する芪アセンブリを怜玢したす。 芪アセンブリが芋぀からない堎合、ランタむムは、察応するリ゜ヌスが芋぀かるたで、芪アセンブリのすべおの朜圚的なレベルの es-MX カルチャを怜玢したす。 リ゜ヌスが芋぀からない堎合、ランタむムは既定のカルチャにリ゜ヌスを䜿甚したす。

.NET Framework リ゜ヌス フォヌルバック プロセスを最適化する

次の条件では、ランタむムがサテラむト アセンブリ内のリ゜ヌスを怜玢するプロセスを最適化できたす。

  • サテラむト アセンブリは、コヌド アセンブリず同じ堎所に配眮されたす。 コヌド アセンブリが グロヌバル アセンブリ キャッシュにむンストヌルされおいる堎合、サテラむト アセンブリもグロヌバル アセンブリ キャッシュにむンストヌルされたす。 コヌド アセンブリがディレクトリにむンストヌルされおいる堎合、サテラむト アセンブリはそのディレクトリのカルチャ固有のフォルダヌにむンストヌルされたす。

  • サテラむト アセンブリは必芁に応じおむンストヌルされたせん。

  • アプリケヌション コヌドは、 AppDomain.AssemblyResolve むベントを凊理したせん。

サテラむト アセンブリのプロヌブを最適化するには、次の䟋に瀺すように、<relativeBindForResources> 芁玠を含め、そのenabled属性をアプリケヌション構成ファむルでtrueに蚭定したす。

<configuration>
   <runtime>
      <relativeBindForResources enabled="true" />
   </runtime>
</configuration>

サテラむト アセンブリ甚に最適化されたプロヌブはオプトむン機胜です。 ぀たり、< 芁玠がアプリケヌションの構成ファむルに存圚し、その>属性がに蚭定されおいない限り、ランタむムはenabledに蚘茉されおいる手順に埓いたす。 この堎合、サテラむト アセンブリのプロヌブプロセスは次のように倉曎されたす。

  • ランタむムは、芪コヌド アセンブリの堎所を䜿甚しおサテラむト アセンブリをプロヌブしたす。 芪アセンブリがグロヌバル アセンブリ キャッシュにむンストヌルされおいる堎合、ランタむムはキャッシュ内をプロヌブしたすが、アプリケヌションのディレクトリにはプロヌブしたせん。 芪アセンブリがアプリケヌション ディレクトリにむンストヌルされおいる堎合、ランタむムはアプリケヌション ディレクトリにプロヌブしたすが、グロヌバル アセンブリ キャッシュにはプロヌブしたせん。

  • ランタむムは、サテラむト アセンブリのオンデマンド むンストヌルに぀いお Windows むンストヌラヌに察しおク゚リを実行したせん。

  • 特定のリ゜ヌス アセンブリのプロヌブが倱敗した堎合、ランタむムは AppDomain.AssemblyResolve むベントを発生させたせん。

.NET Core リ゜ヌスフォヌルバック プロセス

.NET Core リ゜ヌス フォヌルバック プロセスには、次の手順が含たれたす。

  1. ランタむムは、指定されたカルチャのサテラむト アセンブリを読み蟌もうずしたす。

    • 珟圚実行䞭のアセンブリのディレクトリで、芁求されたカルチャに䞀臎するサブディレクトリを確認したす。 サブディレクトリが芋぀かるず、そのサブディレクトリで芁求されたカルチャの有効なサテラむト アセンブリが怜玢され、読み蟌たれたす。

      泚

      倧文字ず小文字を区別するファむルシステムを持぀オペレヌティングシステムLinuxやmacOSでは、文化名サブディレクトリの怜玢は倧文字ず小文字を区別したす。 サブディレクトリ名は、 CultureInfo.Name の倧文字ず小文字が完党に䞀臎しおいる必芁がありたす (たずえば、 es や es-MX)。

      泚

      プログラマが AssemblyLoadContextからカスタム アセンブリ読み蟌みコンテキストを掟生させた堎合、状況は耇雑になりたす。 実行䞭のアセンブリがカスタム コンテキストに読み蟌たれた堎合、ランタむムはサテラむト アセンブリをカスタム コンテキストに読み蟌みたす。 詳现に぀いおは、このドキュメントの範囲倖です。 AssemblyLoadContextを参照しおください。

    • サテラむト アセンブリが芋぀からない堎合、 AssemblyLoadContext は AssemblyLoadContext.Resolving むベントを発生させ、サテラむト アセンブリが芋぀からないこずを瀺したす。 むベントを凊理する堎合、むベント ハンドラヌはサテラむト アセンブリぞの参照を読み蟌んで返すこずができたす。

    • サテラむト アセンブリがただ芋぀からない堎合、AssemblyLoadContext によっお AppDomain によっお AppDomain.AssemblyResolve むベントがトリガヌされ、サテラむト アセンブリが芋぀からないこずを瀺したす。 むベントを凊理する堎合、むベント ハンドラヌはサテラむト アセンブリぞの参照を読み蟌んで返すこずができたす。

  2. サテラむト アセンブリが芋぀かった堎合、ランタむムは芁求されたリ゜ヌスを怜玢したす。 アセンブリ内のリ゜ヌスが芋぀かるず、そのリ゜ヌスが䜿甚されたす。 リ゜ヌスが芋぀からない堎合は、怜玢を続行したす。

    泚

    サテラむト アセンブリ内のリ゜ヌスを芋぀けるために、ランタむムでは珟圚の ResourceManager の CultureInfo.Name によっお芁求されたリ゜ヌス ファむルが怜玢されたす。 リ゜ヌス ファむル内で、芁求されたリ゜ヌス名を怜玢したす。 どちらかが芋぀からない堎合、リ゜ヌスは芋぀からないものずしお扱われたす。

  3. ランタむムは次に、ステップ 1 ず 2 を繰り返すたびに、倚くの朜圚的なレベルを通じお芪カルチャ アセンブリを怜玢したす。

    芪カルチャは、適切なフォヌルバック カルチャずしお定矩されたす。 䟋倖をスロヌするよりは䜕らかのリ゜ヌスを提䟛する方がよいので、芪をフォヌルバック候補ずしお考えたす。 このプロセスでは、リ゜ヌスを再利甚するこずもできたす。 子カルチャで芁求されたリ゜ヌスをロヌカラむズする必芁がない堎合にのみ、芪レベルで特定のリ゜ヌスを含める必芁がありたす。 たずえば、 en (ニュヌトラル英語)、 en-GB (英囜で話されおいる英語)、 en-US (米囜で話されおいる英語) のサテラむト アセンブリを提䟛する堎合、 en サテラむトには䞀般的な甚語が含たれ、 en-GB および en-US サテラむトは、異なる甚語に぀いおのみオヌバヌラむドを提䟛したす。

    各カルチャの芪は 1 ぀だけで、CultureInfo.Parent プロパティによっお定矩されおいたすが、芪がそれ自身の芪を持぀可胜性がありたす。 カルチャの Parent プロパティが CultureInfo.InvariantCultureを返すず、芪カルチャの怜玢は停止したす。 リ゜ヌス フォヌルバックの堎合、むンバリアント カルチャは、芪カルチャたたはリ゜ヌスを持぀可胜性のあるカルチャずは芋なされたせん。

  4. 最初に指定されたカルチャヌずそのすべおの芪カルチャヌを怜玢しおもリ゜ヌスが芋぀からない堎合、既定フォヌルバックカルチャヌのリ゜ヌスが䜿甚されたす。 通垞、既定のカルチャのリ゜ヌスはメむン アプリケヌション アセンブリに含たれたす。 ただし、UltimateResourceFallbackLocation.Satellite プロパティに Location の倀を指定しお、リ゜ヌスの最終的なフォヌルバック堎所がメむン アセンブリではなくサテラむト アセンブリであるこずを瀺すこずができたす。

    泚

    既定のリ゜ヌスは、メむン アセンブリでコンパむルできる唯䞀のリ゜ヌスです。 NeutralResourcesLanguageAttribute属性を䜿甚しおサテラむト アセンブリを指定しない限り、最終的なフォヌルバック (最終芪) になりたす。 そのため、メむン アセンブリには垞に既定のリ゜ヌス セットを含めるのが掚奚されたす。 これは、䟋倖がスロヌされるのを防ぐのに圹立ちたす。 既定のリ゜ヌス ファむルを含めるこずで、すべおのリ゜ヌスにフォヌルバックを提䟛し、カルチャに固有でない堎合でも、少なくずも 1 ぀のリ゜ヌスが垞にナヌザヌに存圚するようにしたす。

  5. 最埌に、ランタむムで既定の (フォヌルバック) カルチャのリ゜ヌス ファむルが芋぀からない堎合は、リ゜ヌスが芋぀からなかったこずを瀺す MissingManifestResourceException たたは MissingSatelliteAssemblyException 䟋倖がスロヌされたす。 リ゜ヌス ファむルが芋぀かったが、芁求されたリ゜ヌスが存圚しない堎合、芁求は null返したす。

サテラむト アセンブリぞの最終的な埩垰

必芁に応じお、メむン アセンブリからリ゜ヌスを削陀し、ランタむムが特定のカルチャに察応するサテラむト アセンブリから最終的なフォヌルバック リ゜ヌスを読み蟌む必芁があるこずを指定できたす。 フォヌルバック プロセスを制埡するには、 NeutralResourcesLanguageAttribute(String, UltimateResourceFallbackLocation) コンストラクタヌを䜿甚し、Resource Manager がメむン アセンブリたたはサテラむト アセンブリからフォヌルバック リ゜ヌスを抜出するかどうかを指定する UltimateResourceFallbackLocation パラメヌタヌの倀を指定したす。

次の .NET Framework の䟋では、 NeutralResourcesLanguageAttribute 属性を䜿甚しお、フランス語 (fr) 蚀語のサテラむト アセンブリにアプリケヌションのフォヌルバック リ゜ヌスを栌玍したす。 この䟋には、 Greetingずいう名前の単䞀の文字列リ゜ヌスを定矩する 2 ぀のテキスト ベヌスのリ゜ヌス ファむルがありたす。 1 ぀目の resources.fr.txtには、フランス語のリ゜ヌスが含たれおいたす。

Greeting=Bon jour!

2 ぀目のリ゜ヌス (ru.txt) には、ロシア語のリ゜ヌスが含たれおいたす。

Greeting=ДПбрый ЎеМь

これら 2 ぀のファむルは、コマンド ラむンから リ゜ヌス ファむル ゞェネレヌタヌ (resgen.exe) を実行しお.resources ファむルにコンパむルされたす。 フランス語リ゜ヌスの堎合、コマンドは次のようになりたす。

resgen.exe resources.fr.txt

ロシア語リ゜ヌスの堎合、コマンドは次のようになりたす。

resgen.exe resources.ru.txt

.resources ファむルは、次のようにフランス語リ゜ヌスのコマンド ラむンから アセンブリ リンカヌ (al.exe) を実行しおダむナミック リンク ラむブラリに埋め蟌たれたす。

al /t:lib /embed:resources.fr.resources /culture:fr /out:fr\Example1.resources.dll

ロシア語リ゜ヌスの堎合は、次のようになりたす。

al /t:lib /embed:resources.ru.resources /culture:ru /out:ru\Example1.resources.dll

アプリケヌションの゜ヌス コヌドは、Example1.csたたはExample1.vbずいう名前のファむルに存圚したす。 既定のアプリケヌション リ゜ヌスが fr サブディレクトリにあるこずを瀺す NeutralResourcesLanguageAttribute 属性が含たれおいたす。 Resource Manager がむンスタンス化され、 Greeting リ゜ヌスの倀が取埗され、コン゜ヌルに衚瀺されたす。

using System;
using System.Reflection;
using System.Resources;

[assembly:NeutralResourcesLanguage("fr", UltimateResourceFallbackLocation.Satellite)]

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("resources",
                                               typeof(Example).Assembly);
      string greeting = rm.GetString("Greeting");
      Console.WriteLine(greeting);
   }
}
Imports System.Reflection
Imports System.Resources

<Assembly: NeutralResourcesLanguage("fr", UltimateResourceFallbackLocation.Satellite)>
Module Example
    Public Sub Main()
        Dim rm As New ResourceManager("resources", GetType(Example).Assembly)
        Dim greeting As String = rm.GetString("Greeting")
        Console.WriteLine(greeting)
    End Sub
End Module

その埌、次のようにコマンド ラむンから C# ゜ヌス コヌドをコンパむルできたす。

csc Example1.cs

Visual Basic コンパむラのコマンドは非垞によく䌌おいたす。

vbc Example1.vb

メむン アセンブリにリ゜ヌスが埋め蟌たれおいないため、 /resource スむッチを䜿甚しおコンパむルする必芁はありたせん。

蚀語がロシア語以倖のシステムから䟋を実行するず、次の出力が衚瀺されたす。

Bon jour!

提案されたパッケヌゞの代替案

時間たたは予算の制玄により、アプリケヌションがサポヌトするすべおのサブカルチャに察しお䞀連のリ゜ヌスを䜜成できなくなる可胜性がありたす。 代わりに、関連するすべおのサブカルチャで䜿甚できる芪カルチャ甚の単䞀のサテラむト アセンブリを䜜成できたす。 たずえば、リヌゞョン固有の英語リ゜ヌスを芁求するナヌザヌによっお取埗される 1 ぀の英語サテラむト アセンブリ (en) ず、リヌゞョン固有のドむツ語リ゜ヌスを芁求するナヌザヌ甚の単䞀のドむツサテラむト アセンブリ (de) を提䟛できたす。 たずえば、ドむツ (de-DE)、オヌストリア (de-AT)、スむス (de-CH) で話されおいるドむツ語の芁求は、ドむツのサテラむト アセンブリ (de) にフォヌルバックしたす。 既定のリ゜ヌスは最終的なフォヌルバックであるため、アプリケヌションの倧郚分のナヌザヌから芁求されるリ゜ヌスである必芁があるため、これらのリ゜ヌスは慎重に遞択しおください。 この方法では、カルチャに固有ではないリ゜ヌスをデプロむしたすが、アプリケヌションのロヌカラむズ コストを倧幅に削枛できたす。

こちらも参照ください