我想我有一个解决方案,但是有更好的方法,还是会打破我?
我正在使用全局/本地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);
这会在繁忙的网站上造成问题吗?如果它导致重新编译的瞬间延迟,那没什么大不了的。实际上,这种形式不会持续大量使用。社区的想法是什么?
答案 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"
。这样,您的应用就会在制作完成后获得更改。