Pergunta

Eu acho que tenho uma solução para isso, mas há uma maneira melhor, ou é que isto vai quebrar em mim?

Eu estou construindo um site localizada usando resx global / local. É uma exigência que os usuários não técnicos podem editar as cordas e adicionar novas línguas através do aplicativo web.

Isso parece bastante fácil - Eu tenho um formulário para cadeias de exibição e as alterações são salvas com um código como esse trecho:

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

Será que isso vai causar problemas em um site ocupado? Se ele provoca um atraso momentâneo para recompilação, que não é grande coisa. E realisticamente, esta forma não vai ver, o uso pesado constante. O que a comunidade acha?

Foi útil?

Solução

Eu usei um método semelhante antes de um "CMS" muito básico. O site não foi maciçamente usado, mas isso não me causa qualquer problema.

Eu não acho que mudar um resx causará uma reciclagem.

Outras dicas

Nós fizemos algo semelhante, mas usou um banco de dados para armazenar os valores modificados pelo usuário. Em seguida, forneceu um mecanismo de fallback para servir o valor substituído de uma chave localizada.

Dito isso, eu acho que o método deve funcionar bem.

Você considerou a criação de um objeto de recurso? Você precisaria embrulhar suas configurações em um único objeto que todo o código do cliente usaria. 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
    }
}

Você poderia torná-lo um singleton ou um fornecedor, de que maneira o objeto é carregado apenas uma vez. Além disso, você poderia fazê-lo inteligente para olhar para o segmento atual para obter a informação cultura que você saiba o idioma para retornar.

Em seguida, no seu arquivo web.config você pode criar um seção personalizada e conjunto restartOnExternalChanges="true". Dessa forma, seu aplicativo vai começar o mudou quando eles são feitos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top