2009-11-04 16 views
11

Desidero memorizzare le mie risorse in un formato file diverso da quello di NET (in particolare, .po), quindi ho scritto un set di risorse personalizzate con un lettore di risorse personalizzato per recuperarle. Ho creato un ResourceManager utilizzando il metodo statico CreateFileBasedResourceManager che crea una nuova istanza del gestore che recupera set di risorse da file in una directory specifica, utilizzando il set di risorse specificato (quello personalizzato che ho scritto nel mio caso), utilizzando Name.culture.resources i nomi dei file.Estendi gestore risorse file basato su C#

Tuttavia, vorrei cambiare la convenzione del nome file. Ho notato che esiste un metodo GetResourceFileName overridable proprio per questo scopo. Ma usando Reflector ho notato che il costruttore usato da CreateFileBasedResourceManager è privato, ed è impossibile impostare altrimenti il ​​flag "usa i file invece degli assiemi".

C'è un modo per aggirare questo, senza la necessità di reimplementare l'intero metodo InternalGetResourceSet?

Grazie mille!

+1

Hai mai risolto questo? È possibile utilizzare la riflessione all'interno dell'app per superare il problema della "bandiera privata" – jcolebrand

+1

Ho usato il riflettore per copiare semplicemente l'implementazione del gestore risorse e modificare tutto ciò di cui avevo bisogno. Non molto elegante, ma ha funzionato. –

risposta

1

Mono ha una buona piccola utilità che aiuta con questo, è chiamato Msgfmt, che può essere utilizzato per creare file .resources dalla directory dei file .po.

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

mi sono imbattuto in un interessante articolo @http://weblogs.manas.com.ar/spalladino/2009/10/01/using-gnu-gettext-for-i18n-in-c-and-asp-net/ che mi ha aiutato e potrebbe anche aiutare troppo ..

E 'un approccio diverso, ma ha funzionato per me!

+2

Grazie per il link all'articolo ... ma l'autore è in realtà me stesso: P –

+0

Bel articolo ... Questo è uno da ricordare ... controlla l'autore sull'articolo prima di postare il link! –