使用来自流利的LocalMenu
模板来获取语言切换器,这给了我"错误"我自定义控制器和数据对象的链接,我显示为页面。
所以我有两个。控制器作为页面和数据对象在其他自定义控制器上显示为页面。
而不是en/sompage/foobar
我收到somepage/foobar?l=en_US
我认为这是因为我在这些数据对象和控制器上错误地实现了Link
函数而造成的。
我该怎么做正确?我无法找到任何相关信息。那是我现在的代码:
public function Link($action = null) {
$parent = MyParentPage::get()->first()->URLSegment;
$home = RootURLController::get_default_homepage_link();
if($parent != $home) {
$url = $parent . '/';
} else {
$url = null;
}
return Director::baseURL() . $this->fluentUrlSegment() . $url . 'controller-segment';
}
和
public function fluentUrlSegment() {
if(class_exists('Fluent')) {
$locale = Fluent::current_locale();
$fluentConfig = Fluent::create()->config();
if($fluentConfig->default_locale != $locale) {
if($fluentConfig->aliases && isset($fluentConfig->aliases[$locale])) {
$locale = $fluentConfig->aliases[$locale];
}
$locale = $locale . '/';
} else {
$locale = '';
}
} else {
$locale = '';
}
return $locale;
}
流畅的配置
---
Name: projectfluentconfig
After: '#fluentconfig'
---
Fluent:
disable_default_prefix: true
detect_locale: true
remember_locale: true
default_locale: de_DE
locales:
- de_DE
- en_US
aliases:
de_DE: de
en_US: en
field_exclude:
---
Name: projectfluentconfig
After: '#fluenti18nconfig'
---
i18n:
default_locale: de_DE
感谢wmk的回答,我可以改进我的链接功能。不幸的是,它仍然没有改变流水语言环境菜单中链接的任何内容。
而不是geschichte/..
和en/geschichte/..
我在德语网站上收到geschichte/..?l=de_DE
和geschichte/..?l=en_US
,在英语网站上收到en/geschichte/..?l=de_DE
和en/geschichte/..?l=en_US
。
流利的是否完全忽略了这些链接功能?我还犯错了还是错过了什么?这是我的短代码Controller,DataObject,Routes,Extensions& Fluent Config
有什么建议吗?
LocaleLink
课程中的FluentSiteTree
函数似乎是"问题"
答案 0 :(得分:1)
您已从数据库中抓取一个页面并获取URLSegment。为什么不利用该网页的Link()
方法?这应该已经设置了流利的东西。
然后使用Controller::join_links()
public function Link($action = null) {
//maybe parent::Link() also works, depending on your code structure
$parent = MyParentPage::get()->first()->Link();
return Controller::join_links($parent, 'controller-segment', $action);
}
答案 1 :(得分:0)
这不是一个真正的答案,而是一种解决方法。
我通过将FluentExtension
也添加到Controller来管理它以使其工作,并且在该控制器上我实现了自己的LocaleLink
函数。
对于任何困在这里的人,直到有一个真正的解决方案,这是我的工作代码Controller,DataObject,Routes,Extensions& Fluent Config
如果你不想为控制器使用翻译的urlsegment,你可以使用这个链接功能
public function Link($action = null) {
$homepage = Page::get()->find('URLSegment', RootURLController::get_homepage_link());
$parent = $homepage->Link();
$urlByLocale = [
'de_DE' => 'geschichte',
'en_US' => 'story',
];
return Controller::join_links($parent, $urlByLocale[Fluent::current_locale()], $action);
}
并改变那样的路线
'de/geschichte//$URLSegment!' => [
'Controller' => 'Story_Controller',
'l' => 'de_DE'
],
'en/story//$URLSegment!' => [
'Controller' => 'Story_Controller',
'l' => 'en_US'
],
如果有人能找到一种“更好”的方法来实现这一目标,那就太棒了。