Pregunta

Tengo una biblioteca de clases, llámela Framework.En el asambleainfo.cs, tengo:

[assembly: NeutralResourcesLanguage("en-US")]

En un directorio esources\, tengo FrameworkResources.resx y FrameworkResources.fr-FR.resx

En una clase de ayuda, estoy usando esto como mi administrador de recursos:

private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly());

En código, si hago algo como esto:

String message = manager.GetString("ArgumentNullExceptionMessage", CultureInfo.CurrentCulture);

Puedo depurar y pasar el cursor sobre CurrentCulture y él (y UICulture) están configurados en fr-FR, pero esto SIEMPRE me devuelve mi mensaje predeterminado en inglés, NO el mensaje en francés del archivo de recursos fr-FR.

¿Debería ResourceManager conectar eso automáticamente, o debería escribir código para consultar la cultura actual y luego abrir el archivo correcto?¿Me equivoco al suponer que Resource Manager sabrá obtener la cadena fr-FR, porque esa es la cultura actual?

No estoy seguro de por qué esto no funciona.

ACTUALIZAR:Tengo ensamblajes satélite, así que creo que la parte de compilación va bien.Creo que el problema está en mi administrador de recursos.Intenté usar ResourceSets y ResourceManager explícitamente así:

ResourceManager manager =
    new ResourceManager("Framework.Resources.FrameworkResources",
        Assembly.GetExecutingAssembly());

Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE")));
Debug.WriteLine("el    : " + manager.GetString(resourceName, new CultureInfo("el")));
Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX")));
Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR")));
Debug.WriteLine("hi    : " + manager.GetString(resourceName, new CultureInfo("hi")));
Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN")));

Eso resulta en esto:

de-DE : Argument '%ArgumentName%' cannot be null or empty.
el    : Argument '%ArgumentName%' cannot be null or empty.
es-MX : Argument '%ArgumentName%' cannot be null or empty.
fr-FR : Argument '%ArgumentName%' cannot be null or empty.
hi    : Argument '%ArgumentName%' cannot be null or empty.
zh-CN : Argument '%ArgumentName%' cannot be null or empty.

Entonces, aunque todo está en su lugar, mi administrador de recursos simplemente no está tratando de buscar en esos ensamblajes satélite.Y para ser claros, en esos ensamblados, tengo la versión traducida de la cadena anterior, por lo que definitivamente se lee desde mi archivo FrameworkResources.resx predeterminado, en lugar de los específicos de la cultura.

¿Fue útil?

Solución

Me di cuenta (gracias a más destruyendo en el interweb).Estaba ejecutando el código de las pruebas unitarias, y Mstest APPERENTE no "implementa" los conjuntos de satélites.Si entro en la configuración de la prueba y desactive "implementación", todo funciona como se espera.Ugh!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top