laravel 加载时多语言切换和更改区域设置
laravel multi-language switch and change locale on load
我已经在 this post 之后实现了语言切换功能,它工作得很好,但是当你点击语言切换时,虽然我想更改 locale
并将它存储在加载页面时的应用程序。
我的功能与 post 中的有点不同,我添加了一个 else if
只是为了确保语言环境是可接受的语言
App/Middleware/Localization.php
public function handle($request, Closure $next)
{
$availableLangs = array('en', 'hu', 'pt', 'ro', 'sv');
$userLangs = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);
if (\Session::has('locale'))
{
\App::setlocale(\Session::get('locale'));
}
else if (in_array($userLangs, $availableLangs))
{
\App::setLocale($userLangs);
// Session::push('locale', $userLangs);
}
return $next($request);
}
如何重用此函数或创建新函数来实现相同的结果,但当您加载网站时?
我有很多路线,所以我认为我需要一个功能,以免一遍又一遍地重复相同的代码。
我不使用 URL 上的 locale
并且我不想使用它,所以请不要提出包含该选项的解决方案。
我的 URLS 示例(每个 URL 都可以使用所有可用语言查看)
domain/city1/
domain/city1/dashboard/
domain/city2/
domain/city2/dashboard/
domain/admin/
我不想:
domain/city1/en/...
domain/city1/pt/...
可能您需要这样的东西,无论何时最初加载页面,都不会有任何服务器值,因此它无法为 $userLangs
变量设置值。因此,根据您的代码,if 语句失败,因为没有会话值,elseif 条件也失败,因为没有为 $userLangs
设置值,这在 $availableLangs 中找不到。当没有首选用户语言时,只需添加一个其他条件即可设置网站的默认语言。
public function handle($request, Closure $next)
{
$availableLangs = array('en', 'hu', 'pt', 'ro', 'sv');
$userLangs = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);
if (\Session::has('locale'))
{
\App::setlocale(\Session::get('locale'));
}
else if (in_array($userLangs, $availableLangs))
{
\App::setLocale($userLangs);
Session::put('locale', $userLangs);
}
else {
\App::setLocale('en');
Session::put('locale', 'en');
}
return $next($request);
}
我已经在 this post 之后实现了语言切换功能,它工作得很好,但是当你点击语言切换时,虽然我想更改 locale
并将它存储在加载页面时的应用程序。
我的功能与 post 中的有点不同,我添加了一个 else if
只是为了确保语言环境是可接受的语言
App/Middleware/Localization.php
public function handle($request, Closure $next)
{
$availableLangs = array('en', 'hu', 'pt', 'ro', 'sv');
$userLangs = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);
if (\Session::has('locale'))
{
\App::setlocale(\Session::get('locale'));
}
else if (in_array($userLangs, $availableLangs))
{
\App::setLocale($userLangs);
// Session::push('locale', $userLangs);
}
return $next($request);
}
如何重用此函数或创建新函数来实现相同的结果,但当您加载网站时?
我有很多路线,所以我认为我需要一个功能,以免一遍又一遍地重复相同的代码。
我不使用 URL 上的 locale
并且我不想使用它,所以请不要提出包含该选项的解决方案。
我的 URLS 示例(每个 URL 都可以使用所有可用语言查看)
domain/city1/
domain/city1/dashboard/
domain/city2/
domain/city2/dashboard/
domain/admin/
我不想:
domain/city1/en/...
domain/city1/pt/...
可能您需要这样的东西,无论何时最初加载页面,都不会有任何服务器值,因此它无法为 $userLangs
变量设置值。因此,根据您的代码,if 语句失败,因为没有会话值,elseif 条件也失败,因为没有为 $userLangs
设置值,这在 $availableLangs 中找不到。当没有首选用户语言时,只需添加一个其他条件即可设置网站的默认语言。
public function handle($request, Closure $next)
{
$availableLangs = array('en', 'hu', 'pt', 'ro', 'sv');
$userLangs = substr($request->server('HTTP_ACCEPT_LANGUAGE'), 0, 2);
if (\Session::has('locale'))
{
\App::setlocale(\Session::get('locale'));
}
else if (in_array($userLangs, $availableLangs))
{
\App::setLocale($userLangs);
Session::put('locale', $userLangs);
}
else {
\App::setLocale('en');
Session::put('locale', 'en');
}
return $next($request);
}