【问题标题】:Should I store localization content in the application state我应该在应用程序状态中存储本地化内容吗
【发布时间】:2010-11-22 08:16:34
【问题描述】:

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

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

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

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

感谢您的意见。

丰富

【问题讨论】:

    标签: c# localization application-state


    【解决方案1】:

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

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

    OMO

    干杯,

    安德鲁

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

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

    【讨论】:

    • 感谢您的帮助。我的问题是我只是想本地化字符串。这些不会与任何控件相关联,因此我认为我不能为此使用 resx 文件。我可以吗?
    • 您将使用本地化字符串做什么以及如何向用户显示它们?
    • 我在想,在页面加载时,我会根据所选语言调用我想要的语言的字典对象,并找到与我正在寻找的字符串匹配的键。例如:如果我想替换 XML 返回的单词“Door”并用法语显示它,我会得到类似的内容: Dictionary XMLWording = (Dictionary)Application["FrenchXMLWording "];然后像 XMLWording["Door"];写到屏幕上。希望这是有道理的;)
    • 只需编辑我的帖子,添加一个对您有帮助的链接,因为您可以使用资源文件做您需要的事情。即支持编程访问和数据绑定
    • 我没有意识到我可以将资源文件用于随机字符串 - 我认为它必须匹配页面上的控件。这绝对是我的解决方案,因为它只为用户提供该特定页面所需的文本,而无需将所有内容存储在内存中。感谢您的所有帮助!
    【解决方案2】:

    只要您知道这样做的影响,那么可以,将这些数据存储在内存中就可以了(只要您有足够的能力这样做)。一旦您知道什么适合当前用户,然后将其扔到内存中就可以了。您可能会查看 MemCached Win32 或 Velocity 之类的东西,但可以将存储卸载到另一个应用服务器。即使在您的本地应用程序上暂时使用它,当需要将其推送到另一台服务器或扩展您的应用程序时,您在缓存层定义了明确的关注点分离。请记住,您支持的语言越多,您在内存中存储的内容就越多。密切关注存储在您的单独应用程序服务器上的内存中的数据量,因为这可能会随着时间变得不堪重负。此外,请确保您使用的键是特定于语言的。否则,您可能会发现您正在为英语用户存储德语菜单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-12
      • 1970-01-01
      • 2017-02-23
      相关资源
      最近更新 更多