次の方法で共有


System.Resources.ResourceManager.GetString メソッド

この記事では、この API のリファレンス ドキュメントへの補足的な解説を提供します。

このプロパティは IgnoreCase 、リソース名との比較 name で大文字と小文字が区別されない (既定) か、大文字と小文字が区別されるかを決定します。

Note

メソッドは GetString 、一覧よりも多くの例外をスローする可能性があります。 これが発生する理由の 1 つは、このメソッドが呼び出すメソッドが例外をスローした場合です。 たとえば、サテライト アセンブリの FileLoadException 配置またはインストール中にエラーが発生した場合に例外がスローされる場合や SerializationException 、型が逆シリアル化されるときにユーザー定義型がユーザー定義例外をスローした場合に例外がスローされる場合があります。

GetString(String) メソッド

デスクトップ アプリ

デスクトップ アプリでは、返されるリソースは、プロパティで定義されているように、現在のスレッドの UI カルチャ用に CultureInfo.CurrentUICulture ローカライズされます。 リソースがそのカルチャにローカライズされていない場合、リソース マネージャーは、リソースのパッケージ化とデプロイに関する記事の「リソース フォールバック プロセス」セクションで説明されている手順に 従って、リソース をプローブします。 ローカライズされたリソースの使用可能なセットが見つからない場合、リソース マネージャーは既定のカルチャのリソースにフォールバックします。 リソース マネージャーが既定のカルチャのリソース セットを読み込めない場合、メソッドは例外を MissingManifestResourceException スローするか、リソース セットがサテライト アセンブリに存在することが予想される場合は例外を MissingSatelliteAssemblyException スローします。 リソース マネージャーが適切なリソース セットを読み込むことができるが、名前付きの nameリソースが見つからない場合、メソッドは返します null

Windows 8.x アプリ

重要

この ResourceManager クラスは Windows 8.x アプリでサポートされていますが、その使用はお勧めしません。 このクラスは、Windows 8.x アプリで使用できるポータブル クラス ライブラリ プロジェクトを開発する場合にのみ使用します。 Windows 8.x アプリからリソースを取得するには、代わりに Windows.ApplicationModel.Resources.ResourceLoader クラスを使用します。

Windows 8.x アプリでは、メソッドは GetString(String) 、呼び出し元の現在の name UI カルチャ設定用にローカライズされた文字列リソースの値を返します。 カルチャの一覧は、オペレーティング システムの優先 UI 言語リストから派生します。 リソース マネージャーが一致nameしない場合、メソッドは .null

次の例では、GetString メソッドを使用して、カルチャ固有のリソースを取得します。 これは、英語 (en)、フランス語 (フランス) (fr-FR)、およびロシア語 (ロシア) (ru-RU) の .txt ファイルからコンパイルされたリソースで構成されます。 例では、現在のカルチャと現在の UI カルチャを、英語 (米国)、フランス語 (フランス)、ロシア語 (ロシア)、およびスウェーデン語 (スウェーデン) に変更します。 それから、GetString メソッドを呼び出して、ローカライズされた文字列を取得します。この文字列は現在の日付と月と一緒に表示されます。 現在の UI カルチャがスウェーデン語 (スウェーデン) である場合を除き、適切なローカライズされた文字列が出力に表示されることに注意してください。 スウェーデン語の言語リソースが利用できないため、アプリは代わりに既定のカルチャである英語のリソースを使用します。 例には、次の表に記載されたテキスト ベースのリソース ファイルが必要です。 それぞれには DateStart という名前の唯一の文字列リソースがあります。

カルチャ ファイル名 リソース名 リソースの値
ja-JP DateStrings.txt DateStart Today is
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

次のバッチ ファイルを使用して、C# の例をコンパイルできます。 Visual Basic の場合は、 cscvbcに変更し、さらにソース コード ファイルの拡張子を .cs から .vbに変更します。

resgen DateStrings.txt
csc showdate.cs /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

この例のソース コードを次に示します (Visual Basic バージョンのShowDate.vbまたは C# バージョンのShowDate.cs)。

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

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.

GetString(String, CultureInfo) メソッド

デスクトップ アプリ

デスクトップ アプリの場合culture、メソッドはnullGetString(String, CultureInfo)プロパティから取得した現在の UI カルチャをCultureInfo.CurrentUICulture使用します。

返されるリソースは、パラメーターで指定されたカルチャ用に culture ローカライズされます。 リソースがローカライズ cultureされていない場合、リソース マネージャーは、「リソースのパッケージ化とデプロイ」トピックの「リソース フォールバック プロセス」セクションで説明されている手順に 従って、リソース をプローブします。 使用可能なリソースのセットが見つからない場合、リソース マネージャーは既定のカルチャのリソースにフォールバックします。 リソース マネージャーが既定のカルチャのリソース セットを読み込めない場合、メソッドは例外を MissingManifestResourceException スローするか、リソース セットがサテライト アセンブリに存在することが予想される場合は例外を MissingSatelliteAssemblyException スローします。 リソース マネージャーが適切なリソース セットを読み込むことができるが、名前付きの nameリソースが見つからない場合、メソッドは返します null

Windows 8.x アプリ

重要

この ResourceManager クラスは Windows 8.x アプリでサポートされていますが、その使用はお勧めしません。 このクラスは、Windows 8.x アプリで使用できるポータブル クラス ライブラリ プロジェクトを開発する場合にのみ使用します。 Windows 8.x アプリからリソースを取得するには、代わりに Windows.ApplicationModel.Resources.ResourceLoader クラスを使用します。

Windows 8.x アプリでは、このメソッドは、 GetString(String, CultureInfo) パラメーターで指定されたカルチャにローカライズされた文字列リソースの値 nameculture 返します。 リソースがカルチャ用 culture にローカライズされていない場合、検索では Windows 8 言語フォールバック リスト全体が使用され、既定のカルチャを調べてから停止します。 リソース マネージャーが一致nameしない場合、メソッドは .null

次の例では、GetString(String, CultureInfo) メソッドを使用して、カルチャ固有のリソースを取得します。 この例の既定のカルチャは英語 (en) で、フランス語 (フランス) (fr-FR) カルチャとロシア語 (ロシア) (ru-RU) カルチャのサテライト アセンブリが含まれています。 この例では、呼び出す GetString(String, CultureInfo)前に、現在のカルチャと現在の UI カルチャをロシア語 (ロシア) に変更します。 次に、メソッドとメソッドをGetStringDateTime.ToString(String, IFormatProvider)呼び出し、フランス語 (フランス) カルチャとスウェーデン語 (スウェーデン) カルチャを表すオブジェクトを各メソッドに渡CultureInfoします。 このメソッドはフランス語の言語リソースを取得できるため GetString 、出力では、月の月と日と、その前の文字列がフランス語で表示されます。 ただし、スウェーデン語 (スウェーデン) カルチャを使用すると、月と日がスウェーデン語で表示されますが、その前の文字列は英語です。 これは、リソース マネージャーがローカライズされたスウェーデン語のリソースを見つけられないため、代わりに既定の英語カルチャのリソースが返されるためです。

例には、次の表に記載されたテキスト ベースのリソース ファイルが必要です。 それぞれには DateStart という名前の唯一の文字列リソースがあります。

カルチャ ファイル名 リソース名 リソースの値
ja-JP DateStrings.txt DateStart Today is
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

次のバッチ ファイルを使用して、Visual Basic の例をコンパイルできます。 C# でコンパイルするには、ソース コード ファイル.vb.csの拡張子をcsc次のように変更vbcします。

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

この例のソース コードを次に示します (Visual Basic バージョンのShowDate.vbまたは C# バージョンのShowDate.cs)。

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

public class Example2
{
    public static void Main()
    {
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU");
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU");

        string[] cultureNames = [ "fr-FR", "sv-SE" ];
        ResourceManager rm = new ResourceManager("DateStrings",
                                                 typeof(Example).Assembly);

        foreach (var cultureName in cultureNames)
        {
            CultureInfo culture = CultureInfo.CreateSpecificCulture(cultureName);
            string dateString = rm.GetString("DateStart", culture);
            Console.WriteLine("{0}: {1} {2}.", culture.DisplayName, dateString,
                                               DateTime.Now.ToString("M", culture));
            Console.WriteLine();
        }
    }
}
// The example displays output similar to the following:
//       French (France): Aujourd'hui, c'est le 7 février.
//
//       Swedish (Sweden): Today is den 7 februari.
Imports System.Globalization
Imports System.Resources
Imports System.Threading

Module Example2
    Public Sub Main()
        Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("ru-RU")
        Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("ru-RU")

        Dim cultureNames() As String = {"fr-FR", "sv-SE"}
        Dim rm As New ResourceManager("DateStrings",
                                    GetType(Example).Assembly)

        For Each cultureName In cultureNames
            Dim culture As CultureInfo = CultureInfo.CreateSpecificCulture(cultureName)
            Dim dateString As String = rm.GetString("DateStart", culture)
            Console.WriteLine("{0}: {1} {2}.", culture.DisplayName, dateString,
                                            Date.Now.ToString("M", culture))
            Console.WriteLine()
        Next
    End Sub
End Module
' The example displays output similar to the following:
'       French (France): Aujourd'hui, c'est le 7 février.
'       
'       Swedish (Sweden): Today is den 7 februari.