รหัสของฉันใน 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 เพื่อดึงข้อมูลจากฐานข้อมูล) ดังนั้นฉันจึงไม่มีค่าว่างนั้น ฉันควรใช้การเปลี่ยนเส้นทาง::to / to /it-IT หรือไม่
2) เปลี่ยน URL และภาษา (แอป: สถานที่) เมื่อเขาบินพร้อมลิงก์ในส่วนบนของทุกหน้า โดยไม่ได้กลับบ้าน
3) เพื่อเชื่อมโยงเพจที่ฉันเรียนรู้การใช้: URL::route('home')
แต่จะทำอย่างไรเมื่อลิงก์เปลี่ยนไปพร้อมกับรายการฐานข้อมูล (เช่น ลิงก์ของฉันคือ {{ URL::to($lingua. '/'. $campo[1].'/') }}
) ฉันต้องใช้ URL::action('ItemController@show', ($lingua. '/'. $campo[1].'/'))
แก้ไข:
ตกลงที่ด้านบนของหน้าของฉันมีลิงก์สำหรับเปลี่ยนภาษาได้ทันที
<a href="/th{{URL::action('LanguageController@select', 'it-IT')}}"> Italian </a> //
<a href="/th{{URL::action('LanguageController@select', 'en-GB')}}"> English </a> //
<a href="/th{{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) ตอนนี้ภาษาของฉันดูเหมือนเป็นภาษาฝรั่งเศส และฉันไม่สามารถเปลี่ยนได้อีกต่อไป