Как установить конкретный c язык для всех страниц в Codeigniter 4 - PullRequest
0 голосов
/ 16 февраля 2020

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

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

Папка языка -

enter image description here

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

<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();
    }
}

1 Ответ

1 голос
/ 20 февраля 2020

Я сам нашел решение для нескольких языков в 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');

Для этого маршрута я создал класс Язык с методом 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 Library в качестве службы $language = \Config\Services::language(); и установил язык этим методом $language->setLocale($session->lang);, используя данные сеанса.

...