MVC3使用.resx进行图像的本地化

Ben*_*Ben 6 localization resx asp.net-mvc-3

我一直在使用.resx文件在我的MVC3应用程序中本地化文本非常愉快,现在遵循这些说明,但现在已经达到了我需要进行图像本地化的程度.

.resxVS2010中的编辑器可以让你轻松地将图像作为资源添加,它只是将它转储到与文件相同的目录中名为Resources的.resx文件夹中,我可以通过调用以与视图中的字符串相同的方式引用图像@ResXfileName.ResourceName,但是返回一个System.Drawing.BitMap对象,我希望它只是给我图像的路径,所以我可以把它推到图像标签src属性,但我无法弄清楚如何获得路径!

Rob*_*nik 5

解决方案1:locale文件夹结构

最好(也是最简单)的方法是添加一个HtmlHelper返回语言环境名称(或LCID)的新扩展方法,然后您可以将其用于任何事物(图像,脚本等).最好的方法当然是在这种文件夹结构中包含本地化文件:

/images
    /en-US
        image1.png
    /en-GB
        image1.png
    /es-ES
Run Code Online (Sandbox Code Playgroud)

            image1.png

这就是你如何使用它:

<img src="/images/@Html.Locale/backgrounds/back.png" />
Run Code Online (Sandbox Code Playgroud)

这是这种扩展方法的一个例子.

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

如果这种简化在您的情况下不起作用并且您需要对图像进行特定调用,那么创建一个UrlHelper名为Image或者File您为其提供服务器应用程序相对路径的方法,其中一些标记将替换为您的区域设置名称或LCID.

解决方案2:资源文件链接

您还可以将图像路径放在资源文件中,并在视图中使用这些值为图像(或其他文件)提供正确的路径.

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

然后在您的视图中将其用作:

<img src="@Url.Resource("images", "header")" />
Run Code Online (Sandbox Code Playgroud)