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' => [ 'numeric' => ' :attribute 不能大于 :max。', 'file' => ' :attribute 不能大于 :max kb。', 'string' => ' :attribute 不能超過 :max 個(gè)字符。', 'array' => ' :attribute 不能超過 :max 個(gè)項(xiàng)。', ], 'email' => ' :attribute 必須為合法的郵箱地址。', 'unique' => ' :attribute 已存在,請(qǐng)使用其他 :attribute。', 'confirmed' => '兩次輸入的 :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->app->singleton('translator', function($app){ $loader = new SymfonyComponentTranslationLoaderArrayLoader; $translator = new SymfonyComponentTranslationTranslator('zh'); $translator->addLoader('array', $loader); $translator->addResource('array', require __DIR__ . '/../vendor/symfony/validator/Resources/translations/validators.zh.xlf', 'zh'); $loader->load($this->getTranslatorMessages()); return new IlluminateTranslationTranslator($translator); }); } public function getTranslatorMessages() { $messages = [ 'required' => ':attribute 為必填項(xiàng)。', 'max' => [ 'numeric' => ':attribute 不能大于 :max。', ], 'email' => ':attribute 必須為合法的郵箱地址。', 'unique' => ':attribute 已存在,請(qǐng)使用其他 :attribute。', 'confirmed' => '兩次輸入的 :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é)