Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

ResourceManager (Clase)

Representa un administrador de recursos que proporciona un acceso más cómodo a los recursos específicos de la referencia cultural en tiempo de ejecución.

Espacio de nombres:  System.Resources
Ensamblado:  mscorlib (en mscorlib.dll)

[SerializableAttribute]
[ComVisibleAttribute(true)]
public class ResourceManager

El tipo ResourceManager expone los siguientes miembros.

  NombreDescripción
Método protegidoCompatible con XNA FrameworkResourceManager()Inicializa una nueva instancia de la clase ResourceManager con valores predeterminados.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsResourceManager(Type)Inicializa una nueva instancia de la clase ResourceManager que busca recursos en los ensamblados satélite a partir de la información del objeto de tipo especificado.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsResourceManager(String, Assembly)Inicializa una nueva instancia de la clase ResourceManager que busca los recursos que contienen los archivos con el nombre raíz especificado, en el objeto dado.
Método públicoCompatible con XNA FrameworkResourceManager(String, Assembly, Type)Inicializa una nueva instancia de la clase ResourceManager que usa un ResourceSet especificado para buscar recursos que contenga archivos con el nombre de raíz especificado en el ensamblado determinado.
Arriba

  NombreDescripción
Propiedad públicaCompatible con XNA FrameworkBaseNameObtiene el nombre raíz de los archivos de recursos donde ResourceManager busca recursos.
Propiedad protegidaFallbackLocationObtiene o establece la ubicación de la que se recuperan los recursos de reserva predeterminados.
Propiedad públicaCompatible con XNA FrameworkIgnoreCaseObtiene o establece un valor que indica si el administrador de recursos permite realizar búsquedas de recursos sin distinción entre mayúsculas y minúsculas en los métodos GetString y GetObject.
Propiedad públicaCompatible con XNA FrameworkResourceSetTypeObtiene el tipo de objeto de conjunto de recursos que el administrador de recursos usa para construir un objeto ResourceSet.
Arriba

  NombreDescripción
Método públicoMiembro estáticoCompatible con XNA FrameworkCreateFileBasedResourceManagerDevuelve un objeto ResourceManager que busca un directorio específico en lugar de en el manifiesto del ensamblado para recursos.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método protegidoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método protegidoMiembro estáticoCompatible con XNA FrameworkGetNeutralResourcesLanguageDevuelve información específica de la referencia cultural para los recursos predeterminados del ensamblado recuperando el valor del atributo NeutralResourcesLanguageAttribute en un ensamblado específico.
Método públicoCompatible con XNA FrameworkGetObject(String)Devuelve el valor del recurso que no sea de cadena especificado.
Método públicoCompatible con XNA FrameworkGetObject(String, CultureInfo)Obtiene el valor del recurso especificado de cadena no adaptado a la referencia cultural especificada.
Método protegidoCompatible con XNA FrameworkGetResourceFileNameGenera el nombre del archivo de recursos para el objeto CultureInfo especificado.
Método públicoCompatible con XNA FrameworkGetResourceSetRecupera el conjunto de recursos para una referencia cultural determinada.
Método protegidoMiembro estáticoCompatible con XNA FrameworkGetSatelliteContractVersionDevuelve la versión especificada por el atributo SatelliteContractVersionAttribute en el ensamblado especificado.
Método públicoGetStream(String)Devuelve un objeto de secuencia de memoria no administrada del recurso especificado.
Método públicoGetStream(String, CultureInfo)Devuelve un objeto de secuencia de memoria no administrada a partir del recurso especificado, utilizando la referencia cultural especificada.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetString(String)Devuelve el valor del recurso de cadena especificado.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetString(String, CultureInfo)Devuelve el valor del recurso de cadena adaptado a la referencia cultural especificada.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsGetType Obtiene el Typede la instancia actual. (Se hereda de Object).
Método protegidoCompatible con XNA FrameworkInternalGetResourceSetProporciona la implementación para buscar un conjunto de recursos.
Método protegidoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoCompatible con XNA FrameworkReleaseAllResourcesIndica al administrador de recursos que llame al método Close en todos los objetos ResourceSet y libere todos los recursos.
Método públicoCompatible con XNA FrameworkCompatible con Biblioteca de clases portableCompatible con .NET para aplicaciones de la Tienda WindowsToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba

  NombreDescripción
Campo protegidoCompatible con XNA FrameworkBaseNameFieldEspecifica el nombre raíz de los archivos de recursos donde ResourceManager busca recursos.
Campo públicoMiembro estáticoCompatible con XNA FrameworkHeaderVersionNumber Especifica la versión de los encabezados de archivos de recursos que la implementación actual de ResourceManager puede interpretar y producir.
Campo públicoMiembro estáticoCompatible con XNA FrameworkMagicNumberConserva el número utilizado para identificar los archivos de recursos.
Campo protegidoCompatible con XNA FrameworkMainAssemblyEspecifica el ensamblado principal que contiene los recursos.
Campo protegidoCompatible con XNA FrameworkResourceSets Obsoleta. Contiene un objeto Hashtable que devuelve una asignación de referencias culturales a objetos ResourceSet.
Arriba

Los recursos de la clase ResourceManager de un binario .resources almacenan que está incrustado en un ensamblado o un archivo independiente .resources. Si se ha encontrado una aplicación y han implementado los recursos localizados en ensamblados satélite, buscan recursos específicos de la referencia cultural, proporciona reserva de recursos cuando no existe un recurso localizado, y la serialización de recursos admite.

Para obtener más información sobre cómo crear y administrar recursos en aplicaciones de escritorio y aplicaciones Tienda Windows , vea las secciones siguientes:

Las aplicaciones de escritorio

Para aplicaciones de escritorio, la clase ResourceManager recupera los recursos de los archivos de recursos binarios (.resources). Normalmente, un compilador del lenguaje o herramienta Assembly Linker (AL.exe) inserta estos archivos de recursos en un ensamblado. También puede utilizar un objeto ResourceManager a los recursos de recuperación directamente de un archivo .resources que no está incrustado en un ensamblado, utilizando el método CreateFileBasedResourceManager .

Nota de precauciónPrecaución

Utilizar archivos independientes .resources en una aplicación ASP.NET interrumpirá la implementación de XCOPY, porque los recursos permanecen bloqueados hasta que el método ReleaseAllResources explícitamente los Collector. Si desea implementar recursos con sus aplicaciones ASP.NET, debe compilar los archivos .resources en ensamblados satélite.

En una aplicación basada recursos, un archivo .resources contiene recursos de la referencia cultural predeterminada cuyos utilizan recursos si no recursos específicos de la referencia cultural se encuentran. Por ejemplo, si la referencia cultural predeterminada de una aplicación es inglés (en), usan los recursos en inglés siempre que los recursos localizados no pueden encontrarse en una referencia cultural concreta, como inglés (Estados Unidos) (en-US) o francés (Francia) (fr-FR). Normalmente, insertan los recursos para la referencia cultural predeterminada en el ensamblado principal de la aplicación, e insertan los recursos para otras referencias culturales localizadas en ensamblados satélite. Los ensamblados satélite contienen sólo recursos. Tienen el mismo nombre de archivo raíz que el ensamblado principal y una extensión .resources.dll. Para las aplicaciones cuyos no se registran para ensamblados en la caché global de ensamblados, almacenan los ensamblados satélite en un subdirectorio de aplicación cuyo nombre corresponda a la referencia cultural del ensamblado.

2xsy4hac.collapse_all(es-es,VS.110).gifCrear recursos

Cuando desarrolle una aplicación basada recurso, se almacena información de recursos en archivos de texto (archivos que tienen una extensión .txt o de .restext) o archivos XML (archivos que tienen una extensión .resx). A continuación compila el texto o archivos XML con Generador de archivos de recursos (Resgen.exe) para crear un archivo .resources binarios. Puede incrustar el archivo resultante .resources en un ejecutable o biblioteca utilizando una opción del compilador como /resources para los compiladores de C# y Visual Basic, o puede incrustarlo en un ensamblado satélite utilizando herramienta Assembly Linker (Al.exe). Si incluye un archivo .resx en el proyecto de Visual Studio, Visual Studio administra la compilación y la incrustación de recursos predeterminados y traducidos automáticamente como parte del proceso de compilación.

Idealmente, debe crear recursos para cada idioma que admita la aplicación, o al menos de un subconjunto significativo de cada lenguaje. Los nombres de archivo .resources binarios sigan la convención de nomenclatura. basenamecultureName.resources, donde el nombre de la aplicación o el nombre basename de una clase, dependiendo del nivel de detalle desee. La propiedad CultureInfo.Name se utiliza para determinar cultureName. Un recurso para la referencia cultural predeterminada de la aplicación debe llamarse basename.resources.

Por ejemplo, supongamos que un ensamblado tiene varios recursos en un archivo de recursos que tiene el nombre base MyResources. Estos archivos de recursos deben tener nombres como MyResources.ja-JP.resources para la referencia cultural (Japonés) de Japón, MyResources.de.resources para la referencia cultural Alemán, MyResources.zh-CHS.resources para la referencia cultural china simplificado, y MyResources.fr-BE.resources para la referencia cultural Francés (de Bélgica). El archivo de recursos predeterminado debe denominarse MyResources.resources. Los archivos de recursos específicos de la referencia cultural se empaquetan normalmente en ensamblados satélite para cada referencia cultural. El archivo de recursos predeterminado se debe insertar en el ensamblado principal de la aplicación.

Observe que herramienta Assembly Linker permite que marquen recursos como privados, pero debe marcarlos siempre como el público por lo que pueden tener acceso otros ensamblados. (Dado un ensamblado satélite no contiene código, recursos que se marcan como el privado no está disponible a la aplicación mediante cualquier mecanismo.)

Para obtener más información sobre cómo crear, empaquetamiento dados, e implementar recursos, vea los artículos Crear archivos de recursos para aplicaciones de escritorio, Crear ensamblados satélite para aplicaciones de escritorio, y Empaquetar e implementar recursos en aplicaciones de escritorio.

2xsy4hac.collapse_all(es-es,VS.110).gifCrear instancias de un objeto ResourceManager

Cree instancias de un objeto ResourceManager que recupera recursos de un archivo .resources incrustado llamando a una de sus sobrecargas del constructor de clase. Esto relaciona estrechamente un objeto ResourceManager a un archivo determinado .resources y con cualquier archivo traducido asociado .resources en ensamblados satélite.

Los dos constructores normalmente con nombre son:

  • ResourceManager(String, Assembly) busca recursos basados en dos fragmentos de información que proporcione: el nombre base del archivo .resources y ensamblado en los que el archivo predeterminado .resources reside. Nombre base incluye el espacio de nombres y el nombre raíz del archivo .resources, sin su referencia cultural o extensión. Observe que los archivos .resources compilados de línea de comandos normalmente no incluyen un espacio de nombres, mientras que los archivos .resources que se crean en el entorno de Visual Studio. Por ejemplo, si un archivo de recursos se denomina MyCompany.StringResources.resources y se llama al constructor ResourceManager de un método estático denominado Example.Main, el siguiente código crea instancias de un objeto ResourceManager que pueda recuperar recursos de archivo .resources:

    
    ResourceManager rm = new ResourceManager("MyCompany.StringResources", 
                                             typeof(Example).Assembly);
    
    
    
  • ResourceManager(Type) busca recursos en ensamblados satélite según la información de un objeto de tipo. Nombre completo del tipo corresponde al nombre base del archivo .resources sin la extensión de nombre de archivo. En las aplicaciones de escritorio que se crean mediante el Diseñador de recursos de Visual Studio, Visual Studio crea una clase contenedora cuyo nombre completo es igual que el nombre raíz del archivo .resources. Por ejemplo, si un archivo de recursos se denomina MyCompany.StringResources.resources y hay una clase contenedora denominada MyCompany.StringResources, el siguiente código crea instancias de un objeto ResourceManager que pueda recuperar recursos de archivo .resources:

    
    ResourceManager rm = new ResourceManager(typeof(MyCompany.StringResources));
    
    
    

Si los recursos apropiados no se encuentran, la llamada al constructor crea un objeto ResourceManager válido. Sin embargo, el intento de recuperar un recurso produce una excepción MissingManifestResourceException . Para obtener información sobre la administración de excepción, vea la sección Controlar las excepciones de MissingManifestResourceException y de MissingSatelliteAssembly más adelante en este artículo.

El ejemplo siguiente muestra cómo crear instancias de un objeto ResourceManager . Contiene el código fuente de una ejecutable llamado ShowTime.exe. También incluye el archivo de texto siguiente denominado Strings.txt que contiene un único recurso de cadena, TimeHeader:

TimeHeader=The current time is

Puede utilizar un archivo por lotes para generar el archivo de recursos y para insertarlo en el ejecutable. A continuación se muestra el archivo por lotes para generar un ejecutable mediante el compilador de C#:


resgen strings.txt
csc ShowTime.cs /resource:strings.resources

Para el compilador de Visual Basic, puede usar el archivo por lotes siguiente:


resgen strings.txt
vbc ShowTime.vb /resource:strings.resources


using System;
using System.Resources;

public class Example
{
   public static void Main()
   {
      ResourceManager rm = new ResourceManager("Strings", 
                               typeof(Example).Assembly);
      string timeString = rm.GetString("TimeHeader");
      Console.WriteLine("{0} {1:T}", timeString, DateTime.Now);   
   }
}
// The example displays output like the following:
//        The current time is 2:03:14 PM


2xsy4hac.collapse_all(es-es,VS.110).gifResourceManager y recursos específicos de la referencia cultural

Una aplicación adaptada requiere recursos ser implementada como se describe en el artículo Empaquetar e implementar recursos en aplicaciones de escritorio. Si configura para los ensamblados correctamente, el Administrador de recursos determina qué recursos se van a recuperar basándose en la propiedad Thread.CurrentUICulture del subproceso actual. (Dicha propiedad devolverá la referencia cultural de la interfaz de usuario del subproceso actual.) Por ejemplo, si se compila una aplicación con los recursos predeterminados del idioma inglés en el ensamblado principal y con recursos de idioma francés y ruso en dos ensamblados satélite, y la propiedad Thread.CurrentUICulture se establece en el fr-FR, el Administrador de recursos recupera los recursos franceses.

Puede establecer la propiedad CurrentUICulture explícita o implícitamente. La forma se establezca determina cómo el objeto ResourceManager recupera los recursos basados en la referencia cultural:

  • Si establece explícitamente la propiedad Thread.CurrentUICulture en una referencia cultural concreta, el Administrador de recursos siempre recupera los recursos de esa referencia cultural, independientemente del lenguaje el explorador o el sistema operativo. Considere una aplicación compilada con los recursos predeterminados del idioma inglés y tres ensamblados satélite que contienen recursos para inglés (Estados Unidos), francés (Francia), y ruso (Rusia). Si la propiedad CurrentUICulture está establecida en fr-FR, el objeto ResourceManager siempre recupera los recursos en francés (Francia), aunque el idioma del sistema operativo del usuario no sea francés. Asegúrese de que este es el comportamiento deseado antes de establecer la propiedad explícitamente.

    En aplicaciones ASP.NET, debe establecer la propiedad Thread.CurrentUICulture explícitamente, porque es improbable que la configuración del servidor coincida las solicitudes de cliente entrantes. Una aplicación ASP.NET puede establecer explícitamente la propiedad Thread.CurrentUICulture en el idioma aceptado por el explorador.

    Si se establece la propiedad Thread.CurrentUICulture define la referencia cultural de la interfaz de usuario actual para ese subproceso. No afecta a la referencia cultural de la interfaz de usuario actual de otros subprocesos en una aplicación.

  • Puede establecer la referencia cultural de la IU de todos los subprocesos en un dominio de aplicación asignando un objeto CultureInfo que representa esa referencia cultural a la propiedad estática CultureInfo.DefaultThreadCurrentUICulture .

  • Si no establece explícitamente la referencia cultural de la interfaz de usuario actual y no se define una referencia cultural predeterminada para el dominio de aplicación actual, la propiedad CultureInfo.CurrentUICulture se establece implícitamente por la función de Windows GetUserDefaultUILanguage . Esta función la proporciona la Interfaz de usuario multilingüe (MUI), que permite al usuario establecer el idioma predeterminado. Si el usuario no establece el idioma de la interfaz de usuario, se establecerá de forma predeterminada en el idioma instalado en el sistema, que es el idioma de los recursos del sistema operativo.

“Hello el ejemplo siguiente sencillo World” establece la referencia cultural de la interfaz de usuario actual explícitamente. Contiene recursos para tres referencias culturales: Inglés (Estados Unidos o en-US, francés (Francia) o fr-FR, y ruso (Rusia) o ru-RU. Los recursos de en-US en un archivo de texto denominado Greetings.txt:

HelloString=Hello world!

Los recursos fr-FR en un archivo de texto denominado Greetings.fr-FR.txt:

HelloString=Salut tout le monde!

Los recursos ru-RU en un archivo de texto denominado Greetings.ru-RU.txt:

HelloString=Всем привет!

Éste es el código fuente del ejemplo (Example.vb para la versión de Visual Basic o Example.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()
   {
      // Create array of supported cultures
      string[] cultures = {"en-CA", "en-US", "fr-FR", "ru-RU" };
      Random rnd = new Random();
      int cultureNdx = rnd.Next(0, cultures.Length);
      CultureInfo originalCulture = Thread.CurrentThread.CurrentCulture;
      ResourceManager rm = new ResourceManager("Greetings", typeof(Example).Assembly);
      try {
         CultureInfo newCulture = new CultureInfo(cultures[cultureNdx]);
         Thread.CurrentThread.CurrentCulture = newCulture;
         Thread.CurrentThread.CurrentUICulture = newCulture;
         string greeting = String.Format("The current culture is {0}.\n{1}",
                                         Thread.CurrentThread.CurrentUICulture.Name,
                                         rm.GetString("HelloString"));
         Console.WriteLine(greeting);
      }
      catch (CultureNotFoundException e) {
         Console.WriteLine("Unable to instantiate culture {0}", e.InvalidCultureName);
      }
      finally {
         Thread.CurrentThread.CurrentCulture = originalCulture;
         Thread.CurrentThread.CurrentUICulture = originalCulture;
      }
   }
}
// The example displays output like the following:
//       The current culture is ru-RU.
//       Всем привет!


Para compilar este ejemplo, cree un archivo por lotes (.bat) que contenga los siguientes comandos y ejecútelo desde el símbolo del sistema. Si utiliza C#, especifique csc en lugar de vbc y Example.cs en lugar de Example.vb.

resgen Greetings.txt 
vbc Example.vb /resource:Greetings.resources

resgen Greetings.fr-FR.txt
Md fr-FR
al /embed:Greetings.fr-FR.resources /culture:fr-FR /out:fr-FR\Example.resources.dll

resgen Greetings.ru-RU.txt
Md ru-RU
al /embed:Greetings.ru-RU.resources /culture:ru-RU /out:ru-RU\Example.resources.dll

2xsy4hac.collapse_all(es-es,VS.110).gifRecuperar recursos

Se llama a los métodos GetObject(String) y GetString(String) para tener acceso a un recurso concreto. También puede llamar al método GetStream(String) para recuperar recursos que no son de cadena como una matriz de bytes. De forma predeterminada, en una aplicación que ha buscado recursos, retorno de estos métodos que el recurso para la referencia cultural determinó por la referencia cultural de la interfaz de usuario actual del subproceso que realice la llamada. Vea la sección anterior, ResourceManager y recursos específicos de la referencia cultural, para obtener más información sobre cómo la referencia cultural de la interfaz de usuario actual de un subproceso está definido. Si el Administrador de recursos no encuentra el recurso para la referencia cultural de la interfaz de usuario del subproceso actual, utiliza un proceso de reserva para recuperar el recurso especificado. Si el Administrador de recursos no encuentra ningún recursos localizado, utiliza los recursos de la referencia cultural predeterminada. Para obtener más información sobre las reglas de reserva de recursos, vea la sección “Proceso de reserva de recursos” del artículo Empaquetar e implementar recursos en aplicaciones de escritorio.

NotaNota

Si el archivo .resources especificado en el constructor de clase ResourceManager no se encuentra, el intento de recuperar creación de un recurso una excepción MissingManifestResourceException o MissingSatelliteAssemblyException . Para obtener información sobre la administración de excepción, vea la sección Controlar las excepciones de MissingManifestResourceException y de MissingSatelliteAssemblyException más adelante en este tema.

El ejemplo siguiente utiliza el método GetString para recuperar recursos específicos de la referencia cultural. Consiste en los recursos compilados de los archivos .txt para (en), francés (Francia) (fr-FR), y ruso inglés (Rusia) (ru-RU) las referencias culturales. El ejemplo cambia la referencia cultural actual y la referencia cultural de la interfaz de usuario del valor actual en Inglés (Estados Unidos), en francés (Francia), a ruso (Rusia), y éste sueco (Suecia). Después llama al método GetString para recuperar la cadena adaptada, que muestra junto con el día y el mes actual. Observe que la salida muestra la cadena adaptada adecuada excepto cuando la referencia cultural de la interfaz de usuario actual es sueca (Suecia). Como los recursos suecos de lenguaje no están disponibles, la aplicación en su lugar utiliza los recursos de la referencia cultural predeterminada, que es el inglés.

El ejemplo requiere archivos de recursos basados en texto enumerados en la tabla siguiente. Cada uno 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, el le más c'est

ru-RU

DateStrings.ru-RU.txt

DateStart

Сегодня

Éste 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# el código).


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.


Para compilar este ejemplo, cree un archivo por lotes que contenga los siguientes comandos y ejecútelo desde el símbolo del sistema. Si utiliza C#, especifique csc en lugar de vbc y showdate.cs en lugar de showdate.vb.


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

Hay dos maneras de recuperar recursos de una referencia cultural concreta distinta de la referencia cultural de la interfaz de usuario actual:

  • Puede llamar a GetString(String, CultureInfo), GetObject(String, CultureInfo), o el método GetStream(String, CultureInfo) para recuperar un recurso para una referencia cultural concreta. Si un recurso localizado no se encuentra, el Administrador de recursos utiliza el proceso de reserva de recursos para buscar un recurso adecuado.

  • Puede llamar al método GetResourceSet para obtener un objeto ResourceSet que representa los recursos para una referencia cultural determinada. En la llamada al método, puede determinar si el Administrador de recursos busca las referencias culturales primarias si no encuentra recursos localizados, o si vuelve simplemente los recursos de la referencia cultural predeterminada. Puede utilizar los métodos ResourceSet para tener acceso a los recursos (localizados para esa referencia cultural) por nombre, o para enumerar los recursos del conjunto.

2xsy4hac.collapse_all(es-es,VS.110).gifControlar las excepciones de MissingManifestResourceException y de MissingSatelliteAssemblyException

Si intenta recuperar un recurso concreto, pero el administrador de recursos no puede encontrar que han definido el recurso y o ninguna referencia cultural predeterminada o recursos de la referencia cultural predeterminada no puede localizarse, el Administrador de recursos produce una excepción MissingManifestResourceException si espera encontrar recursos en el ensamblado principal o MissingSatelliteAssemblyException si espera encontrar recursos en un ensamblado satélite. Observe que la excepción se produzca cuando llama a un método de recuperación de recursos como GetString o GetObject, y no cuando crea instancias de un objeto ResourceManager .

Excepción que se produce normalmente en condiciones siguientes:

  • El archivo de recursos o el ensamblado satélite adecuado no existe. Si el Administrador de recursos espera que incrusta los recursos predeterminados de la aplicación en el ensamblado principal de la aplicación, se ausentes. Si el atributo NeutralResourcesLanguageAttribute indica qué recursos predeterminados de la aplicación residen en un ensamblado satélite, ese ensamblado no se encuentra. Cuando compile la aplicación, asegúrese de que incrusta los recursos en el ensamblado principal o que generan y se llama al ensamblado satélite necesario correctamente. Su nombre debe tener la forma nombreaplic.resources.dll, y debe encontrarse en un directorio con el nombre de la referencia cultural cuyos recursos contiene.

  • Su aplicación no tiene un valor predeterminado o una referencia cultural neutra definida. Agregue el atributo NeutralResourcesLanguageAttribute a un archivo de código fuente o el archivo de información de proyecto (AssemblyInfo.vb para una aplicación de Visual Basic o AssemblyInfo.cs para una aplicación de C#).

  • El parámetro baseName del constructor ResourceManager(String, Assembly) no especifica el nombre de un archivo .resources. El nombre debe incluir el espacio de nombres completo pero aún no la extensión de nombre de archivo de recursos. Normalmente, los archivos de recursos que se crean en espacios de nombres de Visual Studio, pero archivos de recursos que se crean y se compilan en el símbolo del sistema no. Puede determinar los nombres de archivos .resources incrustados compilando y ejecutando la utilidad siguiente. Ésta es una aplicación de consola que acepta el nombre del ensamblado principal o un ensamblado satélite como parámetro de línea de comandos. Muestra cadenas que deberían proporcionarse como parámetro baseName para que el administrador de recursos pueda correctamente identificación del recurso.

    
    using System;
    using System.IO;
    using System.Reflection;
    using System.Resources;
    
    public class Example
    {
       public static void Main()
       {
          if (Environment.GetCommandLineArgs().Length == 1) { 
             Console.WriteLine("No filename.");
             return;
          }
    
          string filename = Environment.GetCommandLineArgs()[1].Trim();
          // Check whether the file exists.
          if (! File.Exists(filename)) {
             Console.WriteLine("{0} does not exist.", filename);
             return;
          }   
    
          // Try to load the assembly.
          Assembly assem = Assembly.LoadFrom(filename);
          Console.WriteLine("File: {0}", filename);
    
          // Enumerate the resource files.
          string[] resNames = assem.GetManifestResourceNames();
          if (resNames.Length == 0)
             Console.WriteLine("   No resources found.");
    
          foreach (var resName in resNames)
             Console.WriteLine("   Resource: {0}", resName.Replace(".resources", ""));
    
          Console.WriteLine();
       }
    }
    
    
    

Si está modificando la referencia cultural actual de la aplicación explícitamente, también debe recordar que el administrador de recursos recupera un conjunto de recursos según el valor de la propiedad CultureInfo.CurrentUICulture , no la propiedad CultureInfo.CurrentCulture . Normalmente, si cambia un valor, también debe cambiar el otro.

2xsy4hac.collapse_all(es-es,VS.110).gifVersión de recursos

Como el ensamblado principal que contiene los recursos predeterminados de una aplicación es independiente de los ensamblados satélite de la aplicación, puede liberar una nueva versión del ensamblado principal sin implementar los ensamblados satélite. Puede usar el atributo SatelliteContractVersionAttribute para utilizar ensamblados satélite existentes y para indicar al Administrador de recursos para no implementarlos de nuevo con una nueva versión del ensamblado principal,

Para obtener más información sobre la compatibilidad de versiones de los ensamblados satélite, vea el artículo Recuperar recursos de aplicaciones de escritorio.

2xsy4hac.collapse_all(es-es,VS.110).gif< satelliteassemblies > Nodo de archivo de configuración

Para las aplicaciones ejecutables implementadas y ejecutarse desde un sitio web (archivos de HREF .exe), el objeto ResourceManager puede intente buscar los ensamblados satélite sobre el sitio, que puede dañar el rendimiento de la aplicación. Para eliminar el problema de rendimiento, puede limitar esto probing los ensamblados satélite que ha implementado con la aplicación. Para ello, se crea un nodo <satelliteassemblies> en el archivo de configuración de la aplicación para especificar que ha implementado un conjunto específico de referencias culturales para la aplicación, y que el objeto ResourceManager no debe intentar búsqueda de cualquier referencia cultural que no aparece en ese nodo.

NotaNota

La alternativa preferida a crear un nodo <satelliteassemblies> es utilizar la característica Manifiesto de la implementación ClickOnce

En el archivo de configuración de la aplicación, cree una sección similar al siguiente:

<?xml version ="1.0"?>
<configuration>
    <satelliteassemblies>
        <assembly name="MainAssemblyName, Version=versionNumber, Culture=neutral, PublicKeyToken=null|yourPublicKeyToken">
            <culture>cultureName1</culture>
            <culture>cultureName2</culture>
            <culture>cultureName3</culture>
        </assembly>
    </satelliteassemblies>
</configuration>

Edite esta información de configuración como sigue:

  • Especifique uno o más nodos <assembly> para cada ensamblado principal implementar, donde cada nodo especifica un nombre de ensamblado completo. Especifique el nombre del ensamblado principal en lugar de NombreEnsambladoPrincipal y especifique los valores de los atributos Version, PublicKeyToken y Culture que correspondan al ensamblado principal.

    En el atributo Version, especifique el número de versión del ensamblado. Por ejemplo, la primera versión del ensamblado podría ser el número de versión 1.0.0.0.

    Para el atributo PublicKeyToken , especifique la palabra clave null si no ha firmado el ensamblado con un nombre seguro, o especifique su token de clave pública si se ha firmado el ensamblado.

    Para el atributo Culture , especifique la palabra clave neutral para informar sobre el ensamblado principal y haga la clase ResourceManager para buscar sólo para las referencias culturales enumeradas en los nodos <culture> .

    Para obtener información sobre nombres de ensamblado completo, vea el artículo Nombres de ensamblado. Para obtener más información sobre los ensamblados con nombre seguro, vea el artículo Crear y utilizar ensamblados con nombre seguro.

  • Especifique uno o varios nodos <culture> con un nombre de referencia cultural concreto, como "fr-FR", o un nombre de referencia cultural neutro, como "fr."

Si se necesitan recursos para algún ensamblado que no aparezca en el nodo <satelliteassemblies>, la clase ResourceManager busca las referencias culturales utilizando reglas de búsqueda estándar.

Aplicaciones de Tienda Windows

Nota importanteImportante

Aunque la clase ResourceManager se admite en aplicaciones de Tienda Windows , no se recomienda su uso. Utilice esta clase cuando desarrolle proyectos de Biblioteca de clases portable que se pueden utilizar con aplicaciones Tienda Windows . Para recuperar recursos de aplicaciones Tienda Windows , utilice Windows.ApplicationModel.Resources.ResourceLoader la clase en su lugar.

Para aplicaciones Tienda Windows , los recursos de la clase ResourceManager de archivos (PRI) de índice del paquete. Un único archivo de PRI (el archivo de PRI de empaquetado de la aplicación) contiene los recursos para la referencia cultural predeterminada y cualquier referencia cultural localizada. Puede usar la utilidad de MakePRI para crear un archivo de PRI de uno o más archivos de recursos que están en formato de recursos XML (.resw). Para los recursos incluidos en un proyecto de Visual Studio, Visual Studio controla el proceso de crear y de empaquetar el archivo de PRI automáticamente. Puede utilizar la clase ResourceManager de .NET Framework para tener acceso a la aplicación o recursos de biblioteca.

Puede crear instancias de un objeto ResourceManager para una aplicación Tienda Windows de la misma manera que para una aplicación de escritorio.

A continuación puede tener acceso a los recursos para una referencia cultural concreta pasando el nombre de recurso que se recuperará el método GetString(String) . De forma predeterminada, este método devuelve el recurso para la referencia cultural determinada por la referencia cultural de la interfaz de usuario actual del subproceso que realice la llamada. También puede recuperar recursos para una referencia cultural concreta pasando el nombre del recurso y un objeto CultureInfo que represente la referencia cultural cuyo recurso debería recuperarse al método GetString(String, CultureInfo) . Si el recurso para la referencia cultural de la interfaz de usuario actual o la referencia cultural especificada no se encuentra, el Administrador de recursos utiliza una lista de reserva de idioma de IU para buscar un recurso apropiado.

El ejemplo siguiente muestra cómo utilizar una referencia cultural explícita y la referencia cultural de la interfaz de usuario actual implícita para obtener recursos de cadena de un ensamblado principal y un ensamblado satélite. Para obtener más información, vea “ubicaciones de los directorios de los ensamblados satélite no instalados en la sección de la caché global de ensamblados” del tema Crear ensamblados satélite para aplicaciones de escritorio .

Para ejecutar este ejemplo:

  1. En el directorio de la aplicación, cree un archivo denominado rmc.txt que contiene las cadenas de recursos siguientes:

    
    day=Friday
    year=2006
    holiday="Cinco de Mayo"
    
    
  2. Utilice Generador de archivos de recursos para generar el archivo de recursos de rmc.resources del archivo de entrada de rmc.txt como sigue:

    resgen rmc.txt
    
  3. Cree un subdirectorio de la aplicación y denomínelo “es-MX”. Es el nombre de referencia cultural de ensamblado satélite que creará en los tres pasos.

  4. Cree un archivo denominado rmc.es-MX.txt en el directorio es-MX que contiene cadenas de recursos siguientes:

    
    day=Viernes
    year=2006
    holiday="Cinco de Mayo"
    
    
  5. Utilice Generador de archivos de recursos para generar el archivo de recursos de rmc.es-MX.resources del archivo de entrada de rmc.es-MX.txt como sigue:

    resgen rmc.es-MX.txt
    
  6. Supongamos que el nombre de archivo de este ejemplo es rmc.vb o rmc.cs. Copie el siguiente código fuente en un archivo. Después compile e inserte el archivo de recursos de ensamblado principal, rmc.resources, en el ensamblado ejecutable. Si usa el compilador de Visual Basic, la sintaxis es:

    vbc rmc.vb /resource:rmc.resources
    

    La sintaxis correspondiente del compilador de C# es:

    csc /resource:rmc.resources rmc.cs
    
  7. Utilice herramienta Assembly Linker para crear un ensamblado satélite. Si el nombre base de la aplicación es RMC, el nombre de ensamblado satélite debe ser rmc.resources.dll. El ensamblado satélite debe ser creado en el directorio es-MX. Si el es-MX es el directorio actual, use este comando:

    al /embed:rmc.es-MX.resources /c:es-MX /out:rmc.resources.dll 
    
  8. Ejecute rmc.exe para recopilar y mostrar las cadenas de recurso incrustado.


using System;
using System.Resources;
using System.Reflection;
using System.Threading;
using System.Globalization;

class Example 
{
    public static void Main() 
    {
    string day;
    string year;
    string holiday;
    string celebrate = "{0} will occur on {1} in {2}.\n";

    // Create a resource manager. 
    ResourceManager rm = new ResourceManager("rmc", 
                             typeof(Example).Assembly);

    Console.WriteLine("Obtain resources using the current UI culture.");

    // Get the resource strings for the day, year, and holiday 
    // using the current UI culture. 
    day  = rm.GetString("day");
    year = rm.GetString("year");
    holiday = rm.GetString("holiday");
    Console.WriteLine(celebrate, holiday, day, year);

    // Obtain the es-MX culture.
    CultureInfo ci = new CultureInfo("es-MX");

    Console.WriteLine("Obtain resources using the es-MX culture.");

   // Get the resource strings for the day, year, and holiday 
   // using the specified culture. 
    day  = rm.GetString("day", ci);
    year = rm.GetString("year", ci);
    holiday = rm.GetString("holiday", ci);
// ---------------------------------------------------------------
// Alternatively, comment the preceding 3 code statements and 
// uncomment the following 4 code statements:
// ----------------------------------------------------------------
// Set the current UI culture to "es-MX" (Spanish-Mexico).
//    Thread.CurrentThread.CurrentUICulture = ci;

// Get the resource strings for the day, year, and holiday 
// using the current UI culture. Use those strings to 
// display a message. 
//    day  = rm.GetString("day");
//    year = rm.GetString("year");
//    holiday = rm.GetString("holiday");
// ---------------------------------------------------------------

// Regardless of the alternative that you choose, display a message 
// using the retrieved resource strings.
    Console.WriteLine(celebrate, holiday, day, year);
    }
}
/*
This example displays the following output:

   Obtain resources using the current UI culture.
   "5th of May" will occur on Friday in 2006.

   Obtain resources using the es-MX culture.
   "Cinco de Mayo" will occur on Viernes in 2006.
*/


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Este tipo es seguro para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft