【问题标题】:How to localize the MvcSiteMapProvider如何本地化 MvcSiteMapProvider
【发布时间】:2013-12-02 12:19:06
【问题描述】:

我尝试以几乎任何方式本地化 MvcSiteMapProvider,但我不明白。正如我发现的那样,当您使用 app_globalresources 文件夹时它可以工作,但这不是一个选项,如果您使用 MVC,因为 MVC 不支持它们(至少发布功能不发布文件)。

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

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

有人让这个工作吗?

亲切的问候 安迪

【问题讨论】:

    标签: asp.net-mvc mvcsitemapprovider


    【解决方案1】:

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

    与 MvcSiteMapProvider 最初基于的 Microsoft SiteMapProvider 相比,本地化基本保持不变。对于本地化,您仍然可以在大部分情况下关注How to: Localize Site-Map Data 文档。

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

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

    可本地化的字段是:

    • 标题
    • 说明
    • 图片网址
    • 属性(字符串数据类型)

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

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

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

    或者,您可以为每个语言环境使用multiple sitemaps in the same application,这样可以使每个语言环境具有不同的站点结构(和不同的 URL)。

    【讨论】:

    • 感谢您的回复,但在 MVC 中使用 App_GlobalResources 不是一个选项,当 resx 文件位于普通文件夹中时,我无法使用它。
    • 你是什么意思它不是 MVC 中的一个选项?您只需要添加文件夹即可。
    • 仅供参考 - 我找到了发布命令的解决方案。您需要将构建操作设置为“Embedded”,将“Do Not Copy”设置为输出目录,并将自定义工具设置为“PublicResXFileCodeGenerator”,自定义工具命名空间设置为“Resources”:stackoverflow.com/questions/16789961/…
    • 嗯,我试过了。我的资源文件名为 SiteMapRes.resx,现在位于 App_GlobalResources(嵌入式资源、请勿复制、资源)下。我在 MVC.sitemap 文件中使用 title="$resources:SiteMapRes,Home" 访问它们。此配置在本地工作!在服务器上发布后出现以下错误“找不到类名为'SiteMapRes'和键'Home'的资源对象。
    • 感谢您的建议。如果您能提供此信息的链接或 2,我将不胜感激。当前的实现是基于 Microsoft 为 ASP.NET 设计的 SiteMapProvider(就像 V3 一样),但我没有意识到它的全局资源设计不应该用于 MVC。推荐的替代方案是什么?另外,您指的是什么“好的解决方案”? App_GlobalResources 是这里讨论的唯一选项,因为它是当前在 MvcSiteMapProvider 中本地化单个 SiteMap 的唯一选项。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-05
    • 2019-05-25
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多