#php #silverstripe
#php #silverstripe
Вопрос:
Я использую переводимый плагин Silverstripe для создания веб-сайта на нескольких языках. Однако я также хотел бы перевести встроенные страницы, такие как страница входа или сброса пароля. Простое применение ?local=en_US
в конце URL-адреса, похоже, не помогает, и также нет способа создать деидентифицированную страницу входа на втором языке. Есть ли какой-нибудь способ заставить это работать?
Комментарии:
1. Я думаю, вам нужно проверить этот параметр в Controller::init() самостоятельно и установить языковой стандарт вручную.
Ответ №1:
Вот решение. Это работает за счет расширения класса контроллера, который достаточно низок, чтобы также влиять на контроллеры, такие как Security, которые обрабатывают login.
Он запоминает язык предыдущей страницы, а затем использует его для отображения «встроенной страницы».
ControllerDecorator.php
<?php
class ControllerDecorator extends Extension {
function onBeforeInit() {
// If we're on a page, use its Locale information
if($this->getOwner() instanceof ContentController) {
$locale = $this->getOwner()->Locale;
i18n::set_locale($locale);
Cookie::set('Locale', $locale);
}
// Otherwise, use the stored Locale
else if(Cookie::get('Locale')) {
i18n::set_locale(Cookie::get('Locale'));
}
}
}
config.yml
Controller:
extensions:
- ControllerDecorator