1

我已经翻译了 ' app/Language ' 文件夹中的 2 种语言并设置了语言切换器。目前翻译适用于基本 urlexample.com/enexample.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();
    }
}
4

1 回答 1

3

我自己在 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 -

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。

在initController方法中的codeigniter-4 默认BaseController中,我为我为其他扩展的所有控制器设置了语言。$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);

于 2020-02-20T13:30:53.790 回答