Recursos en aplicaciones .NETResources in .NET Apps

Casi todas las aplicaciones de calidad de producción tienen que utilizar recursos.Nearly every production-quality app has to use resources. Un recurso es cualquier dato no ejecutable que se implemente lógicamente con una aplicación.A resource is any nonexecutable data that is logically deployed with an app. Los recursos pueden mostrarse en una aplicación como mensajes de error o como parte de la interfaz de usuario.A resource might be displayed in an app as error messages or as part of the user interface. Los recursos pueden contener datos con varios formatos, como objetos almacenados, cadenas e imágenes.Resources can contain data in a number of forms, including strings, images, and persisted objects. (Para poder escribir objetos almacenados en un archivo de recursos, los objetos deben ser serializables). Si los datos se almacenan en un archivo de recursos, es posible modificarlos sin volver a compilar toda la aplicación.(To write persisted objects to a resource file, the objects must be serializable.) Storing your data in a resource file enables you to change the data without recompiling your entire app. Esto también permite almacenar los datos en una sola ubicación y elimina la necesidad de confiar en los datos codificados de forma rígida almacenados en varias ubicaciones.It also enables you to store data in a single location, and eliminates the need to rely on hard-coded data that is stored in multiple locations.

.NET Framework y .NET Core proporcionan numerosas prestaciones para crear y localizar recursos.The .NET Framework and .NET Core provide comprehensive support for the creation and localization of resources. Además, .NET admite un modelo simple para empaquetar e implementar recursos localizados.In addition, .NET supports a simple model for packaging and deploying localized resources.

Para obtener información sobre los recursos de ASP.NET, vea Información general sobre los recursos de las páginas Web ASP.NET.For information about resources in ASP.NET, see ASP.NET Web Page Resources Overview.

Crear y localizar recursosCreating and Localizing Resources

En una aplicación no localizada, puede usar archivos de recursos como repositorio de los datos de la aplicación, especialmente para las cadenas que de otra manera podrían estar codificadas de forma rígida en varias ubicaciones del código fuente.In a non-localized app, you can use resource files as a repository for app data, particularly for strings that might otherwise be hard-coded in multiple locations in source code. Lo más común es que los recursos se creen como archivos de texto (.txt) o XML (.resx), y se use Resgen.exe (Generador de archivo de recursos) para compilarlos en archivos binarios .resources.Most commonly, you create resources as either text (.txt) or XML (.resx) files, and use Resgen.exe (Resource File Generator) to compile them into binary .resources files. Estos archivos después se pueden incrustar en el archivo ejecutable de la aplicación mediante un compilador de lenguaje.These files can then be embedded in the app's executable file by a language compiler. Para más información sobre la creación de recursos, consulte Crear archivos de recursos.For more information about creating resources, see Creating Resource Files.

También puede localizar los recursos de una aplicación para determinadas referencias culturales.You can also localize your app's resources for specific cultures. Esto le permite compilar versiones localizadas (traducidas) de las aplicaciones.This enables you to build localized (translated) versions of your apps. Cuando desarrolle una aplicación que utiliza recursos adaptados, debe designar una referencia cultural que sirva de referencia cultural neutra o de reserva cuyos recursos se utilizarán si no se dispone de recursos apropiados.When you develop an app that uses localized resources, you designate a culture that serves as the neutral or fallback culture whose resources are used if no suitable resources are available. Normalmente, los recursos de la referencia cultural neutra se almacenan en el ejecutable de la aplicación.Typically, the resources of the neutral culture are stored in the app's executable. Los recursos restantes para las distintas referencias culturales se almacenan en ensamblados satélite independientes.The remaining resources for individual localized cultures are stored in standalone satellite assemblies. Para más información, consulte Crear ensamblados satélite.For more information, see Creating Satellite Assemblies.

Empaquetar e implementar recursosPackaging and Deploying Resources

Los recursos adaptados de una aplicación se implementan en ensamblados satélite.You deploy localized app resources in satellite assemblies. Un ensamblado satélite contiene los recursos de una única referencia cultural; no contiene código de la aplicación.A satellite assembly contains the resources of a single culture; it does not contain any app code. En el modelo de implementación de ensamblados satélite, una aplicación se crea con un ensamblado predeterminado (que normalmente es el principal) y un ensamblado satélite para cada referencia cultural que admite la aplicación.In the satellite assembly deployment model, you create an app with one default assembly (which is typically the main assembly) and one satellite assembly for each culture that the app supports. Debido a que los ensamblados satélite no forman parte del ensamblado principal, los recursos correspondientes a una referencia cultural específica se pueden reemplazar o actualizar fácilmente sin reemplazar el ensamblado principal de la aplicación.Because the satellite assemblies are not part of the main assembly, you can easily replace or update resources corresponding to a specific culture without replacing the app's main assembly.

Es preciso determinar con sumo cuidado qué recursos formarán parte del ensamblado de recursos predeterminado de la aplicación.Carefully determine which resources will make up your app's default resource assembly. Como se trata de una parte del ensamblado principal, cualquier cambio que se realice en dicho ensamblado requerirá la reemplazo del ensamblado principal.Because it is a part of the main assembly, any changes to it will require you to replace the main assembly. Si no se proporciona ningún recurso predeterminado, se generará una excepción cuando el proceso de reserva de recursos intente buscarlo.If you do not provide a default resource, an exception will be thrown when the resource fallback process attempts to find it. En una aplicación diseñada correctamente, el uso de recursos jamás deberá producir una excepción.In a well-designed app, using resources should never throw an exception.

Para más información, consulte el artículo Empaquetar e implementar recursos.For more information, see the Packaging and Deploying Resources article.

Recuperar recursosRetrieving Resources

En tiempo de ejecución, la aplicación carga los recursos adaptados apropiados para cada subproceso, en función de la referencia cultural especificada por la propiedad CultureInfo.CurrentUICulture.At run time, an app loads the appropriate localized resources on a per-thread basis, based on the culture specified by the CultureInfo.CurrentUICulture property. El valor de esta propiedad se deriva de la siguiente manera:This property value is derived as follows:

  • Asignando directamente un objeto CultureInfo que representa la referencia cultural adaptada a la propiedad Thread.CurrentUICulture.By directly assigning a CultureInfo object that represents the localized culture to the Thread.CurrentUICulture property.

  • Si no se ha asignado explícitamente una referencia cultural, recuperando la referencia cultural de la interfaz de usuario predeterminada del subproceso de la propiedad CultureInfo.DefaultThreadCurrentUICulture.If a culture is not explicitly assigned, by retrieving the default thread UI culture from the CultureInfo.DefaultThreadCurrentUICulture property.

  • Si no se ha asignado explícitamente ninguna referencia cultural a la interfaz de usuario predeterminada del subproceso, recuperando la referencia cultural del usuario actual del equipo local.If a default thread UI culture is not explicitly assigned, by retrieving the culture for the current user on the local computer. Las implementaciones de .NET que se ejecutan en Windows realizan esta operación mediante una llamada a la función GetUserDefaultUILanguage de Windows..NET implementations running on Windows do this by calling the Windows GetUserDefaultUILanguage function.

Para obtener más información sobre cómo establecer la referencia cultural de la interfaz de usuario actual, vea las páginas de referencia de CultureInfo y de CultureInfo.CurrentUICulture.For more information about how the current UI culture is set, see the CultureInfo and CultureInfo.CurrentUICulture reference pages.

Puede recuperar los recursos para la referencia cultural de la interfaz de usuario actual o para una referencia cultural concreta usando la clase System.Resources.ResourceManager.You can then retrieve resources for the current UI culture or for a specific culture by using the System.Resources.ResourceManager class. Aunque la clase ResourceManager se usa principalmente para recuperar recursos, el espacio de nombres System.Resources contiene tipos adicionales que puede usar para recuperar recursos.Although the ResourceManager class is most commonly used for retrieving resources, the System.Resources namespace contains additional types that you can use to retrieve resources. Se incluyen los siguientes:These include:

  • La clase ResourceReader, que permite enumerar recursos incrustados en un ensamblado o almacenados en un archivo binario .resources independiente.The ResourceReader class, which enables you to enumerate resources embedded in an assembly or stored in a standalone binary .resources file. Resulta útil cuando no se conocen los nombres exactos de los recursos que están disponibles en tiempo de ejecución.It is useful when you don't know the precise names of the resources that are available at run time.

  • La clase ResXResourceReader, que permite recuperar recursos de un archivo XML (.resx).The ResXResourceReader class, which enables you to retrieve resources from an XML (.resx) file.

  • La clase ResourceSet, que permite recuperar los recursos de una referencia cultural específica sin observar las reglas de reserva.The ResourceSet class, which enables you to retrieve the resources of a specific culture without observing fallback rules. Los recursos se pueden almacenar en un ensamblado o un archivo binario .resources independiente.The resources can be stored in an assembly or a standalone binary .resources file. También se puede desarrollar una implementación de IResourceReader que permite usar la clase ResourceSet para recuperar recursos de algún otro origen.You can also develop an IResourceReader implementation that enables you to use the ResourceSet class to retrieve resources from some other source.

  • La clase ResXResourceSet, que permite cargar en la memoria todos los elementos de un archivo de recursos XML.The ResXResourceSet class, which enables you to retrieve all the items in an XML resource file into memory.

Vea tambiénSee also