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

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

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

Lang类专门用于输出正确的语言,正如您所说,它在内部管理语言

通过API查看,没有任何方法可以直接帮助您实现这一点,解析URI以获取语言似乎是合适的做法

您总是可以这样做来检索URI中的语言字符串:

$language = URI::segment(1);

我已经找到了解决语言问题的方法(感谢IRC上的nickstr和这个问题的公认答案)。它涉及将当前语言存储为会话变量,该变量在语言uri段更改时更新

Route::filter('before',function())
{
//在您的应用程序的每个请求之前做一些事情。。。
//默认语言($lang)和当前uri语言($lang\u uri)
$lang='he';
$lang_uri=uri::段(1);
//如果未设置任何会话语言,请设置默认会话语言
如果(!Session::has('language'))
{
会话::put('language',$lang);
}
//如果需要,路由语言路径
如果($lang_uri!='en'&&$lang_uri!='he')
{
返回Redirect::to($lang.'/'.URI::current());
}
//将会话语言设置为uri
elseif($lang_uri!==Session::get('language'))
{
会话::put('language',$lang_uri);
}
});

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

这是一个快速的黑客,但它在我的应用程序上工作。请注意,现在也设置了应用程序语言。请随意使用或改进它

Route::filter('before',function())
{
//当前uri语言($lang\u uri)
$lang_uri=uri::段(1);
//如果未设置任何会话语言,请设置默认会话语言
如果(!Session::has('language'))
{
//在uri中使用lang(如果提供)
if(在数组中($lang\u uri,Config::get('application.languages'))
{
$lang=$lang_uri;
}
//检测浏览器语言
elseif(isset(请求::服务器('http_接受_语言'))
{
$headerlang=substr(请求::服务器('http_接受_语言'),0,2);
if(在数组中($headerlang,Config::get('application.languages'))
{
//支持浏览器语言,请使用它
$lang=$headerlang;
}
//使用默认应用程序语言
其他的
{
$lang=Config::get('application.language');
}
}
//uri和浏览器中都没有lang。请使用默认值
其他的
{
//使用默认应用程序语言
$lang=Config::get('application.language');
}
//为该用户设置应用程序语言
会话::put('language',$lang);
Config::set('application.language',$lang);
}
//会议可用
其他的
{
//将应用程序设置为会话语言
Config::set('application.language',Session::get('language');
}
//缺少前缀?请添加它
if(!in_数组($lang_uri,Config::get('application.languages'))
{
返回Redirect::to(URI::current());
}
//存在有效前缀,但不是正确的lang?更改应用程序lang
elseif(在数组中($lang\u uri,Config::get('application.languages'))和$lang\u uri!=Config::get('application.language'))
{
会话::put('language',$lang_uri);
Config::set('application.language',$lang_uri);
}
});
这可能会有所帮助。 Config::get('application.language')

您可以使用

https://github.com/mcamara/laravel-localization
Laravel本地化使用为请求提供的URL。为了达到这个目的,应该在routes.php文件中添加一个组。它将过滤所有必须本地化的页面

    // app/routes.php

    Route::group(array('prefix' => LaravelLocalization::setLanguage()), function()
    {
        /** ADD ALL LOCALIZED ROUTES INSIDE THIS GROUP **/
        Route::get('/', function()
        {
            return View::make('hello');
        });

        Route::get('test',function(){
            return View::make('test');
        });
    });

    /** OTHER PAGES THAT SHOULD NOT BE LOCALIZED **/
将此组添加到routes文件后,用户可以访问添加到“LanguageSallown”中的所有语言(默认为“en”和“es”,请查看配置部分以更改该选项)。例如,用户现在可以使用以下地址访问两种不同的语言:


在较新的Laravel版本中,您可以通过以下方式获得当前语言:

Config::get('app.locale');

了解您网站在Laravel中的当前语言的最干净的方法似乎是:

Lang::locale();

它与此命令不同,该命令将返回网站的默认语言:

Config::get('app.locale');
我使用
App::getLocale()
,这可能是最受支持的方法,因为在中使用了
App::setLocale('EN')
方法

你可以在任何地方使用这种方法。如果它在某个地方出错,您可以使用
\App::…
使其正常工作


我使用的是Laravel 5.0。

另一种短一点的方法是使用如下内容:

app()->getLocale()
这样做的好处是,诸如PHPStorm之类的IDE可以识别此功能,并可以帮助您更快地开发。

这样做很好

lang="{{ app()->getLocale() }}"

您可以通过以下方式获得laravel blade中的当前语言:

{{Lang::locale()}}


不错,不过为了保持语法的灵活性(在这里拼字),请使用
Request::server('http\u accept\u language')
而不是直接访问$\u服务器