Перевести форму входа в Silverstripe и другие встроенные страницы

#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