我应该将本地化内容存储在应用程序状态中

时间:2009-08-24 16:30:13

标签: c# localization application-state

我正在开发我的第一个多语言C#网站,除了一个关键方面外,一切都很顺利。我不是100%确定存储字符串(通常是单个单词)的最佳选择是什么,这些字符串将由我的代码在页面后面的代码翻译。

在网站的前端,我将使用asp.net资源文件作为页面上的措辞。这部分很好。但是,此站点将进行XML调用,并且XML响应仅使用英语。我已经获得了一张excel表格,其中包含将由XML分解为不同语言的所有单词,但我不确定如何最好地存储/访问此信息。大约有80个单词x 7种语言。

我正在考虑为应用程序运行时由我的global.asax文件创建的每种语言创建一个字典对象,并将其保存在内存中。这样做的好处是,字典对象只需要创建一次(直到IIS重新启动),并且可以被任何用户访问而无需重建,但缺点是我有7个字典对象不断存储在内存中。服务器是Win 2008 64bit,内存为4GB,所以我是否应该关注使用这种方法占用的内存?

您认为存储/检索所有用户使用的不同语言单词的最佳方式是什么?

感谢您的意见。

2 个答案:

答案 0 :(得分:1)

根据您的说法,您正在查看需要根据区域设置而有所不同的560个单词。这是海洋中的一滴水。您考虑的资源文件方法适合用途,我建议使用它们。它们与控件集成,因此您可以充分利用它们。

如果它确实给你带来了麻烦,你可以将它们放在滑动缓存上,例如滑动缓存20分钟,但我没有看到你在此解决方案中选择的任何问题。

OMO

干杯,

安德鲁

P.S。阅读本文,了解如何查找和绑定不同资源文件中的值到控件和文字,并以编程方式使用。

http://msdn.microsoft.com/en-us/magazine/cc163566.aspx

答案 1 :(得分:0)

只要你知道这样做的影响然后是的,将这些数据存储在内存中就可以了(只要你有足够的时间)。一旦你知道什么是适合当前用户然后将其扔进内存就没问题了。你可能会看看像MemCached Win32或Velocity这样的东西来将存储卸载到另一个应用服务器。甚至可以在本地应用程序上使用它,以便在将其推送到另一台服务器或扩展应用程序时,您可以清楚地分离在缓存层中定义的关注点。请记住,您支持的语言越多,您在内存中存储的内容就越多。密切关注您单独的应用服务器上存储在内存中的数据量,因为这可能会在时间上变得无法控制。此外,请确保您使用的密钥特定于该语言。否则,您可能会发现您正在为英语用户存储德语菜单。