Pregunta

Creo que tengo una solución para esto, pero ¿hay alguna forma mejor o esto va a romperme?

Estoy construyendo un sitio web localizado utilizando archivos resx globales / locales. Es un requisito que los usuarios no técnicos puedan editar las cadenas y agregar nuevos idiomas a través de la aplicación web.

Esto parece bastante fácil: tengo un formulario para mostrar cadenas y los cambios se guardan con un código como este fragmento:

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

¿Esto va a causar problemas en un sitio ocupado? Si causa un retraso momentáneo para la recompilación, eso no es gran cosa. Y de manera realista, esta forma no verá un uso constante y pesado. ¿Qué piensa la comunidad?

¿Fue útil?

Solución

He utilizado un método similar antes para un " CMS " muy básico. El sitio no se usó masivamente pero no me causó ningún problema.

No creo que cambiar un resx cause un reciclaje.

Otros consejos

Hicimos algo similar, pero utilizamos una base de datos para almacenar los valores modificados por el usuario. Luego proporcionamos un mecanismo de reserva para servir el valor anulado de una clave localizada.

Dicho esto, creo que tu método debería funcionar bien.

¿Ha considerado crear un objeto de recurso? Necesitaría ajustar su configuración en un solo objeto que usaría todo el código del cliente. Algo como:

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

Podrías convertirlo en un singleton o un proveedor, de esa forma el objeto se carga solo una vez. También puede hacer que sea inteligente mirar el hilo actual para obtener la información cultural para que sepa qué idioma devolver.

Luego, en su archivo web.config puede crear un sección personalizada y establecer restartOnExternalChanges = " true " . De esa manera, su aplicación se modificará cuando se realicen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top