2011-04-25 17 views
6

Me encontré por primera vez con una pregunta similar a la mía aquí en el desbordamiento de la pila: Loop through all Resources in ResourceManager - C#. Solo resolvió parte de lo que necesito hacer. Cuando solicite una entrada en un archivo de recursos para una cultura específica, si no hay una presente, volverá a estar predeterminada en el archivo de recursos de cultura neutral.asp.net Obtener todos los recursos de .resx sin especificar Culture (ResourceManager.GetResourceSet)

Necesito recorrer cada entrada para un archivo de recursos dado y GetResourceSet requiere una cultura. Por ejemplo, tengo un archivo de recursos neutros con 3 entradas y un archivo de recursos específicos de cada cultura que acompaña al archivo neutral con 1 entrada.

Mi archivo de ejemplo de recurso neutral es MyResource.resx y mi archivo de ejemplo de recurso específico de cultura es MyResource.en-gb.resx. El siguiente código muestra cómo estoy tratando de recorrer y acceder a todas las entradas de recursos.

Dim cultInfo as New CultureInfo(culture) 
For Each entry As System.Collections.DictionaryEntry In myResourceManager.GetResourceSet(cultInfo, True, True) 

Next 

Neutral Entradas del archivo de recursos

  • FullName/Nombre completo
  • Fax/Teléfono Número
  • Estado/Estado

entrada dependientes de la cultura recurso de archivo

  • Estado/Condado

Cuando llamo GetResourceSet para la cultura específica sólo volver 1 entrada. Esperaba (y quiero) recuperar las 3 entradas con la entrada específica de una cultura anulada. Esto es lo que quiero regresar:

  • NombreCompleto/Nombre completo
  • Fax/Teléfono Número
  • Estado/Condado

¿Hay alguna forma que yo puedo hacer esto? Gracias.

Respuesta

9

El método GetString de un objeto ResourceManager maneja adecuadamente el recorrido de los archivos de recursos para ubicar el valor correcto para una clave determinada en función de una cultura. El archivo de recursos base/neutral/predeterminado se puede obtener usando el CultureInfo.InvariantCulture, que le brinda todas las claves posibles para el archivo de recursos (suponiendo que configure sus archivos de recursos de esta manera).

Looping en los objetos DictionaryEntry encontrados en el método GetResourceSet de un ResourceManager, basado en la Cultura Invariant y luego llamando a GetString para cada Clave usando la cultura específica pasada, obtendrá el Valor correcto para una clave dada basada en el cultura.

For Each entry As DictionaryEntry In myResourceManager.GetResourceSet(CultureInfo.InvariantCulture, True, True) 
    Dim strKey as String = entry.Key.ToString() 
    Dim strValue as String = myResourceManager.GetString(entry.Key.ToString(), cultInfo) 
Next 

Hope this helps!

+1

Entiendo que * la solución * resuelve el problema, pero aun así el comportamiento que encontraste (y encontré) para este método 'GetResourceSet' no refleja lo que está en la [documentación] (http://msdn.microsoft. com/en-us/library/system.resources.resourcemanager.getresourceset (v = vs.100) .aspx). – superjos

+0

Bueno, en realidad lo probé y en mi caso no resuelve el problema. Al iterar sobre resourceSet, solo obtengo las claves específicas de la configuración regional. El conjunto no tiene ninguna clave del recurso de reserva en absoluto. :(Y comprobé que estoy pasando la cultura correcta, cierto, verdadero. – superjos

+0

Al final, lo logré así: creé un diccionario de 'InvariantCulture', y otro de' CurrentUICulture', luego Fundí el último sobre el anterior. – superjos

Cuestiones relacionadas