如何本地化MvcSiteMapProvider

时间:2013-12-02 12:19:06

标签: asp.net-mvc mvcsitemapprovider

我试图以几乎任何方式本地化MvcSiteMapProvider,但我没有得到它。正如我发现它在你使用app_globalresources文件夹时有效,但这不是一个选项,如果你使用MVC因为MVC不支持它们(至少发布功能不发布文件)。

目前,我的网站资源文件位于名为words.resx(和words.de-DE.resx)的文件中,该文件位于名为Resources的新文件夹下。我已将构建操作设置为“嵌入式资源”,“始终复制”并将工具更改为PublicResXFileCodeGenerator。

对于SiteMap,我不关心它是隐式还是显式本地化....我尝试了两种方法并使用了不同的resx文件命名和自定义工具的不同设置,但它们都没有工作。

有没有人让这个工作?

亲切的问候 岸堤

1 个答案:

答案 0 :(得分:3)

  

注意:将资源放入App_GlobalResources文件夹(isn't supported very well by MVC)的另一种方法是implement IStringLocalizer

本地化与微软的SiteMapProvider(MvcSiteMapProvider最初所基于的)基本保持不变。对于本地化,您仍然可以在大多数情况下遵循How to: Localize Site-Map Data文档。

启用本地化是在appSettings中的MvcSiteMapProvider_EnableLocalization设置中完成的,或者如果使用外部DI,您可以通过将设置传递给SiteMapBuilderSet的enableLocalization构造函数参数在DI配置中进行设置。它默认启用。

我建议使用显式本地化作为隐式本地化requires some hoops以便开始工作,并且可能会在将来的版本中进行更改。

可本地化的字段是:

  • 标题
  • 描述
  • 的ImageUrl
  • 属性(字符串数据类型)

以下是来自MvcMusicStore demo的显式本地化示例,该示例在某些节点上使用了本地化。

<mvcSiteMapNode title="$resources:SiteMapLocalizations,BrowseGenresTitle" controller="Store" action="Index"/>

它指的是App_GlobalResources文件夹中名为SiteMapLocalizations.resx的文件(以及名为BrowseGenresTitle的项目)。

或者,您可以对每个区域设置使用multiple sitemaps in the same application,从而为每个区域设置提供不同的网站结构(和不同的网址)。