Frage

Ich erstelle eine Methode eine Enumeration zu einer freundlichen Zeichenfolge zu konvertieren. Die freundlichen Namen werden in einer Ressourcendatei und unterliegen Globalisierung gespeichert. Also habe ich zwei Ressourcendatei: Enums.resx und Enums.pt-BR.resx, dessen Schlüssel der Name des ENUM durch seinen Wert folgt (d DeliveryStatus_WaitingForPayment)

.

Dies ist der Code, den ich mit der Ressource zu laden und die entsprechenden Namen für die Enum bekommen:

public static string EnumToString<T>(object obj)
{
      string key = String.Empty;

      Type type = typeof(T);

      key += type.Name + "_" + obj.ToString();

      Assembly assembly = Assembly.Load("EnumResources");

      string[] resourceNames = assembly.GetManifestResourceNames();

      ResourceManager = null;

      for(int i = 0; i < resourceNames.Length; i++)
      { 
           if(resourceNames[i].Contains("Enums.resources"))
           {
                rm = new ResourceManager(resourceNames[i], Assembly.GetExecutingAssembly());

                Stream resStream = assembly.GetManifestResourceStream(resourceNames[i]);

                ResourceReader reader = new ResourceReader(resStream);

                IDictionaryEnumerator dict = reader.GetEnumerator();

                while (dict.MoveNext())
                {
                     string keyToCompare = dict.Key.ToString();

                     if (keyToCompare == key)
                         return dict.Value.ToString();
                }
           }

           return obj.ToString();
      }

}

Diese Methode funktioniert fast perfekt, außer dass sie die CurrentUICulture ignoriert und immer wieder die Werte aus der Standard-Ressource, das heißt, auch wenn ich bin mit pt-BR als meinen CurrentUICulture wird den Wert von Enum.resx laden und nicht Enum.pt-BR.resx.

Was mache ich falsch?

War es hilfreich?

Lösung

Es stellt sich heraus, dass ich den falschen Ansatz nahm die Ressource-Datei zu lesen. Nicht nur, dass ich nicht brauchen, meinen Weg durch einen Bach zu arbeiten, um es mich zu verhindern, dass das Ergebnis immer auf dem CurrentUICulture basiert.

Die Lösung ist viel einfacher als die von meinem ersten Versuch:

public static string EnumToString<T>(object obj)
{
      string key = String.Empty;

      Type type = typeof(T);

      key += type.Name + "_" + obj.ToString();

      Assembly assembly = Assembly.Load("EnumResources");

      string[] resourceNames = assembly.GetManifestResourceNames();

      ResourceManager = null;

      for(int i = 0; i < resourceNames.Length; i++)
      { 
           if(resourceNames[i].Contains("Enums.resources"))
           {
                //The substring is necessary cause the ResourceManager is already expecting the '.resurces'
                rm = new ResourceManager(resourceNames[i].Substring(0, resourceNames[i].Length - 10), assembly);

                return rm.GetString(key);
           }

           return obj.ToString();
      }

}

Ich hoffe, das jemand etwas ähnliches in der Zukunft versuchen hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top