laravel多语言切换并在加载时更改区域设置

问题描述 投票:0回答:1

我已经在this post之后实现了语言切换功能,它完美地工作,但是当你点击语言切换时,虽然我想在页面加载时更改locale并将其存储在应用程序中。

我的功能与帖子中的功能略有不同,我添加了一个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/...
laravel localization multilingual
1个回答
2
投票

可能你需要这样的东西,每当最初页面加载时不会有任何服务器值,所以它不能为$userLangs变量设置值。因此,根据您的代码,if语句失败,因为没有会话值,而elseif条件也失败,因为没有为$ availableLangs找不到的$userLangs值。当没有首选用户语言时,只需添加一个其他条件来设置网站的默认语言。

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);
}
© www.soinside.com 2019 - 2024. All rights reserved.