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

Sha*_*dat 2 php codeigniter codeigniter-4

我已经在“ app/Language ”文件夹中翻译了 2 种语言并设置了语言切换器。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>
Run Code Online (Sandbox Code Playgroud)

路线-

$routes->get('/{locale}', 'Language::index');
Run Code Online (Sandbox Code Playgroud)

语文课——

class Language extends BaseController
{

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

Sha*_*dat 6

我自己在 codeigniter-4 中得到了一个多语言的解决方案,我现在描述了这一点。我的查看代码在这里,可单击以选择语言 -

\n\n
<a class="dropdown-item" href="<?= base_url(\'lang/en\'); ?>">English</a>\n<a class="dropdown-item" href="<?= base_url(\'lang/es\'); ?>">Espa\xc3\xb1ol</a>\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我使用了一条语言路线-

\n\n
$routes->get(\'/lang/{locale}\', \'Language::index\');\n
Run Code Online (Sandbox Code Playgroud)\n\n

对于这条路线,我创建了一个带有方法索引的语言类-

\n\n
class Language extends BaseController\n{\n\n    public function index()\n    {   $session = session();\n        $locale = $this->request->getLocale();\n        $session->remove(\'lang\');\n        $session->set(\'lang\',$locale);\n        $url = base_url();\n        return redirect()->to($url);     \n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这里,我启用会话来存储所选语言并从会话中删除旧语言。$locale = $this->request->getLocale();通过此请求,我收到了选定的语言并存储到会话中$session->set(\'lang\',$locale);并将其重定向到基本网址。

\n\n

在initController方法中的 codeigniter-4 默认BaseController中,我为我为其他扩展的所有控制器设置了语言。$language->setLocale($session->lang);

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

在这里,我启用了语言库作为服务$language = \\Config\\Services::language();,并使用会话数据通过此方法设置语言$language->setLocale($session->lang);

\n