Frage

Ich denke, dass ich eine Lösung für dieses Problem haben, aber gibt es einen besseren Weg, oder ist dies auf mich los zu brechen?

Ich bin den Aufbau einer lokalisierten Website mit global / local resx Dateien. Es ist eine Anforderung, die nicht-technischer Anwender kann die Strings bearbeiten und neue Sprachen durch den Web-App hinzufügen.

Das scheint einfach genug - ich habe eine Form Strings angezeigt werden und die Änderungen werden mit Code wie dieser Schnipsel gespeichert:

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

Wird diese Probleme auf einem belebten Ort verursachen? Wenn es eine kurze Verzögerung für erneute Kompilierung verursacht, das ist keine große Sache. Und realistisch gesehen, wird diese Form nicht konstant ist, die starke Nutzung sehen. Was bedeutet die Gemeinschaft denken?

War es hilfreich?

Lösung

Ich habe ein ähnliches Verfahren vor für ein sehr einfach „CMS“ verwendet. Die Seite wurde nicht massiv verwendet, aber es verursacht mir keine Probleme.

Ich glaube nicht, ein resx Ändern wird ein Recycling führen.

Andere Tipps

Wir haben etwas Ähnliches, aber verwendet, um eine Datenbank, die die Benutzer geänderten Werte zu speichern. Wir stellten dann einen Rückfallmechanismus, um den überschriebenen Wert einen lokalisierten Schlüssel zu dienen.

Wie gesagt, ich glaube, Ihre Methode sollte funktionieren.

Haben Sie darüber nachgedacht ein Ressource-Objekt erstellen? Sie müssten Ihre Einstellungen zu einem einzigen Objekt wickeln, dass die alle Client-Code verwenden würde. So etwas wie:

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

Sie könnte es ein Singleton machen oder ein Anbieter, auf diese Weise das Objekt nur einmal geladen wird. Auch machen Sie könnten es klug, auf dem aktuellen Thread zu sehen, die Kultur Informationen zu erhalten, so dass Sie wissen, welche Sprache zurückzukehren.

Dann in Ihrer web.config-Datei können Sie eine Abschnitt benutzerdefinierte und setzen restartOnExternalChanges="true". Auf diese Weise Ihre Anwendung wird die geändert werden, wenn sie gemacht werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top