Мой код в laravel для обработки нескольких языков:
$languages = array('it-IT','en-GB','fr-FR');
$lingua = Request::segment(1);
if(in_array($lingua, $languages)){
\App::setLocale($lingua);
}else{
$lingua = 'it-IT';
}
Route::group(array('prefix' => $lingua), function()
{
Route::get('/', array('as' => 'home', 'uses' => 'ItemController@menu'));
Route::get('/{idcampo}','ItemController@show');
});
Как я могу:
1) Сделайте так, чтобы страница всегда начиналась с it-IT по умолчанию. (мне это нужно, потому что я использую $lingua для извлечения из базы данных), поэтому у меня не может быть этого нуля. Должен ли я использовать redirect::to/to/it-IT?
2) измените URL-адрес и язык (приложение: локаль) на лету со ссылкой в верхней части каждой страницы. не возвращаясь домой.
3) для ссылок на страницы я учусь использовать: URL::route('home')
но как это сделать когда ссылка меняется при входе в базу данных (например моя ссылка {{ URL::to($lingua. '/'. $campo[1].'/') }}
) мне нужно использовать URL::action('ItemController@show', ($lingua. '/'. $campo[1].'/'))
РЕДАКТИРОВАТЬ:
ОК, в верхней части моих страниц есть ссылка для смены языка на лету.
<a href="{{URL::action('LanguageController@select', 'it-IT')}}"> Italian </a> //
<a href="{{URL::action('LanguageController@select', 'en-GB')}}"> English </a> //
<a href="{{URL::action('LanguageController@select', 'fr-FR')}}"> French </a>
Я создаю контроллер с именем LanguageController.
<?php
class LanguageController extends BaseController {
public function select($lingua)
{
// Store the current language in the session
Session::put('lingua', $lingua);
return Redirect::back(); // redirect to the same page, nothing changes, just the language
}
}
Я создаю маршрут:
Route::get('lingua/{lingua}', 'LanguageController@select');
Route::get('/', array('as' => 'home', 'uses' => 'ItemController@menu'));
Route::get('/mondo/','ItemController@mondo');
Route::get('/{idcampo}','ItemController@show');
У меня есть свой ItemController@menu
public function menu()
{ $linguadefault='it-IT';
$lingua = Session::get('lingua',$linguadefault);
$data = DB::table('campo')->lists('id');
return View::make('index')->with('campo',$data)->with('lingua',$lingua);
}
1) Я не понимаю, зачем мне нужно маршрутизировать на lingua/{lingua}, если я никогда не маршрутизирую туда, но я использую url: action для контроллера напрямую.
2) теперь мне нужно добавить
$linguadefault='it-IT';
$lingua = Session::get('lingua',$linguadefault);
в начале каждой функции иметь языковую переменную на моей странице, верно?
3) теперь мой язык застрял на французском, и я больше не могу его изменить.