1

我正在开发 .NET 4.0 MVC3 Web 应用程序。该应用程序全部为英文,并允许用户填写有关不同地区的信息。为简单起见,假设我们有两个区域:美国西欧

现在在视图中,我提供了一个字符串,假设为Project opening,但如果用户在美国地区工作,我希望它阅读项目启动

当我想到这个功能时,我会立即想到不同区域的资源文件,但独立于 UI 文化。

有没有人有一个食谱如何实现我想要的?

如果将来我可以让它读取例如ExtendedDisplayAttribute(string displayName, int regionId)放置在我的 ViewModel 的属性上,那也会很好。

编辑

我已经处于可以在应该返回该区域的字符串的助手中访问区域信息的阶段。现在我的资源文件有问题。我想用故障转移机制创建多个资源文件。我预计会有一些开箱即用的东西,但是 ResourceManager 不能用于读取 resx 文件。

有没有什么技术可以让我在没有一些无意义的 resgen.exe 的情况下从特定资源文件中读取值?

我也不想用System.Resources.ResXResourceReader,因为它属于System.Windows.Forms.dll而且这是一个Web app。

4

1 回答 1

0

以防万一有人想在将来做同样的事情。这篇文章真的很有帮助: http: //www.jelovic.com/articles/resources_in_visual_studio.htm

我使用的一段代码(VB)是:

<Extension()>
Public Function Resource(Of TModel)(ByVal htmlHelper As HtmlHelper(Of TModel), resourceKey As String) As MvcHtmlString
    Dim regionLocator As IRegionLocator = DependencyResolver.Current.GetService(GetType(IRegionLocator))

    Dim resources = New List(Of String)
    If Not String.IsNullOrEmpty(regionLocator.RegionName) Then
        resources.Add(String.Format("Website.Resources.{0}", regionLocator.RegionName))
    End If
    resources.Add("Website.Resources")

    Dim value = String.Empty
    For Each r In resources
        Dim rManager = New System.Resources.ResourceManager(r, System.Reflection.Assembly.GetExecutingAssembly())
        rManager.IgnoreCase = True

        Try
            value = rManager.GetString(resourceKey)
            If Not String.IsNullOrEmpty(value) Then
                Exit For
            End If
        Catch

        End Try
    Next

    Return New MvcHtmlString(value)
End Function
于 2012-06-06T11:26:06.170 回答