2009-11-04 6 views
11

Ich möchte meine Ressourcen in einem anderen Dateiformat als NETs Ressourcen (insbesondere .po) speichern, also schrieb ich einen benutzerdefinierten Ressourcensatz mit einem benutzerdefinierten Ressourcenleser, um sie abzurufen. Ich habe einen ResourceManager mit der statischen Methode CreateFileBasedResourceManager erstellt, die eine neue Instanz des Managers erstellt, der Ressourcen-Sets aus Dateien in einem bestimmten Verzeichnis unter Verwendung des angegebenen Ressourcen-Sets (das benutzerdefinierte, das ich in meinem Fall geschrieben hat) unter Verwendung von Name.culture.resources abruft Dateinamen.C# dateibasierten Ressourcenmanager erweitern

Allerdings möchte ich die Dateinamen Konvention ändern. Ich habe festgestellt, dass es eine überschreibbare GetResourceFileName-Methode für genau diesen Zweck gibt. Aber mit reflector habe ich festgestellt, dass der Konstruktor, der von CreateFileBasedResourceManager verwendet wird, privat ist, und es ist unmöglich, das Flag "benutze Dateien statt Assemblys" zu setzen.

Gibt es eine Möglichkeit, dies zu umgehen, ohne die gesamte InternalGetResourceSet-Methode neu implementieren zu müssen?

Vielen Dank!

+1

Haben Sie jemals diese sortiert werden? Sie könnten die Reflektion innerhalb der App verwenden, um das Problem der "privaten Flagge" zu umgehen. – jcolebrand

+1

Ich habe den Reflektor verwendet, um einfach die Implementierung des Ressourcenmanagers zu kopieren und zu modifizieren, was auch immer ich brauchte. Nicht sehr elegant, aber es hat funktioniert. –

Antwort

1

Mono hat ein gutes kleines Dienstprogramm, das dabei hilft, es heißt Msgfmt, das verwendet werden kann, um .resources-Dateien aus .po-Dateien Verzeichnis zu erstellen.

Msgfmt.exe -iMessages.es.po -oMessages.es.resources 

ich auf einen interessanten Artikel @http://weblogs.manas.com.ar/spalladino/2009/10/01/using-gnu-gettext-for-i18n-in-c-and-asp-net/ kam, die mir geholfen, und es könnte Ihnen gut helfen ..

Es ist ein anderer Ansatz, aber es funktionierte für mich!

+2

Danke für den Link zum Artikel ... aber der Autor ist eigentlich ich selbst: P –

+0

Nice article ... Das ist einer, an den man sich erinnern sollte ... den Autor auf den Artikel vor dem Posten des Links überprüfen! –