Internationalization Silverstripe:从页脚模板链接到正确的I18N URL

Internationalization Silverstripe:从页脚模板链接到正确的I18N URL,internationalization,silverstripe,Internationalization,Silverstripe,我的网站有两种语言,我的页脚链接有问题 在重新设计之前,我包含了不同的文件。一个文件的链接指向/en/privacy/或/en/contact/等,另一个文件的链接像/datenschutz/或/kontakt/ <% if Locale == en_GB %> <% include Footer_en_GB %> <% else %> <% include Footer %> <% end_if %> 这使得它很难维持

我的网站有两种语言,我的页脚链接有问题

在重新设计之前,我包含了不同的文件。一个文件的链接指向/en/privacy/或/en/contact/等,另一个文件的链接像/datenschutz/或/kontakt/

<% if Locale == en_GB %>
  <% include Footer_en_GB %>
<% else %>
  <% include Footer %>
<% end_if %>

这使得它很难维持

有更好的办法吗?是否可以获取页面的propper I18N链接

差不多

<a href="i18nlink('/datenschutz/')">i18ntitle('/datencshutz/')</a>

因此,EN-footer看起来像

<a href="/en/privacy/">Privacy</a>
<a href="/datenschutz/">Datenschutz</a>

页脚的样式如下所示

<a href="/en/privacy/">Privacy</a>
<a href="/datenschutz/">Datenschutz</a>

如果您使用的是CMS,并且页面实际上是链接在CMS中的,您可以简单地使用
$Link?Locale=en_US
或者更确切地说是
/datenschutz/?Locale=en_US

然后,当您访问
/datenschutz/?Locale=en_US
时,SilverStripe将以重定向到en链接的方式进行响应

或者在PHP中,您可以使用:

if ($page->hasTranslation('en_US')) {
    $link = $page->getTranslation('en_US')->Link();
}

PS:这个要点可能也会让你感兴趣:

我认为SS中有一些简单的解决方案,但找不到

这就是我现在所做的

模板:

<ul class="vertical menu">
    <li><a href="$LanguageURL('homepage')">Startseite</a></li>
    <li><a href="$LanguageURL('unternehmen')">Über uns</a></li>
    <li><a href="$LanguageURL('kontakt')">Kontakt</a></li>
</ul>
你的德国网站输出

    <li><a href="/kontakt/">Kontakt</a></li>
  • …和您的英语网站输出

        <li><a href="/en/contact/">Contact</a></li>
    
  • 实际输出取决于您的配置,但关键是为当前语言环境输出正确的URL


    也许任何人都需要类似的东西,或者有更好的解决方案:-)

    你可以尝试使用类似的模块,我不知道,但我会看看。目前我坚持使用可翻译页面。如何在页脚中指定链接到的页面?您只是将它们添加到模板标记中吗?我通常在SiteConfig部分有这些可编辑的,这使得每种语言的页脚链接也很容易指定…我主要把它们放在模板中,因为有更复杂的用于模态、表单等的HTML。我想有干净的链接,没有?地区添加。PHP代码也没有帮助。我需要输出默认URL(德语)或(基于当前语言环境)英语URL。无论如何,感谢您的帮助这只在有人意外更改URLSEMENT之前有效:(