mengubah url, dan lokal dengan cepat dengan laravel

Kode saya di laravel untuk menangani banyak bahasa adalah:

$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');
});

Bagaimana bisa saya:

1) Jadikan halaman selalu dimulai dengan itu-IT sebagai default. (saya memerlukannya karena saya menggunakan $lingua untuk mengambil dari database) jadi saya tidak dapat memiliki null itu. Haruskah saya menggunakan pengalihan::ke/ke/it-IT?

2) ubah url dan bahasa (aplikasi: lokal) dengan cepat dengan tautan di bagian atas setiap halaman. tanpa kembali ke rumah.

3) untuk menautkan halaman saya belajar menggunakan: URL::route('home') tetapi bagaimana melakukannya ketika tautan berubah dengan masuknya database (misalnya tautan saya adalah {{ URL::to($lingua. '/'. $campo[1].'/') }}) saya perlu menggunakan URL::action('ItemController@show', ($lingua. '/'. $campo[1].'/'))

Sunting:

Oke di bagian atas halaman saya ada link untuk mengubah bahasa dengan cepat.

<a href="/id{{URL::action('LanguageController@select', 'it-IT')}}"> Italian </a> //
<a href="/id{{URL::action('LanguageController@select', 'en-GB')}}"> English </a> // 
<a href="/id{{URL::action('LanguageController@select', 'fr-FR')}}"> French </a>

Saya membuat pengontrol bernama 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                           

    }
}

Saya membuat rute:

  Route::get('lingua/{lingua}', 'LanguageController@select');
    Route::get('/', array('as' => 'home', 'uses' => 'ItemController@menu'));
    Route::get('/mondo/','ItemController@mondo');
    Route::get('/{idcampo}','ItemController@show');

Saya memiliki ItemController@menu saya

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) Saya tidak mengerti mengapa saya perlu merutekan di lingua/{lingua} jika saya tidak pernah merutekan ke sana tetapi saya menggunakan url:action ke pengontrol secara langsung.

2) sekarang saya perlu menambahkan

$linguadefault='it-IT';
        $lingua = Session::get('lingua',$linguadefault);

di awal setiap fungsi memiliki variabel lingua di halaman saya kan?

3) sekarang bahasa saya sepertinya terjebak ke bahasa Prancis dan saya tidak bisa mengubahnya lagi.


person user3384514    schedule 20.03.2014    source sumber


Jawaban (1)


Saya tidak akan menggunakan bahasa di URL sepanjang waktu, Anda cukup mengganti bahasa saat Anda memerlukannya dan mempertahankannya:

1) Gunakan Sesi untuk mempertahankan bahasa yang dipilih:

// 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));

Agar bahasa selalu disetel di aplikasi Anda, Anda dapat memasukkan kode ini ke dalam file Anda

app/start/global.php

Dan Anda tidak perlu menambahkan ini di tempat lain. Jadi ia akan menggunakannya dalam urutan ini:

a) Language stored in Session (selected online)
b) Language user has in database
c) Italian

2) Untuk mengubah bahasa yang Anda buat rutenya:

Route::get('lingua/{lang}', 'LanguageController@select');

Tautan Anda

URL::action('LanguageController@select', 'it-IT')
URL::action('LanguageController@select', 'en-GB')
URL::action('LanguageController@select', 'fr-FR');

Dan di pengontrol Anda, Anda hanya perlu melakukan:

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) Dengan cara ini Anda tidak memerlukan bahasa Anda di semua URL Anda, Anda tidak harus menghadapinya di semua rute Anda. Jika pengguna Anda mengubah bahasa di database, Anda cukup:

$user->save();
Session::put('lingua', $user->lingua);
return Redirect::route('home'); // or anything else
person Antonio Carlos Ribeiro    schedule 21.03.2014
comment
Terima kasih banyak atas jawaban Anda, tetapi situs web saya tidak memiliki pengguna, maksud saya, hanya perlu mengambil deskripsi dari database sesuai dengan bahasa saat ini. Saya berpikir untuk memasukkan bahasa ke dalam url karena saya melihat banyak situs web memiliki url/nl atau url/en atau url/it di halaman webnya - person user3384514; 21.03.2014
comment
Ya, tapi saya suka url saya bersih... Dan Anda tidak memerlukannya di sana agar bahasa berfungsi dengan baik, cobalah. - person Antonio Carlos Ribeiro; 21.03.2014
comment
Saya mencoba menggunakan ini, tetapi saya sedikit bingung pada sesinya. Maksudku, bahasaku tidak berubah sekarang - person user3384514; 21.03.2014
comment
Bisakah Anda menempelkan kode Anda sehingga saya dapat mencoba membantu Anda? - person Antonio Carlos Ribeiro; 21.03.2014
comment
Tampaknya itu terjebak dalam bahasa Prancis - person user3384514; 21.03.2014
comment
tautannya berfungsi: ketika saya melihat sumber localhost/Project/public/lingua/it-IT Saya tidak boleh memasukkan sesuatu seperti App:setLocale? tempat untuk mengubah lokal - person user3384514; 21.03.2014
comment
Tentang 2 Anda), masukkan kode di app/start/global.php Anda. - person Antonio Carlos Ribeiro; 21.03.2014
comment
Ya saya memeriksa dengan dd($lingua) dan bahasa berubah, mungkin saya hanya perlu menambahkan App:setLocale($lingua) suatu tempat untuk mengubah lokal - person user3384514; 21.03.2014
comment
Sekitar 1), rute lingua/{lingua} hanya untuk pengguna Anda memilih bahasa, tidak melakukan hal lain. - person Antonio Carlos Ribeiro; 21.03.2014
comment
Menempatkan 2 baris itu di app/start/global.php Anda akan membuatnya berfungsi setiap saat. Selain itu, untuk melakukan debug, Anda dapat melakukan ini: laravel.io/bin/4l6L - person Antonio Carlos Ribeiro; 21.03.2014
comment
Terima kasih banyak! sekarang saya tidak perlu tergila-gila dengan bahasa di url dan solusi Anda lebih bersih, saya harus mengakuinya. BTW, memasukkan sesuatu ke dalam app/start/global.php saya memiliki variabel $lingua yang selalu tersedia di mana-mana? - person user3384514; 21.03.2014
comment
Sepertinya untuk menggunakan variabel $lingua di halaman saya perlu memasukkan $linguadefault='it-IT'; $lingua = Sesi::mendapatkan('lingua',$linguadefault); di awal setiap fungsi pengontrol apakah tidak apa-apa kan? - person user3384514; 21.03.2014
comment
Menambahkan dua baris lagi di sini, untuk menunjukkan cara menerapkan bahasa ini di mana saja: laravel.io/bin/9K6W - person Antonio Carlos Ribeiro; 21.03.2014
comment
Anda tidak memerlukan default lagi di pengontrol Anda, itu sudah disetel di global.php Anda. - person Antonio Carlos Ribeiro; 21.03.2014
comment
Mengapa Anda memerlukan ini di pengontrol Anda? Apa yang sedang Anda coba lakukan? - person Antonio Carlos Ribeiro; 21.03.2014
comment
Saya perlu menggunakan bahasa $lingua dalam kueri untuk mengambil deskripsi item yang benar. - person user3384514; 21.03.2014