ASP.NET本地化网站 - 即时更新

时间:2009-01-06 19:07:30

标签: asp.net localization

我想我有一个解决方案,但是有更好的方法,还是会打破我?

我正在使用全局/本地resx文件构建本地化网站。非技术用户可以通过Web应用程序编辑字符串并添加新语言。

这看起来很简单 - 我有一个表单来显示字符串,更改会保存在代码中,如下所示:

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

这会在繁忙的网站上造成问题吗?如果它导致重新编译的瞬间延迟,那没什么大不了的。实际上,这种形式不会持续大量使用。社区的想法是什么?

3 个答案:

答案 0 :(得分:3)

我之前使用过类似的方法来获得一个非常基本的“CMS”。该网站没有大量使用,但它没有给我带来任何问题。

我认为更改resx不会导致回收。

答案 1 :(得分:1)

我们做了类似的事情,但使用数据库来存储用户修改后的值。然后,我们提供了一个回退机制来提供本地化密钥的重写值。

那就是说,我认为你的方法应该可以正常工作。

答案 2 :(得分:0)

您是否考虑过创建资源对象?您需要将设置包装到所有客户端代码将使用的单个对象中。类似的东西:

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

您可以将其设为单例或提供者,这样对象只加载一次。此外,您可以智能地查看当前线程以获取文化信息,以便您知道要返回的语言。

然后在您的web.config文件中,您可以创建custom section并设置restartOnExternalChanges="true"。这样,您的应用就会在制作完成后获得更改。