C# 我应该在应用程序状态下存储本地化内容吗

C# 我应该在应用程序状态下存储本地化内容吗,c#,localization,application-state,C#,Localization,Application State,我正在开发我的第一个多语言C#站点,除了一个关键方面外,一切都很顺利。我不能100%确定存储字符串(通常是单个单词)的最佳选择是什么,这些字符串将由代码从我的代码隐藏页面中翻译出来 在网站的前端,我将使用asp.net资源文件来显示页面上的文字。这部分很好。但是,该站点将进行XML调用,并且XML响应仅使用英语。我收到了一份excel表格,其中包含XML将返回的所有单词,这些单词被分解成不同的语言,但我不确定如何最好地存储/访问这些信息。大约有80个单词x7种语言 我正在考虑为我的global.

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

在网站的前端,我将使用asp.net资源文件来显示页面上的文字。这部分很好。但是,该站点将进行XML调用,并且XML响应仅使用英语。我收到了一份excel表格,其中包含XML将返回的所有单词,这些单词被分解成不同的语言,但我不确定如何最好地存储/访问这些信息。大约有80个单词x7种语言

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

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

谢谢你的意见


Rich

根据您所说的,您看到的是560个单词,它们需要根据语言环境的不同而有所不同。这是沧海一粟。您考虑的资源文件方法非常适合这个目的,我建议您使用它们。它们与控件集成,因此您可以充分利用它们

如果它确实给您带来麻烦,您可以将它们放在滑动缓存上,例如20分钟的滑动缓存,但我认为您在这个解决方案中的选择没有任何错误

奥莫

干杯

安德鲁

另外,请通读这篇文章,看看如何在不同的资源文件中找到值并将其绑定到控件和文本,以及如何以编程方式使用


只要您意识到这样做的影响,那么是的,将这些数据存储在内存中就可以了(只要您有足够的时间这样做)。一旦你知道什么是适合当前用户的,那么把它扔进内存就可以了。您可能会考虑使用MemCached Win32或Velocity之类的工具将存储卸载到另一个应用服务器。目前,即使在本地应用程序上也要使用这种方法。当需要将其推送到另一台服务器或扩展应用程序时,您的缓存层定义了明确的关注点分离。请记住,支持的语言越多,存储在内存中的内容就越多。请密切关注存储在单独应用程序服务器内存中的数据量,因为这可能会在时间上变得无法承受。此外,请确保您使用的键特定于该语言。否则,您可能会发现您正在为英语用户存储德语菜单。

谢谢您的帮助。我的问题是,我只是想本地化字符串。这些将不会绑定到任何控件,因此我不认为我可以使用resx文件来实现这一点。我可以吗?您将如何使用本地化字符串向用户显示它们?我在想,在页面加载时,我将根据所选语言调用所需语言的dictionary对象,并找到与我要查找的字符串匹配的键。例如:如果我想替换XML返回的单词“Door”并用法语显示它,我会有如下内容:Dictionary XMLWording=(Dictionary)Application[“FrenchXMLWording”];然后是类似“门”这样的措辞;在屏幕上写字。希望这是有道理的;)只需编辑我的文章,添加一个链接,这将帮助你,因为你可以做你需要的资源文件。i、 e.支持编程访问和数据绑定。我没有意识到我可以将资源文件用于随机字符串,我认为它必须匹配页面上的控件。这绝对是我的解决方案,因为它只为用户提供特定页面所需的文本,而不需要在内存中存储所有内容。谢谢你的帮助!