如何在Codeigniter 4中为所有页面设置特定语言

jv4diomz  于 2022-12-07  发布在  其他
关注(0)|答案(2)|浏览(159)

我已经在'app/Language'文件夹中翻译了2种语言,并设置了语言切换器。目前,对于example.com/enexample.com/sp等基本URL,翻译工作正常。
我的问题是当访客访问其他页面,如/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();
    }
}
d7v8vwbk

d7v8vwbk1#

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

对于这个路线我创建了一个类语言与方法索引-

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);设置语言。

xxhby3vn

xxhby3vn2#

以下是Shahadat提到的使用CI4的本地化实现:
CodeIgniter 4 Language Localization Tutorial

相关问题