2010-08-04 5 views
2

Pour mes traductions, j'utilise des fichiers .resx incorporés. Certaines de ces traductions que je souhaite remplacer par un autre fichier .resx, qui n'est pas intégré (ex ~/App_Localresources/translations.en-US.resx).ASP.NET Resourcemanager pour lire local .resx

Le but de ceci est qu'après avoir compilé et déployé l'application, un utilisateur pourrait changer le fichier .resx manuellement pour remplacer certaines des traductions incorporées.

Existe-t-il un moyen d'utiliser le ResourceManager normal pour cela? (En .NET 4)

Nous vous remercions de conseils

Répondre

3
public class ResxResourceManager : System.Resources.ResourceManager { 
     public ResxResourceManager(string baseName, string resourceDir) { 
      Type[] paramTypes = new Type[] { typeof(string), typeof(string), typeof(Type) }; 
      object[] paramValues = new object[] { baseName, resourceDir, typeof(ResXResourceSet) }; 

      Type baseType = GetType().BaseType; 

      ConstructorInfo ci = baseType.GetConstructor(
       BindingFlags.Instance | BindingFlags.NonPublic, 
       null, paramTypes, null); 

      ci.Invoke(this, paramValues); 
     } 

    protected override string GetResourceFileName(CultureInfo culture) { 
     string resourceFileName = base.GetResourceFileName(culture); 
     return resourceFileName.Replace(".resources", ".resx"); 
    } 
} 
+5

comment utilisez-vous? Pouvez-vous donner un exemple? – Jaguar

+0

Merci, je cherchais ça pour un moment. Exemple d'utilisation 'ResxResourceManager rm = new ResxResourceManager (" NameOfResourceFile "," PathToResourceDir "); rm.GetString (name, System.Globalization.CultureInfo.GetCultureInfo ("en-US")); ' – tsukimi

+0

Ce code semble très dangereux. Il utilise refelction pour appeler un second constructeur de base sur lui-même. Et ce constructeur est public (et a été depuis .NET 2: peut-être que ce n'était pas dans .NET 1 ou 1.1?). – Richard

Questions connexes