2011-02-23 22 views
6

Tengo un sitio web asp.net (no aplicación web) y he localizado el texto para la interfaz de usuario usando archivos de recursos (.resx). También tengo una biblioteca de clases que contiene la lógica de negocios y hay un método de validación que devuelve un mensaje de error. Necesito localizar ese mensaje de error pero no puedo encontrar una manera de obtener acceso al archivo de recursos global en mi sitio web. En el sitio web, diga en un código detrás, puedo usar Resources.LocalisedText.MyErrorMessage (donde LocalisedText es el nombre de mi archivo de recursos LocalisedText.resx). Sin embargo, en la biblioteca de mi clase, no puedo obtener una referencia.¿Cómo acceder a los recursos globales para la localización en la biblioteca de clases?

He encontrado este enlace http://weblogs.asp.net/rinze/archive/2008/12/03/using-globalization-resources-resx-in-a-class-library-or-custom-control.aspx que dice que se puede hacer, pero parece que no funciona para mí, probablemente porque no puedo obtener el espacio de nombres correcto para el sitio web?

+1

Logré encontrar una solución y eso es mediante la adición de un archivo de recursos en la misma biblioteca de clases. Esto funciona bien, pero preferiría tener solo un archivo de recursos si es posible. Entonces, si alguno de ustedes sabe cómo hacer referencia al archivo .resx en el sitio web, háganmelo saber. – gices

Respuesta

0
new ResourceManager("YourRessourceName", Assembly.GetEntryAssembly()).GetString("MyLocalizedString"); 

aquí se construye una ressourceManager usando el conjunto de la ejecución (su sitio web), "YourRessourcenName" es el nombre de su archivo sin la ressource resx y el idioma.

+0

Montaje.GetEntryAssembly() parece devolver nulo para una aplicación web. –

4

Pude hacer que esto funcionara según el archivo de diseñador de resx. Si lo abre y mira el acceso de la propiedad ResourceManager de get, básicamente puede copiar la línea para obtener acceso a los mismos recursos.

explicación completa

En primer lugar, es necesario abrir el archivo de su archivo de recursos .designer.cs. Debería estar en el Explorador de soluciones, en la siguiente imagen:

Resource file designer file location in solution explorer

Basta con hacer doble clic que para abrirlo y luego analiza la existencia de (debería estar cerca de la parte superior):
internal static global::System.Resources.ResourceManager ResourceManager {

En el acceso de get, debería ver que asigna algo a una variable de temperatura. En mi caso se veía así:

/*...*/ temp = new global::System.Resources.ResourceManager("Resources.Lang", 
       global::System.Reflection.Assembly.Load("App_GlobalResources")); 

Así, sobre la base de que, he creado un ResourceManager en la clase que quería utilizar en mi biblioteca de clases de este modo:

ResourceManager lang = new ResourceManager("Resources.Lang", 
              Assembly.Load("App_GlobalResources")); 

Nota 1: No olvide agregar using System.Resources; y using System.Reflection; a la parte superior del archivo.
Nota 2: Esto no requiere agregar una referencia al proyecto web a la biblioteca de clases.

Luego, simplemente llamo al método GetString en mi variable lang para obtener los recursos que quiero.
P. ej. lang.GetString("MyErrorMessage"). No es tan elegante como llamar al Resources.Lang.MyErrorMessage, pero hace el trabajo.

Espero que esto ayude. Deja un comentario a continuación si tienes alguna pregunta.

Cuestiones relacionadas