Domanda

Penso di avere una soluzione a questo, ma esiste un modo migliore o questo mi spezzerà?

Sto costruendo un sito web localizzato usando file resx globali / locali. È necessario che gli utenti non tecnici possano modificare le stringhe e aggiungere nuove lingue tramite l'app Web.

Sembra abbastanza facile: ho un modulo per visualizzare le stringhe e le modifiche vengono salvate con codice come questo snippet:

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);

Questo causerà problemi su un sito occupato? Se provoca un ritardo momentaneo per la ricompilazione, non è un grosso problema. E realisticamente, questa forma non vedrà un uso costante e pesante. Cosa pensa la community?

È stato utile?

Soluzione

Ho usato un metodo simile prima per un "CMS" molto semplice. Il sito non è stato utilizzato in modo massiccio, ma non mi ha causato alcun problema.

Non penso che cambiare un resx provocherà un riciclo.

Altri suggerimenti

Abbiamo fatto qualcosa di simile, ma abbiamo usato un database per memorizzare i valori modificati dall'utente. Abbiamo quindi fornito un meccanismo di fallback per servire il valore sovrascritto di una chiave localizzata.

Detto questo, penso che il tuo metodo dovrebbe funzionare bene.

Hai pensato di creare un oggetto Resource? Dovresti racchiudere le tue impostazioni in un singolo oggetto che userebbe tutto il codice client. Qualcosa del tipo:

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
    }
}

Potresti renderlo un singleton o un provider, in questo modo l'oggetto viene caricato solo una volta. Inoltre potresti rendere più intelligente guardare il thread corrente per ottenere le informazioni sulla cultura in modo da sapere quale lingua restituire.

Quindi nel tuo file web.config puoi creare un sezione personalizzata e imposta restartOnExternalChanges = " true " . In questo modo, la tua app riceverà le modifiche quando vengono create.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top