ResourceManager.GetString 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
返回指定区域性或当前 UI 区域性的指定字符串资源。
重载
GetString(String) |
返回指定的字符串资源的值。 |
GetString(String, CultureInfo) |
返回为指定区域性本地化的字符串资源的值。 |
GetString(String)
返回指定的字符串资源的值。
public:
System::String ^ GetString(System::String ^ name);
public:
virtual System::String ^ GetString(System::String ^ name);
public string GetString (string name);
public virtual string? GetString (string name);
public virtual string GetString (string name);
member this.GetString : string -> string
abstract member GetString : string -> string
override this.GetString : string -> string
Public Function GetString (name As String) As String
Public Overridable Function GetString (name As String) As String
参数
- name
- String
要检索的资源的名称。
返回
为调用方的当前 UI 区域性本地化的资源的值,如果在资源集中找不到 name
,则为 null
。
例外
name
参数为 null
。
指定资源的值不是字符串。
未找到可用的资源集,并且没有默认区域性的资源。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException 异常”一节。
默认区域性的资源位于无法找到的附属程序集。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException 异常”一节。
示例
以下示例使用 GetString 该方法检索特定于区域性的资源。 它包括从英语 (en) 、法语 (法国) (fr-FR) 和俄罗斯 (俄罗斯) (ru-RU) 文化) (.txt文件编译的资源。 本示例将当前文化和当前 UI 区域性更改为英语 (美国) 、法语 (法国) 、俄罗斯 (俄罗斯) 和瑞典 (瑞典) 。 然后,它调用 GetString 该方法来检索本地化字符串,该字符串与当前日和月份一起显示。 请注意,输出显示适当的本地化字符串,除非当前 UI 区域性是瑞典 (瑞典) 。 由于瑞典语言资源不可用,因此应用会改用默认区域性的资源,即英语。 此示例需要下表中列出的基于文本的资源文件。 每个字符串都有一个名为 DateStart
.
环境 | 文件名 | 资源名称 | 资源值 |
---|---|---|---|
zh-CN | DateStrings.txt | DateStart |
今天是 |
fr-FR | DateStrings.fr-FR.txt | DateStart |
Aujourd'hui, 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;
[assembly:NeutralResourcesLanguage("en")]
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.
注解
桌面应用
在桌面应用中,为当前线程的 UI 区域性本地化返回的资源,由属性定义 CultureInfo.CurrentUICulture 。 如果资源尚未针对该区域性进行本地化,则资源管理器会按照 打包和部署资源 文章的“资源回退过程”部分中概述的步骤探测资源。 如果未找到任何可用本地化资源集,则资源管理器将回退到默认区域性的资源上。 如果资源管理器无法加载默认区域性的资源集,该方法将 MissingManifestResourceException 引发异常,或者,如果资源集应驻留在附属程序集中,则为 MissingSatelliteAssemblyException 异常。 如果资源管理器可以加载适当的资源集,但找不到名为 name
的资源,该方法将 null
返回。
该 IgnoreCase 属性确定与资源名称的 name
比较是否区分大小写, (默认) 还是区分大小写。
注意
此方法可能会引发比列出的更多异常。 出现这种情况的原因之一是此方法调用的方法引发异常。 例如, FileLoadException 如果在部署或安装附属程序集时出错,或者如果用户定义类型在反序列化时引发用户定义的异常, SerializationException 则可能会引发异常。
Windows 8.x 应用
重要
尽管 Windows 8.x 应用中支持该ResourceManager类,但我们不建议使用它。 仅当开发可与 Windows 8.x 应用一起使用的可移植类库项目时,才使用此类。 若要从 Windows 8.x 应用中检索资源,请使用Windows。改为 ApplicationModel.Resources.ResourceLoader 类。
在 Windows 8.x 应用中,该方法GetString(String)返回为调用方当前 UI 区域性设置本地化的字符串资源的值name
。 区域性列表派生自操作系统的首选 UI 语言列表。 如果资源管理器不匹配 name
,该方法将 null
返回。
线程安全性
该方法 GetString(String) 是线程安全的。
另请参阅
适用于
GetString(String, CultureInfo)
返回为指定区域性本地化的字符串资源的值。
public:
virtual System::String ^ GetString(System::String ^ name, System::Globalization::CultureInfo ^ culture);
public virtual string GetString (string name, System.Globalization.CultureInfo culture);
public virtual string? GetString (string name, System.Globalization.CultureInfo? culture);
abstract member GetString : string * System.Globalization.CultureInfo -> string
override this.GetString : string * System.Globalization.CultureInfo -> string
Public Overridable Function GetString (name As String, culture As CultureInfo) As String
参数
- name
- String
要检索的资源的名称。
- culture
- CultureInfo
一个对象,表示为其本地化资源的区域性。
返回
为指定区域性本地化的资源的值,如果在资源集中找不到 null
,则为 name
。
例外
name
参数为 null
。
指定资源的值不是字符串。
未找到可用的资源集,并且没有默认区域性的资源。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException 异常”一节。
默认区域性的资源位于无法找到的附属程序集。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException 异常”一节。
示例
以下示例使用 GetString(String, CultureInfo) 该方法检索特定于区域性的资源。 此示例的默认区域性是英语 (en) ,它包括法国 (法国) (fr-FR) 和俄罗斯 (俄罗斯) (ru-RU) 区域性的附属程序集。 本示例在调用 GetString(String, CultureInfo)之前将当前区域性和当前 UI 区域性更改为俄罗斯 (俄罗斯) 。 然后, GetString 它调用该方法和 DateTime.ToString(String, IFormatProvider) 方法,并将代表法国 (法国) 和瑞典 (瑞典) 文化的对象传递给 CultureInfo 每个方法。 在输出中,月份的月份和日以及前面显示的字符串以法语显示,因为 GetString 该方法能够检索法语资源。 然而,当瑞典 (瑞典) 文化被使用时,月份的月份和日出现在瑞典语中,尽管前面字符串是英语的。 这是因为资源管理器找不到本地化的瑞典语言资源,因此它将返回默认英语区域性的资源。
此示例需要下表中列出的基于文本的资源文件。 每个字符串都有一个名为 DateStart
.
环境 | 文件名 | 资源名称 | 资源值 |
---|---|---|---|
zh-CN | 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;
[assembly:NeutralResourcesLanguage("en")]
public class Example
{
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
<Assembly:NeutralResourcesLanguage("en")>
Module Example
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.
注解
桌面应用
在桌面应用中,如果是culture``null
,该方法GetString(String, CultureInfo)使用从属性获取的CultureInfo.CurrentUICulture当前 UI 区域性。
返回的资源已本地化为参数指定的 culture
区域性。 如果资源尚未本地化 culture
,则资源管理器会按照 打包和部署资源 主题的“资源回退过程”部分中概述的步骤探测资源。 如果未找到可用资源集,则资源管理器将回退到默认区域性的资源上。 如果资源管理器无法加载默认区域性的资源集,该方法将 MissingManifestResourceException 引发异常,或者,如果资源集应驻留在附属程序集中,则为 MissingSatelliteAssemblyException 异常。 如果资源管理器可以加载适当的资源集,但找不到名为 name
的资源,该方法将 null
返回。
该 IgnoreCase 属性确定与资源名称的 name
比较是否区分大小写, (默认) 还是区分大小写。
注意
此方法可能会引发比列出的更多异常。 出现这种情况的原因之一是此方法调用的方法引发异常。 例如, FileLoadException 如果在部署或安装附属程序集时出错,或者如果用户定义类型在反序列化时引发用户定义的异常, SerializationException 则可能会引发异常。
Windows 8.x 应用
重要
尽管 Windows 8.x 应用中支持该ResourceManager类,但我们不建议使用它。 仅当开发可与 Windows 8.x 应用一起使用的可移植类库项目时,才使用此类。 若要从 Windows 8.x 应用中检索资源,请使用Windows。改为 ApplicationModel.Resources.ResourceLoader 类。
在 Windows 8.x 应用中,该方法GetString(String, CultureInfo)返回为参数指定的culture
区域性本地化的字符串资源的值name
。 如果资源未本地化为culture
区域性,则查找将使用整个Windows 8语言回退列表,并在查看默认区域性后停止。 如果资源管理器不匹配 name
,该方法将 null
返回。
线程安全性
该方法 GetString(String, CultureInfo) 是线程安全的。