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