es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Gestión de recursos anidados en .NET.

Disculpa si esto ya está explicado en alguna parte, pero no encontré una solución existente. Tal vez simplemente no sé qué palabras clave buscar.

Mi pregunta es: ¿Es posible tener un ResourceManagement anidado?

Digamos que defino los siguientes archivos resx:

Resources.resx
Resources.es.resx
Resources.dark.resx
Resources.dark.es.resx

Quiero que se cumpla el siguiente comportamiento:

  • Si no se define ninguna CultureInfo, se tomará Resources.resx.
  • Si se establece la CultureInfo “dark”, se tomará Resources.dark.resx.
  • Si se selecciona el idioma “es”, se tomará el archivo de recursos correspondiente.
  • Si un recurso no está definido, el ResourceManager debería usar el archivo de recursos menos específico.

¿Cómo puedo lograr este comportamiento?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnologías de la información especializado en c#, .net, localización y recursos, la respuesta a la pregunta es que sí, es posible tener una ResourceManagement anidada. Para lograr el comportamiento deseado, puedes utilizar la clase ResourceFallbackManager. Esta clase permite encadenar varios ResourceManagers y proporciona un comportamiento de fallback cuando no se encuentra un recurso.

    Aquí hay un ejemplo de código:

    var rmDark = new ResourceManager("Resources.dark", Assembly.GetExecutingAssembly());
    var rmEs = new ResourceManager("Resources.es", Assembly.GetExecutingAssembly());
    var rm = new ResourceManager("Resources", Assembly.GetExecutingAssembly());
    
    var rmChain = new ResourceFallbackManager(new[] { rmDark, rmEs, rm }, false);
    
    CultureInfo ci = CultureInfo.GetCultureInfo("es");
    
    string result = rmChain.GetString("TestValue", ci);
    

    En este ejemplo, creamos tres ResourceManagers para los diferentes archivos de recursos. Luego creamos un ResourceFallbackManager y pasamos los ResourceManagers en el orden deseado. Establecemos el último parámetro en false, lo cual indica que el fallback debe detenerse después del último ResourceManager. Luego obtenemos el CultureInfo y utilizamos el método rmChain.GetString para obtener el valor para la clave “TestValue”, pasando el CultureInfo.

    El ResourceFallbackManager buscará automáticamente el recurso en cada ResourceManager, comenzando por el primero y pasando al siguiente si no encuentra el recurso. Este comportamiento permite encadenar varios ResourceManagers, lo cual puede ser útil para cadenas e imágenes localizadas.

Comments are closed.