【问题标题】:MVC3 using .resx for localisations of imagesMVC3 使用 .resx 进行图像本地化
【发布时间】:2012-11-23 14:59:49
【问题描述】:

我一直很高兴地使用.resx 文件在我的 MVC3 应用程序中进行文本本地化,现在遵循这些instructions,但现在我也需要对图像进行本地化。

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

【问题讨论】:

  • 您可以将图像的相对或绝对路径保存为资源文件中的字符串(与其他文本相同)。
  • 我可以,但我至少想了解如何按预期使用 resx 文件,然后再决定使用哪种方法
  • 我明白了。但这就是 resx 文件的工作方式。图像作为对象而不是文件的路径返回。这样,如果用户需要,它使资源能够将图像嵌入到程序集中。以我最初描述的方式使用它仍然是本地化的。
  • 好的,有没有办法从对象中获取文件路径?

标签: asp.net-mvc-3 localization resx


【解决方案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);
}

如果这种简化在您的情况下不起作用并且您需要对图像进行特定调用,则创建一个名为 ImageFileUrlHelper 方法,您可以在其中提供服务器应用程序相对路径以及一些被替换的令牌使用您的语言环境名称或 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")" />

【讨论】:

  • 我真的希望我可以使用 resx 文件来组织我的所有图像(那些无论如何都需要本地化的图像),如果不是为了什么,能够向其中添加图像的预期功能是什么我在尝试?
  • @Ben:我的回答只是其中一种方式。还有其他方法。一种是将图像路径(或名称)保存在资源文件中,另一种是将图像直接添加到附属程序集中并具有为它们提供服务的处理程序等。有很多方法......我只是说最简单的是拥有一个辅助扩展方法,并在每种语言的文件夹结构中都有文件。你可以实现任何你喜欢的。既然你似乎已经知道自己想要什么……那你为什么不直接使用它呢?
  • 我认为这是一个很好的方法。我真的想继续使用 resx 文件而不是使用特定的文件夹结构,因为使用 resx 方法,如果特定资源在所选语言中不可用,它会自动默认为英文版本。但是,我仍然想知道使用 resx 文件和图像的正确方法是什么,换句话说,微软在编写允许您插入图像的 resx 编辑器时的意图
  • @Ben:同样的回退也可以使用文件夹结构来实现。我的扩展非常简单。您当然可以检查文件是否存在并在文件不存在时提供回退。关于图像,我认为人们大多使用文件夹结构,因为它是最不复杂的一种,也是第一个浮现在脑海中的。简单通常是关键。而且它也很容易理解,无需为新团队成员添加额外的抽象层。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多