laravel多语言切换和更改负载区域设置

时间:2019-04-10 07:18:10

标签: laravel localization multilingual

我已经实现了this post之后的语言切换功能,并且它可以完美运行,但是只是当您单击语言切换时,尽管我想更改locale并将其存储在App中页面已加载。

我的功能与文章中的功能有些不同,我添加了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,也不想使用它,因此请不要提出包含该选项的解决方案。

我的URL的示例(可以使用所有可用的语言查看每个URL)

domain/city1/
domain/city1/dashboard/
domain/city2/
domain/city2/dashboard/
domain/admin/

我不要:

domain/city1/en/...
domain/city1/pt/...

1 个答案:

答案 0 :(得分:2)

也许您需要这样的东西,只要页面最初加载时就没有任何服务器值,因此它无法为$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);
}