我在站点应用程序中向我的项目添加了本地文件,并且在使用 /locale/path 时可以正确显示翻译的内容。 我遇到的问题是自定义内容应用程序以英语(默认区域设置)显示,并且导航菜单栏也以英语显示,尽管每个页面都有翻译的导航标题。
可能是什么原因?
检索自定义内容应用程序的代码是:
<div class="row-fluid foo-content">
[#assign articles = cmsfn.contentByPath("/", "articles") ]
[#assign article = cmsfn.children(articles, "lib:article")?sort_by("publish_date")?first ]
<div class="span4 newsroom">
<h4>${i18n.get('footer.newsroom')}</h4>
<section class="foo-container clearfix">
<div class="news-date">
<span class="date">${article.publish_date?string.dd}</span>
<span class="month">${article.publish_date?string.MMMM}</span>
<span class="year">${article.publish_date?string.yyyy}</span>
</div>
<div class="content">
<p class="upper">${article.title}</p>
<div class="fsize-12">
${article.description?substring(0, 170)}...
</div>
<p>
<a class="link-readmore" href="${cmsfn.link(cmsfn.siteRoot(content))}client/articles/view-article~${article.@name}~.html">${i18n.get('footer.readMore')}</a>
</p>
</div>
</section>
[#assign rootNode = cmsfn.contentByPath("/alqasemi/articles")]
[#if rootNode??]
<a class="btn-blue" href="${cmsfn.link(rootNode)}">${i18n.get('footer.viewAlqaswmiNews')}</a>
[/#if]
</div>
您面临的问题是由于您在此处手动创建文章的链接:
<a class="link-readmore" href="${cmsfn.link(cmsfn.siteRoot(content))}client/articles/view-article~${article.@name}~.html">${i18n.get('footer.readMore')}</a>
与翻译链接文本的方式相同,您还需要向
view-article
页面/模板提供区域设置,以便它知道要翻译成什么。您可以在演示项目的link.ftl
中查找详细信息。从那里复制(因此应该在 6.2.x 中工作),尝试将链接更改为类似以下内容:
[#assign target = cmsfn.contentByPath("/client/articles/view-article")!]
[#assign link = cmsfn.link(target)!]
[#assign articleName = article.@name!]
<a href="${getDynamicLink(link, articleName)}">${i18n.get('footer.readMore')}</a>
其中
getDynamicLink()
函数如下所示:
[#function getDynamicLink link itemName omitExtension=false]
[#local dynamicLink = ""]
[#if link?ends_with(".html")]
[#local dynamicLink = link?replace(".html", "~"+itemName+"~")]
[#else]
[#local dynamicLink = link+"~"itemName+"~"]
[/#if] [#if !omitExtension]
[#local dynamicLink += ".html"]
[/#if] [#return dynamicLink]
[/#function]
(免责声明:没有检查上面的代码是否实际运行,可能有拼写错误,但应该给你解决方案的方向)
内容未本地化的原因是自定义内容应用程序中的内容未默认进行翻译包装。
解决方案是将 cmsfn.wrapForI18n(content) 添加到内容中,然后输出将与应用的语言环境匹配。
所以这一行:
[#assign article = cmsfn.children(articles, "lib:article")?first]
应该是:
[#assign article = cmsfn.wrapForI18n(cmsfn.children(articles, "lib:article")?first)]