6

私は MVC3 アプリでテキストのローカリゼーションにファイルを使用しており、これらの手順に従って.resxしばらくの間非常に満足していますが、画像のローカリゼーションも行う必要があるところまで来ました。

VS2010の.resxエディターを使用すると、イメージをリソースとして簡単に追加できます。ファイルと同じディレクトリにある Resources というフォルダーにダンプするだけ.resxで、ビューの文字列と同じ方法でイメージを参照できます。@ResXfileName.ResourceName、しかしそれはオブジェクトを返しSystem.Drawing.BitMapます、私はそれが私に画像へのパスを与えることを望んでいたので、画像タグのsrc属性に押し込むことができましたが、パスを取得する方法がまったくわかりません!

4

1 に答える 1

5

解決策 1: ロケールのフォルダー構造

最良の (そして最も簡単な) 方法は、ロケール名 (または LCID) を返す新しいHtmlHelper拡張メソッドを追加することであり、後でそれを使用できます (画像、スクリプトなど)。もちろん、最良の方法は、そのようなフォルダー構造にローカライズされたファイルを配置することです。

/images
    /en-US
        image1.png
    /en-GB
        image1.png
    /es-ES

            image1.png

そして、これはあなたがそれを使用する方法です:

<img src="/images/@Html.Locale/backgrounds/back.png" />

これは、そのような拡張メソッドの例です。

public MvcHtmlString Locale(this HtmlHelper helper)
{
    // in case you're setting UI culture
    return MvcHtmlString.Create(System.Threading.Thread.CurrentThread.CurrentUICulture.Name);
}

この単純化がうまくいかず、画像の特定の呼び出しが必要な場合は、UrlHelper呼び出されるメソッドを作成するImageFile、ロケール名または LCID に置き換えられるいくつかのトークンを使用してサーバー アプリの相対パスを指定します。

解決策 2: リソース ファイルのリンク

また、リソース ファイル内に画像パスを配置し、それらの値をビューで使用して、画像 (またはその他のファイル) の正しいパスを提供することもできます。

public MvcHtmlString Resource(this UrlHelper helper, string classKey string resourceKey)
{
    return MvcHtmlString.Create(helper.ViewContext.HttpContext.GetGlobalResourceObject(classKey, resourceKey));
}

そして、あなたの見解ではそれを次のように使用します:

<img src="@Url.Resource("images", "header")" />
于 2012-11-23T15:16:10.780 に答える