Métodos System.Resources.ResourceManager.GetString

En este artículo se proporcionan comentarios adicionales a la documentación de referencia de esta API.

La IgnoreCase propiedad determina si la comparación de name con los nombres de los recursos no distingue mayúsculas de minúsculas (el valor predeterminado) o distingue mayúsculas de minúsculas.

Nota:

Los GetString métodos pueden producir más excepciones de las enumeradas. Una razón por la que esto puede ocurrir es si un método al que llama este método produce una excepción. Por ejemplo, se podría producir una FileLoadException excepción si se realizó un error al implementar o instalar un ensamblado satélite, o se podría producir una SerializationException excepción si un tipo definido por el usuario produce una excepción definida por el usuario cuando el tipo se deserializa.

Método GetString(String)

Aplicaciones de escritorio

En las aplicaciones de escritorio, el recurso que se devuelve se localiza para la referencia cultural de la interfaz de usuario del subproceso actual, tal como se define en la CultureInfo.CurrentUICulture propiedad . Si el recurso no se ha localizado para esa referencia cultural, resource manager sondea un recurso siguiendo los pasos descritos en la sección "Proceso de reserva de recursos" del artículo Empaquetado e implementación de recursos . Si no se encuentra ningún conjunto utilizable de recursos localizados, el administrador de recursos recurre a los recursos de la referencia cultural predeterminada. Si el administrador de recursos no puede cargar el conjunto de recursos de la referencia cultural predeterminada, el método produce una MissingManifestResourceException excepción o, si se espera que el conjunto de recursos resida en un ensamblado satélite, una MissingSatelliteAssemblyException excepción. Si el administrador de recursos puede cargar un conjunto de recursos adecuado, pero no encuentra un recurso denominado name, el método devuelve null.

Aplicaciones de Windows 8.x

Importante

Aunque la ResourceManager clase se admite en aplicaciones de Windows 8.x, no se recomienda su uso. Use esta clase solo cuando desarrolle proyectos de biblioteca de clases portables que se pueden usar con aplicaciones de Windows 8.x. Para recuperar recursos de aplicaciones de Windows 8.x, use la clase Windows.ApplicationModel.Resources.ResourceLoader en su lugar.

En las aplicaciones de Windows 8.x, el GetString(String) método devuelve el valor del name recurso de cadena, localizado para la configuración actual de la referencia cultural de la interfaz de usuario del autor de la llamada. La lista de referencias culturales se deriva de la lista de idiomas preferidos de la interfaz de usuario del sistema operativo. Si el administrador de recursos no puede coincidir name, el método devuelve null.

Ejemplo

En el ejemplo siguiente se usa el GetString método para recuperar recursos específicos de la referencia cultural. Consta de recursos compilados a partir de archivos de .txt para las referencias culturales inglés (en), francés (Francia) (fr-FR) y ruso (Rusia) (ru-RU). En el ejemplo se cambia la referencia cultural actual y la referencia cultural actual de la interfaz de usuario a inglés (Estados Unidos), francés (Francia), ruso (Rusia) y sueco (Suecia). A continuación, llama al GetString método para recuperar la cadena localizada, que se muestra junto con el día y el mes actuales. Observe que la salida muestra la cadena localizada adecuada, excepto cuando la referencia cultural actual de la interfaz de usuario es sueca (Suecia). Dado que los recursos de idioma sueco no están disponibles, la aplicación usa en su lugar los recursos de la referencia cultural predeterminada, que es inglés. En el ejemplo se requieren los archivos de recursos basados en texto enumerados en la tabla siguiente. Cada tiene un único recurso de cadena denominado DateStart.

Referencia cultural Nombre de archivo Nombre del recurso Valor del recurso
en-US DateStrings.txt DateStart Hoy es
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Puede usar el siguiente archivo por lotes para compilar el ejemplo de C#. Si usa Visual Basic, cambie csc por vbcy la extensión del archivo de código fuente de .cs a .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

Este es el código fuente del ejemplo (ShowDate.vb para la versión de Visual Basic o ShowDate.cs para la versión de C#).

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.

Método GetString(String, CultureInfo)

Aplicaciones de escritorio

En las aplicaciones de escritorio, si culture es , el GetString(String, CultureInfo) método usa la referencia cultural de la interfaz de usuario actual obtenida de la CultureInfo.CurrentUICulturenullpropiedad .

El recurso que se devuelve se localiza para la referencia cultural especificada por el culture parámetro . Si el recurso no se ha localizado para culture, el administrador de recursos sondea un recurso siguiendo los pasos descritos en la sección "Proceso de reserva de recursos" del tema Empaquetado e implementación de recursos . Si no se encuentra ningún conjunto utilizable de recursos, el administrador de recursos recurre a los recursos de la referencia cultural predeterminada. Si el administrador de recursos no puede cargar el conjunto de recursos de la referencia cultural predeterminada, el método produce una MissingManifestResourceException excepción o, si se espera que el conjunto de recursos resida en un ensamblado satélite, una MissingSatelliteAssemblyException excepción. Si el administrador de recursos puede cargar un conjunto de recursos adecuado, pero no encuentra un recurso denominado name, el método devuelve null.

Aplicaciones de Windows 8.x

Importante

Aunque la ResourceManager clase se admite en aplicaciones de Windows 8.x, no se recomienda su uso. Use esta clase solo cuando desarrolle proyectos de biblioteca de clases portables que se pueden usar con aplicaciones de Windows 8.x. Para recuperar recursos de aplicaciones de Windows 8.x, use la clase Windows.ApplicationModel.Resources.ResourceLoader en su lugar.

En las aplicaciones de Windows 8.x, el GetString(String, CultureInfo) método devuelve el valor del name recurso de cadena, localizado para la referencia cultural especificada por el culture parámetro . Si el recurso no está localizado para la culture referencia cultural, la búsqueda usa toda la lista de reserva de idioma de Windows 8 y se detiene después de buscar en la referencia cultural predeterminada. Si el administrador de recursos no puede coincidir name, el método devuelve null.

Ejemplo

En el ejemplo siguiente se usa el GetString(String, CultureInfo) método para recuperar recursos específicos de la referencia cultural. La referencia cultural predeterminada del ejemplo es inglés (en) e incluye ensamblados satélite para las referencias culturales francés (Francia) (fr-FR) y ruso (Rusia) (ru-RU). En el ejemplo se cambia la referencia cultural actual y la referencia cultural actual de la interfaz de usuario a Ruso (Rusia) antes de llamar a GetString(String, CultureInfo). A continuación, llama al método y al GetStringDateTime.ToString(String, IFormatProvider) método y pasa objetos que representan las referencias culturales CultureInfo francesa (Francia) y sueca (Suecia) a cada método. En la salida, el mes y el día del mes, así como la cadena que los precede aparecen en francés, ya que el GetString método puede recuperar el recurso de idioma francés. Sin embargo, cuando se usa la referencia cultural sueca (Suecia), el mes y el día del mes aparecen en sueco, aunque la cadena que los precede está en inglés. Esto se debe a que el administrador de recursos no encuentra recursos de idioma sueco localizados, por lo que devuelve un recurso para la referencia cultural predeterminada en inglés en su lugar.

En el ejemplo se requieren los archivos de recursos basados en texto enumerados en la tabla siguiente. Cada tiene un único recurso de cadena denominado DateStart.

Referencia cultural Nombre de archivo Nombre del recurso Valor del recurso
en-US DateStrings.txt DateStart Hoy es
fr-FR DateStrings.fr-FR.txt DateStart Aujourd'hui, c'est le
ru-RU DateStrings.ru-RU.txt DateStart Сегодня

Puede usar el siguiente archivo por lotes para compilar el ejemplo de Visual Basic. Para compilar en C#, cambie a cscy cambie vbc la extensión del archivo de código fuente de .vb a .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

Este es el código fuente del ejemplo (ShowDate.vb para la versión de Visual Basic o ShowDate.cs para la versión de C#).

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.