6

一段时间以来,我一直很高兴地按照这些说明.resx在我的 MVC3 应用程序中使用文件对文本进行本地化,但现在已经到了我也需要对图像进行本地化的地步。

VS2010中的.resx编辑器可以让您轻松地将图像添加为资源,它只是将其转储到与文件位于同一目录的名为 Resources 的文件夹中.resx,我可以通过调用以与视图中的字符串相同的方式引用图像@ResXfileName.ResourceName,但这会返回一个System.Drawing.BitMap对象,我希望它只会给我图像的路径,这样我就可以将它推到图像标签的 src 属性中,但我根本不知道如何获取路径!

4

1 回答 1

5

解决方案1:语言环境文件夹结构

最好(也是最简单)的方法是添加一个新的HtmlHelper扩展方法,该方法返回语言环境名称(或 LCID),然后您可以将其与任何东西(图像、脚本等)一起使用。最好的方法当然是在这样的文件夹结构中拥有本地化文件:

/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 回答