ResourceManager.GetString 方法

定义

返回指定区域性或当前 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

要检索的资源的名称。

返回

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

一个对象,表示为其本地化资源的区域性。

返回

String

为指定区域性本地化的资源的值,如果在资源集中找不到 null,则为 name

例外

name 参数为 null

指定资源的值不是字符串。

未找到可用的资源集,并且没有默认区域性的资源。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException 异常”一节。

默认区域性的资源位于无法找到的附属程序集。 有关如何处理此异常的信息,请参阅 ResourceManager 类主题“处理 MissingManifestResourceException 和 MissingSatelliteAssemblyException 异常”一节。

示例

以下示例使用该方法 GetString(String, CultureInfo) 检索特定于区域性的资源。 此示例的默认区域性是英语 (en) ,它包括法国 (法国) (fr-FR) 和俄罗斯 (俄罗斯) (ru-RU) 区域性的附属程序集。 本示例在调用 GetString(String, CultureInfo)之前将当前区域性和当前 UI 区域性更改为俄罗斯 (俄罗斯) 。 然后,它调用该方法 GetStringDateTime.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.

注解

桌面应用

在桌面应用中,如果 culturenull,该方法 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) 是线程安全的。

另请参阅

适用于