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)
我自己在 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>\nRun Code Online (Sandbox Code Playgroud)\n\n然后我使用了一条语言路线-
\n\n$routes->get(\'/lang/{locale}\', \'Language::index\');\nRun Code Online (Sandbox Code Playgroud)\n\n对于这条路线,我创建了一个带有方法索引的语言类-
\n\nclass 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}\nRun Code Online (Sandbox Code Playgroud)\n\n在这里,我启用会话来存储所选语言并从会话中删除旧语言。$locale = $this->request->getLocale();通过此请求,我收到了选定的语言并存储到会话中$session->set(\'lang\',$locale);并将其重定向到基本网址。
在initController方法中的 codeigniter-4 默认BaseController中,我为我为其他扩展的所有控制器设置了语言。$language->setLocale($session->lang);
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}\nRun Code Online (Sandbox Code Playgroud)\n\n在这里,我启用了语言库作为服务$language = \\Config\\Services::language();,并使用会话数据通过此方法设置语言$language->setLocale($session->lang);。