SiteMap使用不同项目中的资源进行本地化

时间:2015-08-26 18:43:41

标签: c# asp.net localization resources sitemap

我正在使用ASP.Net 4.0开发一个网站,该网站使用位于单独项目文件中的资源。

总的来说,本地化很顺利。但是,Sitemap未正确本地化。

最初,我使用Implicit本地化命名资源键,但是当资源移动到另一个项目时,这就破坏了。我们有多个项目共享相同的资源,因此单独的资源项目是有意义的。

出于这个原因,我决定明确显示站点地图资源。

原始的siteMapNode:

<siteMapNode url="Account" title="Account" description="showNavigation('Account');">

使用资源键,直到资源移出项目为止:

<siteMapNode url="Account" title="Account" description="showNavigation('Account');" resourceKey="Account">

最后使用显式资源的sitemap节点: <siteMapNode url="Account" title="$Namespace:Sitemap, Account" description="showNavigation('Account');">

不幸的是,使用最后一个站点地图节点,我确实在站点地图显示上获得了$Namespace:Sitemap, Account

有人有进一步的建议吗?

1 个答案:

答案 0 :(得分:0)

我最终没有修改Sitemap文件并使用以下SiteMapNode

<siteMapNode url="Account" title="Account" description="showNavigation('Account');" resourceKey="Account">

这是我试图用来本地化站点地图的那个。

正如我上面所说,仅此一项是行不通的。查看ascx文件(站点地图位于自定义控件上),我注意到每个节点的OnItemDataBound事件都有一个事件处理程序。

在ascx文件中,菜单项文本如下:

<%# Eval("Title") %>

我将其替换为:

<asp:Literal ID="litTitle" runat="server"/>

在事件处理程序中,我添加了以下代码来本地化标题:

var node = ((SiteMapNode)e.Item.DataItem);
var litTitle = ((Literal)e.Item.FindControl("litTitle"));
if (node != null)
{
    litTitle.Text = Sitemap.ResourceManager.GetString(node.ResourceKey, CultureInfo.CurrentCulture);
}

GetString()调用中,参数应为:node.ResourceKey + ".Title"。但是,我也借此机会简化了资源文件,并从每个密钥中删除了所有“.Title”后缀。