Как установить определенный язык для всех страниц в Codeigniter 4

Я перевел 2 языка в папке app/Language и установил переключатель языка. В настоящее время перевод отлично работает для базовых URL-адресов, таких как example.com/en и example.com/sp.

Моя проблема заключается в том, что посетитель посещает другую страницу, например /post/cats/123, а затем Как установить язык для всей страницы просмотра. Каков стандартный способ настройки языка в codeigniter 4.

Языковая папка -

введите здесь описание изображения

код переключения языка.

<div class="dropdown-menu" aria-labelledby="navbarDropdown">
    <a class="dropdown-item" href="<?= base_url('en') ?>">English</a>
    <a class="dropdown-item" href="<?= base_url('sp') ?>">Spanish</a>
</div>

Маршрут-

$routes->get('/{locale}', 'Language::index');

Языковой класс -

class Language extends BaseController
{

    public function index()
    {
         $locale = $this->request->getLocale();
         $this->request->setLocale($locale);
         return redirect()->back();
    }
}

person Shahadat    schedule 16.02.2020    source источник


Ответы (1)


У меня есть решение для многоязычности в codeigniter-4, которое я описал сейчас. Здесь находится мой код просмотра, по которому можно щелкнуть для выбора языка -

<a class="dropdown-item" href="<?= base_url('lang/en'); ?>">English</a>
<a class="dropdown-item" href="<?= base_url('lang/es'); ?>">Español</a>

затем я использовал маршрут для языка-

$routes->get('/lang/{locale}', 'Language::index');

Для этого маршрута я создал класс Language с методом index-

class Language extends BaseController
{

    public function index()
    {   $session = session();
        $locale = $this->request->getLocale();
        $session->remove('lang');
        $session->set('lang',$locale);
        $url = base_url();
        return redirect()->to($url);     
    }
}

Здесь я включил сеанс для хранения выбранного языка и удалил старый язык из сеанса. $locale = $this->request->getLocale(); С помощью этого запроса я получил выбранный язык и сохранил его в сеансе $session->set('lang',$locale); и перенаправил на базовый URL-адрес.

В codeigniter-4 по умолчанию BaseController в методе initController я установил язык $language->setLocale($session->lang); для всех контроллеров, которые я расширяю для других.

class BaseController extends Controller{
    public function initController(\CodeIgniter\HTTP\RequestInterface $request, \CodeIgniter\HTTP\ResponseInterface $response, \Psr\Log\LoggerInterface $logger)
    {
      $session = \Config\Services::session();
      $language = \Config\Services::language();
      $language->setLocale($session->lang);
    }
}

Здесь я включил библиотеку языков в качестве службы $language = \Config\Services::language(); и установил язык с помощью этого метода $language->setLocale($session->lang);, используя данные сеанса.

person Shahadat    schedule 20.02.2020
comment
работает очень хорошо. могу ли я просто добавить, что на случай, если вы по какой-то причине захотите проверить lanf, CI4 считывает 2 символьных кода, например. 'en' - person FilT; 24.11.2020