我正在尝试创建一个语言切换器,以便您可以轻松地动态更改语言(无需重定向到主页)。
我似乎无法实现的是从不同语言环境中的路由名称获取网址。
想象一下你的mydomain.com/events(或mydomain.com/en/events,因为它们是相同的),我想用法语获取网址(mydomain.com/fr/evenements)......
在我的routes.php中,我有:
$locale = Request::segment(1);
if ( !array_key_exists($locale, Config::get('translatable.languages'))) {
$locale = null;
App::setlocale(Config::get('translatable.fallback_locale'));
}else{
App::setLocale($locale);
}
Route::group(array('prefix' => $locale), function(){
Route::get(Lang::get('routes.events'), array('as' => 'events.index', 'uses' => 'EventController@index'));
});
我试过了
route($route_name)
帮助程序函数之前设置应用程序区域设置使用请求的区域设置(在此示例中为“fr”)设置会话变量,然后调用route($route_name)
函数。为此,我还在routes.php的顶部添加了:
if(Session :: has('requested_locale')){ $ locale = Session :: pull('requested_locale'); }
我不知道如何处理这个...... 我知道有一个包Laravel Localization可以做到这一点,但我需要它没有那个包(如果可能的话)......
答案 0 :(得分:2)
我在Laravel 5.1上的解决方案是......
在config / app.php中定义了区域设置,以使用语言文件
创建路由 'locale' => 'en',
'locales' => [
'en'=>'English',
'fr'=>'Français'
],
我在resources / lang /目录中定义了我的路由(在我的例子中是'en / routes.php'和'fr / routes.php')
return [
'about' => 'a-propos',
];
使用语言键定义路线,例如:
Route::get(trans('routes.about'), ['as' => 'about', function () {
return view('pages.'.App::getLocale().'.about');
}]);
然后我创建了仅用于切换到另一个区域设置的虚拟路线,仅在当前路线与请求匹配后
`
Route::matched(function($route) {
$route = Route::current();
$route_name = $route->getName();
$route_uri = $route->uri();
$locales = Config::get('app.locales');
foreach ($locales as $locale_code => $locale_name) {
if ($locale_code == App::getLocale()) {
continue;
}
if (Lang::has('routes.'.$route_name, $locale_code)) {
$route_uri = $locale_code . '/' . Lang::get('routes.'.$route_name, [], $locale_code);
}
else {
$route_uri = $locale_code . '/' . substr($route_uri, 3);
}
Route::get($route_uri, ['as' => 'change_locale_to_'.$locale_code, function(){
}]);
}
});
`
<a href="{{ route('change_locale_to_'.$locale_toggle->code, Route::current()->parameters()) }}" class="dropdown-toggle">