laravel修改驗(yàn)證提示中文

laravel是一款開源的php web應(yīng)用程序框架,具有代碼簡(jiǎn)潔、易于理解和學(xué)習(xí)、充滿創(chuàng)新的特點(diǎn),因此受到越來越多開發(fā)者的歡迎。其中,驗(yàn)證是laravel框架中非常重要的一部分,它幫助開發(fā)者驗(yàn)證和保護(hù)用戶提交的表單數(shù)據(jù)。但是,laravel默認(rèn)的驗(yàn)證提示信息都是英文的,不便于中文站點(diǎn)的使用,接下來,我們就來探討一下如何將laravel框架的驗(yàn)證提示信息修改成中文。

0、引言

在開始正式的修改工作之前,我們需要明確幾個(gè)概念。

第一,Laravel框架默認(rèn)的驗(yàn)證器是IlluminateValidationValidator。

第二,Laravel框架中默認(rèn)使用了Symfony框架的validator組件。

第三,Laravel框架本身提供了多種修改驗(yàn)證提示信息的方法,比如修改驗(yàn)證器中的messages數(shù)組、使用語言包等。

1、修改驗(yàn)證器中的messages數(shù)組

在Laravel框架中,Validator類中有一個(gè)messages數(shù)組,它存儲(chǔ)著所有的驗(yàn)證提示信息,在使用Validator時(shí),我們可以通過修改該數(shù)組的方式來修改驗(yàn)證提示信息。下面是一段示例代碼:

$validator = Validator::make($request->all(), [     'name' => 'required|max:255',     'email' => 'required|email|unique:users,email',     'password' => 'required|confirmed|min:6', ]);  $validator->messages()->add(     'email.unique', '該郵箱已被注冊(cè),請(qǐng)使用其他郵箱。' );

在上述代碼中,我們使用Validator::make方法創(chuàng)建了一個(gè)驗(yàn)證器,并設(shè)置了三個(gè)驗(yàn)證規(guī)則:name必填、長(zhǎng)度不超過255個(gè)字符;email必填、必須為合法的郵箱地址、在users表中唯一;password必填、確認(rèn)密碼、長(zhǎng)度不少于6個(gè)字符。然后,我們通過調(diào)用$validator->messages()->add方法來添加了一個(gè)新的提示信息,指定了當(dāng)email字段的驗(yàn)證規(guī)則unique失敗時(shí),應(yīng)該提示“該郵箱已被注冊(cè),請(qǐng)使用其他郵箱。”這樣,我們就可以靈活地修改驗(yàn)證提示信息了。

需要注意的是,使用這種方法修改的提示信息只會(huì)在創(chuàng)建當(dāng)前驗(yàn)證器時(shí)生效,如果需要對(duì)所有的驗(yàn)證器都生效,則需要在每個(gè)驗(yàn)證器中都添加一遍。

2、使用語言包

除了在Validator中直接修改messages數(shù)組,Laravel還提供了另一種便捷的方法來修改驗(yàn)證提示信息,那就是使用語言包。Laravel框架默認(rèn)提供了多種語言包,包括英文、西班牙語、法語、德語、日語、中文等。我們可以在語言包中找到對(duì)應(yīng)的驗(yàn)證提示信息,并進(jìn)行修改。

在Laravel中使用語言包非常簡(jiǎn)單,只需要在resources/lang目錄下創(chuàng)建對(duì)應(yīng)的語言包文件夾,即可開始修改驗(yàn)證提示信息。例如,如果我們需要將驗(yàn)證提示信息改成中文,則需要在resources/lang目錄下創(chuàng)建zh-CN文件夾,并在該文件夾下創(chuàng)建validation.php文件,然后將修改后的驗(yàn)證提示信息寫入到該文件中即可。示例代碼如下:

<?php // resources/lang/zh-CN/validation.php  return [     'required' => ' :Attribute 為必填項(xiàng)。',     'max' =&gt; [         'numeric' =&gt; ' :attribute 不能大于 :max。',         'file' =&gt; ' :attribute 不能大于 :max kb。',         'string' =&gt; ' :attribute 不能超過 :max 個(gè)字符。',         'array' =&gt; ' :attribute 不能超過 :max 個(gè)項(xiàng)。',     ],     'email' =&gt; ' :attribute 必須為合法的郵箱地址。',     'unique' =&gt; ' :attribute 已存在,請(qǐng)使用其他 :attribute。',     'confirmed' =&gt; '兩次輸入的 :attribute 不一致。', ];

在上述代碼中,我們定義了required、max等多個(gè)驗(yàn)證規(guī)則的提示信息。這些信息會(huì)在Laravel框架中用于驗(yàn)證用戶提交的表單數(shù)據(jù),并在驗(yàn)證失敗時(shí)進(jìn)行提示。這種方法比較適合在全站范圍內(nèi)修改驗(yàn)證提示信息,不用在每個(gè)Validator對(duì)象中都添加一次。

3、Symfony驗(yàn)證組件的翻譯

除了上述兩種方法外,Symfony驗(yàn)證組件也提供了內(nèi)置翻譯的功能,我們可以使用這個(gè)功能將Laravel框架中的驗(yàn)證提示信息翻譯成中文。

要使用Symfony驗(yàn)證組件的翻譯功能,我們首先需要安裝symfony/translation組件,方法如下:

composer require symfony/translation

然后,我們需要在Laravel框架中設(shè)置翻譯器,在AppServiceProvider類的boot方法中添加以下代碼:

use IlluminateSupportFacadesLang;  class AppServiceProvider extends ServiceProvider {     public function boot()     {         $this-&gt;app-&gt;singleton('translator', function($app){             $loader = new SymfonyComponentTranslationLoaderArrayLoader;             $translator = new SymfonyComponentTranslationTranslator('zh');             $translator-&gt;addLoader('array', $loader);             $translator-&gt;addResource('array', require __DIR__ . '/../vendor/symfony/validator/Resources/translations/validators.zh.xlf', 'zh');             $loader-&gt;load($this-&gt;getTranslatorMessages());              return new IlluminateTranslationTranslator($translator);         });     }      public function getTranslatorMessages()     {         $messages = [             'required' =&gt; ':attribute 為必填項(xiàng)。',             'max' =&gt; [                 'numeric' =&gt; ':attribute 不能大于 :max。',             ],             'email' =&gt; ':attribute 必須為合法的郵箱地址。',             'unique' =&gt; ':attribute 已存在,請(qǐng)使用其他 :attribute。',             'confirmed' =&gt; '兩次輸入的 :attribute 不一致。',         ];          return $messages;     } }

在上述代碼中,我們?cè)贏ppServiceProvider中使用了Symfony驗(yàn)證組件提供的翻譯功能。其中,我們?cè)O(shè)置了翻譯器的語言為中文,并加載了Symfony驗(yàn)證組件自帶的翻譯文件validators.zh.xlf。在getTranslatorMessages方法中,我們定義了需要翻譯的驗(yàn)證提示信息。這樣,當(dāng)Laravel框架驗(yàn)證表單數(shù)據(jù)時(shí),Symfony翻譯組件就會(huì)自動(dòng)將英文的驗(yàn)證提示信息翻譯成中文。

需要注意的是,這種方法比較麻煩,需要安裝新的組件,并修改Laravel框架的ServiceProvider類。

4、總結(jié)

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享