2016-06-02 4 views
1

Nehmen wir an, ich diese Regeln in meinem Modell haben:Laravel Lokalisierung der Gültigkeitsregel ‚vor‘ und ‚nach‘ mit dem Parameter wie "heute/morgen

public $rules = [   
     'a_date' => 'after:today', 
     'b_date' => 'before:today', 
    ]; 

Und ich habe diese Zeichenfolge in meinem project\resources\lang\en\validation.php:

'after' => 'The :attribute must be a date after :date.', 
    'before' => 'The :attribute must be a date before :date.', 

ich sie in eine Sprache übersetzen in project\resources\lang\some-language\validation.php

'after' => ':attribute *somelanguage* :date.', 
    'before' => ':attribute *somelanguage* :date.', 

Aber w Henne schlug ich Validierungsfehler in meiner app ich String so sehen: *field* *some language* today
(zum Beispiel in Russisch: Поле a_date должно быть раньше чем today)

Die Frage ist also: Wie und wo diese today zu ersetzen (und alle anderen predifined Worte wie das) zur gewünschten Lokalisierung?

PS: Ich konnte eine benutzerdefinierte Validierung verwenden, wie in docs angegeben https://laravel.com/docs/5.2/validation#localization
aber nur aplied auf bestimmte Felder und ich wünsche es today zu ersetzen, wenn ich es in einem der Felder verwenden.

Antwort

0

Erstellen Sie ein Array in der lang-Datei (in meinem Fall war es title.php):

'time_periods' => [ 
     'yesterday' => 'вчера', 
     'now'  => 'сейчас', 
     'today'  => 'сегодня', 
     'tomorrow' => 'завтра', 
    ], 

und fügen Sie dann den folgenden Code in CustomValidator Klasse:
All dieser Code tut, ist Parameter in bestimmte Regeln zu ersetzen mit Werten aus Ihrem lang-Datei-Array mit Schlüsseln dieses Arrays. Zuerst wird der englische Ersetzer in einen lokalisierten geändert und dann verwendet, um den tatsächlichen Platzhalter (:date) in der Validierungsnachricht zu ersetzen.

class CustomValidator extends Validator { 
     public function replaceBefore($message, $attribute, $rule, $parameters) {     
      $parameter_translated = str_replace(
       array_keys(trans('title.time_periods')), 
       array_values(trans('title.time_periods')), 
       $parameters[0] 
      ); 
      return str_replace(':date', $parameter_translated, $message); 
     } 

     // this method does the same but for 'after' rule 
     public function replaceAfter($message, $attribute, $rule, $parameters) { 
      $parameter_translated = str_replace(array_keys(trans('title.time_periods')), array_values(trans('title.time_periods')), $parameters[0]); 
      return str_replace(':date', $parameter_translated, $message); 
     } 
    } 

Wenn Sie CustomValidator dann verwenden Sie diesen Ansatz haben, nicht gefällt (von the documentation genommen, siehe: Teil ‚der Fehlermeldung definieren‘):

Wenn Sie eine benutzerdefinierte Validierungsregel erstellen Manchmal müssen Sie möglicherweise benutzerdefinierte Ersatzplatzhalter für Fehlermeldungen definieren. Sie können tun, indem Sie einen benutzerdefinierten Validator erstellen, wie oben beschrieben, und dann einen Aufruf an die replacer-Methode auf der Validator-Fassade vornehmen. Sie können diese innerhalb des Boot-Methode eines Dienstleisters tun:

/** 
* Bootstrap any application services. 
* 
* @return void 
*/ 
public function boot() 
{ 
    Validator::extend(...); 

    Validator::replacer('foo', function($message, $attribute, $rule, $parameters) { 
     return str_replace(...); 
    }); 
} 
Verwandte Themen