共用方式為


System.Resources.ResourceManager.GetString 方法

本文提供此 API 參考文件的補充備註。

屬性 IgnoreCase 會判斷 與資源名稱的比較 name 是否不區分大小寫(預設值)或區分大小寫。

注意

GetString方法可能會擲回比列出的更多例外狀況。 發生這種狀況的其中一個原因是此方法所呼叫的方法擲回例外狀況。 例如, FileLoadException 如果部署或安裝附屬元件時發生錯誤, SerializationException 或如果使用者定義類型在還原串行化時擲回使用者定義例外狀況,可能會擲回例外狀況。

GetString(String) 方法

傳統型應用程式

在傳統型應用程式中,傳回的資源會針對目前線程的UI文化特性進行當地語系化,如屬性所 CultureInfo.CurrentUICulture 定義。 如果資源尚未針對該文化特性進行當地語系化,資源管理員會依照封裝和部署資源一文的一節 中所述的步驟來探查資源 。 如果找不到一組可使用的當地語系化資源,資源管理員會回復預設文化特性的資源。 如果資源管理員無法載入預設文化特性的資源集,此方法會擲回 MissingManifestResourceException 例外狀況,或者,如果資源集預期位於附屬元件中,則為 MissingSatelliteAssemblyException 例外狀況。 如果資源管理員可以載入適當的資源集,但找不到名為 name的資源,此方法會傳 null回 。

Windows 8.x 應用程式

重要

雖然 Windows 8.x 應用程式中支援 類別 ResourceManager ,但我們不建議使用類別。 只有在您開發可與 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個名為的單一字串資源。

文化特性 File name 資源名稱 資源值
zh-TW DateStrings.txt DateStart 今天是
fr-FR DateStrings.fr-FR.txt DateStart 奧約爾德『輝, c』est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

您可以使用下列批處理文件來編譯 C# 範例。 若是 Visual Basic,請將 csc 變更為 vbc,並將原始程式碼檔案的副檔名從 .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 是 ,方法GetString(String, CultureInfo)會使用從 CultureInfo.CurrentUICulture 屬性取得的目前nullUI文化特性。

傳回的資源會針對 參數所 culture 指定的文化特性進行當地語系化。 如果資源尚未當地語系化 culture,則資源管理員會依照封裝和部署資源主題的一節 中所述的步驟來探查資源 。 如果找不到一組可用資源,資源管理員會回復預設文化特性的資源。 如果資源管理員無法載入預設文化特性的資源集,此方法會擲回 MissingManifestResourceException 例外狀況,或者,如果資源集預期位於附屬元件中,則為 MissingSatelliteAssemblyException 例外狀況。 如果資源管理員可以載入適當的資源集,但找不到名為 name的資源,此方法會傳 null回 。

Windows 8.x 應用程式

重要

雖然 Windows 8.x 應用程式中支援 類別 ResourceManager ,但我們不建議使用類別。 只有在您開發可與 Windows 8.x 應用程式搭配使用的可攜式類別庫專案時,才使用此類別。 若要從 Windows 8.x 應用程式擷取資源,請改用 Windows.ApplicationModel.Resources.ResourceLoader 類別。

在 Windows 8.x 應用程式中, GetString(String, CultureInfo) 方法會傳回字串資源的值 name ,其已針對 參數所 culture 指定的文化特性進行當地語系化。 如果資源未針對 culture 文化特性進行當地語系化,查閱會使用整個 Windows 8 語言後援清單,並在查看預設文化特性之後停止。 如果資源管理員無法比對 name,則方法會傳 null回 。

範例

下列範例會使用 GetString(String, CultureInfo) 方法來擷取特定文化特性的資源。 此範例的預設文化特性為英文(en),其中包含法文(法國)(fr-FR)和俄羅斯(俄羅斯)(ru-RU)文化的附屬元件。 此範例會在呼叫 GetString(String, CultureInfo)之前,將目前的文化特性和目前的UI文化特性變更為俄文(俄羅斯)。 然後,它會呼叫 GetString 方法和方法 DateTime.ToString(String, IFormatProvider) ,並將代表法國(法國)和瑞典(瑞典)文化特性的對象傳遞給 CultureInfo 每個方法。 在輸出中,月份的月份和日,以及前面出現的字串會以法文顯示,因為 GetString 方法能夠擷取法文語言資源。 不過,使用瑞典文(瑞典)文化特性時,當月份的月份和日出現在瑞典文中,雖然前面字串是英文的。 這是因為資源管理員找不到本地化的瑞典文語言資源,因此會改為傳回預設英文文化特性的資源。

此範例需要下表所列的文字型資源檔。 每個都有一 DateStart個名為的單一字串資源。

文化特性 File name 資源名稱 資源值
zh-TW DateStrings.txt DateStart 今天是
fr-FR DateStrings.fr-FR.txt DateStart 奧約爾德『輝, c』est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

您可以使用下列批處理文件來編譯 Visual Basic 範例。 若要在 C# 中編譯,請將 變更 vbccsc,並將原始碼檔案的擴展名從 .vb 變更為 .cs

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.