我正在使用Laravel Lang类对我的web应用进行本地化.我在application/config/application.php种语言中添加了两种语言.这会将用于本地化的默认语言更改为URI的第一部分指示的任何语言(例如bla.com/en/bla和bla.com/co/bla).现在,我需要能够判断当前默认语言在我看来是什么.然而,据我所知,Lang类没有提供任何方法来判断这一点,因为Lang::$language变量是受保护的.除了手动解析URI之外,还有什么方法可以判断这个问题吗?

推荐答案

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

It's a quick hack, but it works on my app. Note that the application language is also set now. Feel free to use ore improve it.

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);    
    }
});

Laravel相关问答推荐

Laravel使用PostgreSQL显示";`try 读取null`上的属性,而不是SQL错误消息

如何在控制器中获取所需参数?

如何让 Laravel 的 Collection 表现得像一个流?

工厂多对多数据透视表属性

从 Laravel 中的值开始主键

Laravel where 子句只返回一个数据库条目

不能在 laravel 中使用控制器名称,必须使用命名空间

如何在laravel中输出奇偶行

Laravel created_at 返回对象代替数据库中的日期格式?

Laravel - 加载常见的页眉和页脚以查看

具有实时和 WebSockets 的 Angular2 + Laravel

会话中的 Laravel 存储数组

合并和排序两个 Eloquent 集合?

升级到 Laravel 5.2 会使所有会话失效

Laravel 5.2 身份验证不起作用

Laravel Queue,Beanstalkd vs Database,有什么区别?

Grammar::parameterize() 必须是数组类型

Laravel 从公共删除目录

Laravel 集合计数结果

Laravel:Redis 无法建立连接:[tcp://127.0.0.1:6379]