Per effettuare la validazione dei dati provenienti da un form utilizziamo il metodo Validator::make() di Laravel. Nel caso l’input non passi la validazione sarà generato un messaggio di errore in inglese.

Per tradurre o modificare un messaggio di errore sono possibili due metodi:

Possiamo inserire il messaggio modificato direttamente come argomento di validator::make(). In questo modo la modifica avrà effetto solo per la singola validazione
Possiamo tradurre tutti i messaggi di errore che sono localizzati in un file apposito. Le traduzioni saranno applicate in modo globale tutte le volte effettuiamo una validazione

Personalizzare un singolo messaggio di errore.

Vediamo un semplice caso in cui vogliamo validare un campo di testo e un file proveniente da un form.
Il codice seguente può essere inserito all’interno di un controller o meglio all’interno di un metodo del model.

$validator = Validator::make( $data, $regole, $messaggi ) ;

I parametri accettati dal metodo sono tre. $data, $regole, $messaggi.

$data: Recuperiamo gli input dal form

$data = array(
     'titolo_annuncio' => Input::get( 'titolo_annuncio' ),
            'immagine' => Input::file( 'immagine'),
);

$regole: Stabiliamo le regole di validazione

Decidiamo che entrambi i campi sono obbligatori (required). Il titolo deve contenere un numero di caratteri compreso da 10 e 60 caratteri. Il file caricato deve essere per forza un’immagine.

Le regole seguenti non sono da considerare complete, le scriviamo solo per dimostrare come effettuare la localizzazione dei messaggi di errore.

$regole = array(
     'titolo_annuncio' => array( 'required', digits_between:10,60 )
            'immagine' => array( 'required', 'image')
);

$messaggi: Traduciamo i messaggi di errore

Nei messaggi di errore utilizziamo il tag segnaposto :attribute che sarà sostituito con il nome il campo corrente. Altri tag sono :min e :max che saranno sostituiti con i valori minimo e massimo impostati da noi.

$messaggi = array(
      'required' => 'il campo :attribute è obbligatorio',
'digits_between' => 'Il :attribute deve essere compreso tra :min e :max caratteri',
         'image' => 'Puoi inviare solo immagini'
);

Invio degli errori alla view

if ($validator->fails())
{
   return Redirect::to( 'nomeview' )->withErrors( $validator );
}

Visualizzazione degli errori

Nella view utilizziamo il metodo $errors->first per visualizzare il primo messaggio di errore generato.

{{ $errors->first('titolo_annuncio', '<span class="errore">:message</span>') }}
{{ $errors->first('immagine', '<span class="errore">:message</span>') }}

Localizzazione Laravel

Negli esempi precedenti abbiamo visto come tradurre singoli messaggi di errore che vengono generati durante la validazione degli input. È possibile localizzare Laravel in modo globale traducendo il file che contiene tutti i messaggi.

Il file che ci interessa è validation.php e si trova all’interno della cartella app/lang/en

localizzazione-laravel

È necessario creare una nuova cartella /it allo stesso livello di/en. La cartella it contiene una versione di validation.php tradotta utilizzando una serie di tag segnaposto, come :attribute, :min e :max che abbiamo visto prima. Ecco un elenco completo

  • :attribute
  • :min
  • :max
  • :date
  • :format
  • :other
  • :digits
  • :values
  • :size

Il file validation.php

Riportiamo un esempio di file validation.php tradotto.

return array(

	/*
	|--------------------------------------------------------------------------
	| Validation Language Lines
	|--------------------------------------------------------------------------
	|
	| The following language lines contain the default error messages used by
	| the validator class. Some of these rules have multiple versions such
	| as the size rules. Feel free to tweak each of these messages here.
	|
	*/

	"accepted"             => "Devi accettare :attribute.",
	"active_url"           => ":attribute non è un URL valido.",
	"after"                => ":attribute deve contenere una data successiva a :date.",
	"alpha"                => ":attribute può contenere solo lettere.",
	"alpha_dash"           => ":attribute può contenere solo lettere, numeri, e trattini.",
	"alpha_num"            => ":attribute può contenere solo numeri e lettere.",
	"array"                => ":attribute deve essere un array.",
	"before"               => ":attribute deve essere una data precedente a :date.",
	"between"              => array(
		"numeric" => ":attribute deve essere un numero compreso tra :min e :max.",
		"file"    => "Il file :attribute deve essre tra :min e :max kilobytes.",
		"string"  => ":attribute deve essere compreso tra :min e :max caratteri.",
		"array"   => ":attribute può contenere un numero di oggetti compreso tra :min e :max.",
	),
	"confirmed"            => "Il campo :attribute di conferma non corrisponde.",
	"date"                 => "Il campo :attribute non contiene una data valida.",
	"date_format"          => "Il campo :attribute non rispetta il formato :format.",
	"different"            => "I campi :attribute e :other non possono coincidere.",
	"digits"               => "Il campo :attribute deve essere composto da :digits cifre.",
	"digits_between"       => "Il campo :attribute deve contenere un numero compreso tra :min e :max cifre.",
	"email"                => "Il campo :attribute deve contenere un'email valida.",
	"exists"               => ":attribute non è un campo valido.",
	"image"                => "il file :attribute deve essere un'immagine .",
	"in"                   => ":attribute non è valido.",
	"integer"              => "Il campo :attribute deve contenere un numero intero.",
	"ip"                   => "Il campo :attribute deve contenere un indirizzo IP valido.",
	"max"                  => array(
		"numeric" => "Il campo :attribute non può avere un numero maggiore di :max.",
		"file"    => "Il file :attribute non può superare i :max kilobytes.",
		"string"  => "Il campo :attribute non può superare i :max caratteri.",
		"array"   => "Il campo :attribute non può avere più di :max oggetti.",
	),
	"mimes"                => "Il file :attribute deve essere del tipo: :values.",
	"min"                  => array(
		"numeric" => "Il campo :attribute deve essere maggiore o uguale a :min.",
		"file"    => "Il file :attribute deve essere almeno di :min kilobytes.",
		"string"  => "Il campo :attribute deve essere di almeno :min caratteri.",
		"array"   => "Il campo :attribute deve possedere almeno :min oggetti.",
	),
	"not_in"               => ":attribute non è valido.",
	"numeric"              => ":attribute deve contenere un numero.",
	"regex"                => ":attribute è invalido.",
	"required"             => "Il campo :attribute è obbligatorio.",
	"required_if"          => ":attribute è richiesto quando :other e uguale a :value.",
	"required_with"        => ":attribute è richiesto quando :values è presente.",
	"required_with_all"    => ":attribute e richiesto quando tutti :values sono presenti.",
	"required_without"     => ":attribute è richiesto quando :values non è presente.",
	"required_without_all" => ":attribute è richiesto quando nessundo di :values è presente.",
	"same"                 => "I campi :attribute e :other devono coincidere.",
	"size"                 => array(
		"numeric" => ":attribute deve corrispondere a :size.",
		"file"    => ":attribute deve essere un file di :size kilobytes.",
		"string"  => ":attribute deve contenere :size caratteri.",
		"array"   => ":attribute deve contenere :size oggetti.",
	),
	"unique"               => ":attribute è già stato usato.",
	"url"                  => ":attribute non è formattato correttamente.",

	/*
	|--------------------------------------------------------------------------
	| Custom Validation Language Lines
	|--------------------------------------------------------------------------
	|
	| Here you may specify custom validation messages for attributes using the
	| convention "attribute.rule" to name the lines. This makes it quick to
	| specify a specific custom language line for a given attribute rule.
	|
	*/

	'custom' => array(
		'attribute-name' => array(
			'rule-name' => 'custom-message',
		),
	),

	/*
	|--------------------------------------------------------------------------
	| Custom Validation Attributes
	|--------------------------------------------------------------------------
	|
	| The following language lines are used to swap attribute place-holders
	| with something more reader friendly such as E-Mail Address instead
	| of "email". This simply helps us make messages a little cleaner.
	|
	*/

	'attributes' => array(),

);

Rendere effettive le modifiche

Una volta che abbiamo terminato la traduzione dei messaggi, dobbiamo fare in modo che Laravel utilizzi la lingua corretta.
Aprimamo il file app/config/app.php
app-config-set-locale

e cambiamo il valore di ‘locale’ a it.

	'locale' => 'it',

Il valore di ‘fallback_locale’ indica invece che lingua utilizzare quando non viene trovata la traduzione per un messaggio.

	'fallback_locale' => 'en',

  inStileWeb.com
blog comments powered by Disqus