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 检索特定于区域性的资源。 它包括从英语 () (、法国 (法国) (fr-FR) 和俄罗斯 (俄罗斯) (ru-RU) 文化的.txt文件编制的资源。 本示例将当前文化和当前 UI 区域性更改为英语 (美国) 、法语 (法国) 、俄语 (俄罗斯) 和瑞典 (瑞典) 。 然后,它会调用 GetString 该方法来检索本地化字符串,该字符串与当前日和月份一起显示。 请注意,输出显示适当的本地化字符串,除非当前 UI 区域性为瑞典 (瑞典) 。 由于瑞典语言资源不可用,因此应用会改用默认区域性的资源,即英语。 此示例需要下表中列出的基于文本的资源文件。 Each has a single string resource named DateStart
.
环境 | 文件名 | 资源名称 | 资源值 |
---|---|---|---|
zh-CN | 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;
[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 该方法能够检索法语资源。 但是,当使用瑞典 (瑞典) 文化时,该月的月份和日期出现在瑞典语中,尽管前面字符串采用英语。 这是因为资源管理器找不到本地化的瑞典语言资源,因此它返回默认英语区域性的资源。
此示例需要下表中列出的基于文本的资源文件。 Each has a single string resource named 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) 是线程安全的。