Silverstripe:从页脚模板更正I18N URL的链接

时间:2017-01-12 08:31:06

标签: internationalization silverstripe

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

在重新设计之前,我包含了不同的文件。一个链接指向/ 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页脚看起来像

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

并且DE页脚看起来像

<a href="/datenschutz/">Datenschutz</a>

2 个答案:

答案 0 :(得分:1)

如果您使用的是Translatable Module且页面实际上已在CMS中关联,则只需使用$Link?Locale=en_US或更确切地说/datenschutz/?Locale=en_US。 当您访问/datenschutz/?Locale=en_US时,SilverStripe将通过重定向到EN Link进行响应。

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

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

PS:这个要点可能也会让你感兴趣:https://gist.github.com/Zauberfisch/9226142#file-translatablecontrollerextension-php-L39

答案 1 :(得分:0)

我认为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>

mysite / code / page.php中的必要代码(在Page类中):

public function LanguageURL($page) {
    if (empty($page)) {
        $page = $this;
    } else {
        $SQL_url = Convert::raw2sql($page);
        $page = Translatable::get_one_by_lang('SiteTree', 'de_DE', "URLSegment = '$SQL_url'");
    }

    if ($page->hasTranslation('en_GB') && Translatable::get_current_locale() == 'en_GB') {
        $link = $page->getTranslation('en_GB')->Link();
    } else {
        $link = $page->getTranslation('de_DE')->Link();
    }
    return $link;
}

您的德语网站输出

    <li><a href="/kontakt/">Kontakt</a></li>

...和您的英文网站输出

    <li><a href="/en/contact/">Contact</a></li>

实际输出取决于您的配置,但重点是输出当前区域设置的正确URL。

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