在组件链接中使用翻译字符串

时间:2012-08-27 15:18:36

标签: tridion tridion-2011

我从今天早上起就一直试图解决这个问题,我知道我在这里遗漏了一些明显的东西,但我似乎无法找到它。

我们正在使用发布到服务器的XML文件,其中包含所有标准单词的翻译,例如“read more”。它是一个页面,其中的组件已在适当的出版物中进行了本地化。

在我们的Razor模板中,我们在简单新闻摘要项目下方使用以下代码,该项目又链接到完整项目。

<a tridion:href="@news.ID" class="more" ><%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, "read_more")%></a>

事情是,服务器标签工作得很好,但是解析为

<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" AddAnchor="false" LinkText="&lt;%= DefaultLabels.TranslatedTerm(((HomePage)Page).Location, &#34;read_more&#34;) %&gt;" LinkAttributes=" class=&#34;more&#34;" TextOnFail="true"/>

正如您可能会注意到的那样,它在页面上以纯文本形式写入(这并不奇怪,因为根据liveDocs,LinkText参数首先被声明为String)。

如果我带走了

tridion:href
第一个例子中的

,并将其写为

href

它工作正常,代码解析为一个翻译的字符串,甚至链接......只是组件的TCM ID,而不是带有完整新闻项的正确页面。

我尝试在Razor中创建一个函数,尝试替换linkText,尝试在模板中设置ComponentLink,但无济于事。我觉得它应该只对这个模板的代码进行一些微调,但是我没有看到它,我开始查看自定义TBB来处理代码。

任何人都知道如何解决这个问题?

编辑:

克里斯的答案实际上是我在这种特殊情况下所寻找的答案,但我觉得我应该指出,普里扬的功能应该被认为是这样的。所以,谢谢你们的帮助,这让我的生活变得更加轻松了!

2 个答案:

答案 0 :(得分:8)

我希望这个剃刀功能能帮助你。这是从组件链接或外部链接呈现链接标记非常有用的功能。

@helper RenderLink(
    dynamic link,                        // the link to render. Handles components + internal / external links
    string cssClass = null,              // optional custom CSS class
    string title = null                 // optional link text (default is the title of the component being linked to)
    ) 
{
    if(link == null) 
    {
          return;
    }

    if (title == null) 
    {   
        title = link.title;
    }

    string classAttr = string.IsNullOrEmpty(cssClass) ? "" : " class='" + cssClass + "'";
    dynamic href;
    string tridionLink = "";
    string targetAttr = "";

    if (link.Schema.Title == "External Link") 
    {
        href = link.link;
    }
    else if (link.Schema.Title == "Internal Link")
    {
        href = link.link;
        tridionLink = "tridion:";
    } 
    else 
    {
        href = link;
        tridionLink = "tridion:";
    }    

    if(link.target != null) 
    {
        targetAttr = link.target == "New window" || link.target == "Popup" ? " target='_blank'" : "";
    }    

    <a @(tridionLink)href="@href"@classAttr@targetAttr>@title</a> 
}

答案 1 :(得分:2)

我建议不要使用默认模板来解析你的链接,而是自己输出这样的链接:

<tridion:ComponentLink runat="server" PageURI="tcm:15-407-64" 
    ComponentURI="tcm:15-1475" TemplateURI="tcm:0-0-0" 
    AddAnchor="false" LinkAttributes=" class=&#34;more&#34;" 
    TextOnFail="true">
        <%=DefaultLabels.TranslatedTerm(((HomePage)Page).Location, &#34;read_more&#34;) %>
</tridionComponentLink>

更好的是你可以考虑输出TCDL而不是Taglib / ServerControl