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 屬性取得的目前null
UI文化特性。
傳回的資源會針對 參數所 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# 中編譯,請將 變更 vbc
為 csc
,並將原始碼檔案的擴展名從 .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.