1

私は .NET 4.0 MVC3 Web アプリケーションに取り組んでいます。アプリケーションはすべて英語であり、ユーザーはさまざまな地域に関する情報を入力できます。簡単にするために、米国西ヨーロッパの 2 つの地域があるとします。

ここで、ビューにProject Openingなどの文字列を表示しますが、ユーザーがUnited Statesの地域で作業している場合は、 Projectinitiationを読みたいと思います。

この機能について考えるとき、すぐにさまざまなリージョンのリソース ファイルについて考えますが、UI カルチャからは独立しています。

誰かが私が望むものを達成するためのレシピを持っていますか?

ExtendedDisplayAttribute(string displayName, int regionId)将来、ViewModels のプロパティの上に配置するなどして読み取れるようにできれば、それもいいでしょう。

編集

この領域の文字列を返す必要があるヘルパーで領域情報にアクセスできる段階に既にあります。今、リソースファイルに問題があります。フェールオーバー メカニズムを使用して複数のリソース ファイルを作成したいと考えています。すぐに使えるものがあると思っていましたが、ResourceManager を使用して resx ファイルを読み取ることはできません。

意味のない resgen.exe を使用せずに、特定のリソース ファイルから値を読み取ることができる手法はありますか?

System.Resources.ResXResourceReaderに属しSystem.Windows.Forms.dll、これは Web アプリであるため、私も使用したくありません。

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 に答える