Question

Je pense avoir une solution à ce problème, mais y a-t-il une meilleure façon, ou est-ce que ça va me faire mal?

Je construis un site Web localisé à l'aide de fichiers resx globaux / locaux. Les utilisateurs non techniques doivent impérativement pouvoir modifier les chaînes et ajouter de nouvelles langues via l'application Web.

Cela semble assez facile: j'ai un formulaire pour afficher les chaînes et les modifications sont enregistrées avec le code suivant:

string filename = MapPath("App_GlobalResources/strings.hu.resx");
XmlDocument xDoc = new XmlDocument();
XmlNode xNode;

xDoc.Load(filename);
xNode = xDoc.SelectSingleNode("//root/data[@name='PageTitle']/value");
xNode.InnerText = txtNewTitle.Text;
xDoc.Save(filename);

Est-ce que cela va causer des problèmes sur un site occupé? Si cela entraîne un délai momentané pour la recompilation, ce n'est pas grave. Et, de manière réaliste, cette forme ne verra pas un usage constant et intense. Qu'en pense la communauté?

Était-ce utile?

La solution

J'ai déjà utilisé une méthode similaire pour un "CMS" très basique. Le site n'a pas été utilisé massivement, mais cela ne m'a posé aucun problème.

Je ne pense pas que le changement d'un resx provoque un recyclage.

Autres conseils

Nous avons fait quelque chose de similaire, mais nous avons utilisé une base de données pour stocker les valeurs modifiées par l'utilisateur. Nous avons ensuite fourni un mécanisme de secours pour servir la valeur remplacée d'une clé localisée.

Cela dit, je pense que votre méthode devrait bien fonctionner.

Avez-vous envisagé de créer un objet Ressource? Vous devez regrouper vos paramètres dans un seul objet utilisé par tout le code client. Quelque chose comme:

public class GuiResources
{
    public string PageTitle
    {
        get return _pageTitle;
    }

    // Fired once when the class is first created.
    void LoadConfiguration()
    {
        // Load settings from config section
        _pageTitle = // Value from config
    }
}

Vous pouvez en faire un singleton ou un fournisseur pour que l'objet ne soit chargé qu'une seule fois. Vous pouvez également choisir de consulter le fil de discussion en cours pour obtenir les informations sur la culture afin de savoir quelle langue utiliser.

Ensuite, dans votre fichier web.config, vous pouvez créer un section personnalisée et définissez restartOnExternalChanges = " true " . De cette façon, votre application sera modifiée lors de sa création.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top