我在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为默认值。 (我需要它,因为我使用$ lingua从数据库中获取)所以我不能有那个null。我应该使用重定向:: to / to / it-IT吗?
2)在他飞行时更改网址和语言(app:locale),每个页面的上半部分都有一个链接。没有回到家里。
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>
我创建了一个控制器clled 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)现在我的语言似乎被法语所困扰,我再也无法改变它了。
答案 0 :(得分:2)
我不会一直使用URL中的语言,您只需在需要时切换语言并保留它:
1)使用Session来保留所选语言:
// Set the default language to the current user language
// If user is not logged, defaults to Italian
$linguaDefault = Auth::check()
? Auth::user()->lingua
: 'it-IT';
/// If not stored in Session, current language will be the default one
\App::setLocale(Session::get('lingua', $linguaDefault));
要始终在您的应用中设置语言,您可以将此代码放入您的文件中
app/start/global.php
而且你不需要在其他任何地方添加它。所以它将按此顺序使用它:
a) Language stored in Session (selected online)
b) Language user has in database
c) Italian
2)要更改语言,请创建路线:
Route::get('lingua/{lang}', 'LanguageController@select');
您的链接
URL::action('LanguageController@select', 'it-IT')
URL::action('LanguageController@select', 'en-GB')
URL::action('LanguageController@select', 'fr-FR');
在您的控制器中,您只需要这样做:
public function select($lang)
{
// Store the current language in the session
Session::put('lingua', $lang);
return Redirect::back(); // redirect to the same page, nothing changes, just the language
}
3)这样您就不需要在所有网址中使用自己的语言,也不必在所有路由中处理它。如果您的用户更改了数据库中的语言,您只需:
$user->save();
Session::put('lingua', $user->lingua);
return Redirect::route('home'); // or anything else