如何在Laravel视图中找到当前语言?

Ben*_*nRH 13 localization laravel

我正在使用Laravel Lang类来定位我的Web应用程序.我在语言数组中添加了两种语言application/config/application.php.这会将用于本地化的默认语言更改为URI的第一部分(例如bla.com/en/bla和bla.com/co/bla).现在我需要能够检查我视图中当前的默认语言.但是,Lang类没有办法检查这个,因为Lang::$language变量是受保护的.除了手动解析URI之外,有没有办法检查这个?

Erw*_*wan 25

了解Laravel中您网站当前语言的最简洁方法似乎是:

Lang::locale();
Run Code Online (Sandbox Code Playgroud)

http://laravel.com/api/5.1/Illuminate/Translation/Translator.html#method_locale

它与此命令的不同之处将返回您网站的默认语言:

Config::get('app.locale');
Run Code Online (Sandbox Code Playgroud)


Tha*_*MSG 17

另一种更短的方法可能是使用这样的东西:

app()->getLocale()
Run Code Online (Sandbox Code Playgroud)

这样做的好处是 PHPStorm 等 IDE 可以识别此功能,可以帮助您更快地开发。


aeb*_*old 9

BenjaminRH的答案非常好,他建议的方法非常有效.我已经改进了一些片段.现在它检测浏览器语言并根据应用程序的配置文件检查是否支持该语言.

这是一个快速的黑客,但它适用于我的应用程序.请注意,现在还设置了应用程序语言.随意使用矿石改善它.

Route::filter('before', function()
{
    // current uri language ($lang_uri)
    $lang_uri = URI::segment(1);

    // Set default session language if none is set
    if(!Session::has('language'))
    {
        // use lang in uri, if provided
        if(in_array($lang_uri, Config::get('application.languages')))
        {
            $lang = $lang_uri;  
        }
        // detect browser language
        elseif(isset(Request::server('http_accept_language')))
        {
            $headerlang = substr(Request::server('http_accept_language'), 0, 2);

            if(in_array($headerlang, Config::get('application.languages')))
            {
                // browser lang is supported, use it
                $lang = $headerlang;
            }
            // use default application lang
            else
            {
                $lang = Config::get('application.language');
            }
        }
        // no lang in uri nor in browser. use default
        else 
        {
                // use default application lang
                $lang = Config::get('application.language');            
        }

        // set application language for that user
        Session::put('language', $lang);
        Config::set('application.language',  $lang);
    }
    // session is available
    else
    {
        // set application to session lang
        Config::set('application.language', Session::get('language'));
    }

    // prefix is missing? add it
    if(!in_array($lang_uri, Config::get('application.languages'))) 
    {
        return Redirect::to(URI::current());
    }
    // a valid prefix is there, but not the correct lang? change app lang
    elseif(in_array($lang_uri, Config::get('application.languages')) AND $lang_uri != Config::get('application.language'))
    {
        Session::put('language', $lang_uri);
        Config::set('application.language',  $lang_uri);    
    }
});
Run Code Online (Sandbox Code Playgroud)


Ped*_*ira 7

在较新的Laravel版本中,您可以使用以下语言获取当前语言:

Config::get('app.locale');
Run Code Online (Sandbox Code Playgroud)


小智 6

这会很好用

lang="{{ app()->getLocale() }}"
Run Code Online (Sandbox Code Playgroud)