【问题标题】:Convert LocalResource File to Object将 LocalResource 文件转换为对象
【发布时间】:2010-11-03 20:46:03
【问题描述】:

我希望在我的 MVC 应用程序中使用 App_LocalResources,但我想知道一个可靠的实现。

我的想法是遍历 Resx 文件并获取所有密钥。将这些键存储在 ViewModel 的对象中。

然后在我的视图中,我可以使用<%: model.resources.key %>提取信息。

你们中有人知道我如何有效地提取资源文件的所有值并将它们转储到 ViewModel 中的对象中吗?这甚至可能吗?

编辑:

我发现了如何从 Resx 文件中取出一条记录,而不是全部。

        Dim whats_next = HttpContext.GetLocalResourceObject("~/views/about/faq.aspx", "whats_next").ToString
        ViewData("whats_next") = whats_next
        Return View()

我需要做的是(其中 ViewModel.Resources 对象只是一个List(Of KeyValuePairs)

        Dim ViewModel As Domain.FAQViewModel = New Domain.FAQViewModel()
        ViewModel.Resources = ''# enumerate APPROPRIATE LOCAL resource file and store all keys
        Return View(ViewModel)

从这里,我可以提取视图中的所有键

        <%: model.Resources.ResourceKey1 %><br />
        <%: model.Resources.ResourceKey2 %>

【问题讨论】:

  • 注意,我确实打开了这个先前的问题,但答案不正确,我的问题不清楚。我现在从一个新的角度来接近它。基本上,我绝对不希望 runat="server" 在我的视图中的任何位置。 stackoverflow.com/questions/2970935/…
  • 除非我遗漏了什么,否则这听起来不像是正确的方法。为什么你需要抓住所有的钥匙?您是说要在 ViewModel 中为 1 个单词填充 5 种不同的翻译吗?我会更倾向于查看文化信息,然后将相关字符串放入视图模型中。需要什么循环?
  • 刚刚看到您的编辑 - 为什么要在视图中显示所有资源文件?
  • 我希望能够在视图中从单个对象访问它们。 model.resources.resourcekey
  • 我不想要所有的本地人......只想要相关的。 If user is French, Grab the FAQ resource in French, and store ALL keys for FAQ.aspx, Then in the view, spit out the appropriate value depending on the Key requested

标签: asp.net-mvc localization


【解决方案1】:

您想使用 App_LocalResources 而不是 App_GlobalResources 甚至是常规资源文件的任何特殊原因?如果你有一个普通的 resx 文件,你可以像这样访问它:

<%: Resources.ResourceClass.MyResourceString %>

在 MVC 视图中并不真正支持 App_LocalResources,而且如果您只打算在视图中使用 1 或 2,枚举所有资源似乎效率低下(至少没有缓存)。

如果您只创建一些“常规”资源文件(即不是 App_GlobalResources 中的资源文件),这可能很容易。您可以拥有任意多个,例如每个视图一个。

【讨论】:

  • 好吧,就是这样。我创建了一个特定于视图的资源文件并枚举了仅用于该视图的所有记录。然后我就不需要维护一个 GlobalResource 文件,当我有 20 或 30 个视图时可能会失控,每个视图都有 20 或 30 个键。
  • 您可以拥有任意数量的“常规”资源文件(因为这是 WAP)。
  • 我可以用这种方法,只是看起来不太干净。
  • 我很好奇为什么您认为这种方法不干净?是因为没有从模型中显式检索资源字符串吗?当您考虑它时,模型通常代表您的数据和状态。它不(或者至少在我看来不应该)代表页面的硬编码 UI 元素。假设您的应用程序仅支持一种语言(不需要本地化字符串) - 您会将所有 UI 字符串放在模型上吗?
  • 我想这对我来说似乎并不干净,因为您没有像使用“local”那样分离资源文件
猜你喜欢
  • 2014-03-19
  • 2018-11-20
  • 2012-03-30
  • 1970-01-01
  • 2011-06-03
  • 2018-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多