我的网站有两种语言,我的页脚链接有问题。
在重新设计之前,我包含了不同的文件。一个链接指向/ 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>
答案 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。
也许任何人都需要类似的东西或有更好的解决方案: - )