cakephp 國(guó)際化
像許多其他框架一樣,cakephp 也支持國(guó)際化。我們需要按照這些步驟從單一語(yǔ)言到多語(yǔ)言。
步驟 1
創(chuàng)建一個(gè)單獨(dú)的語(yǔ)言環(huán)境目錄資源\ 語(yǔ)言環(huán)境。
步驟 2
在目錄 src\locale 下為每種語(yǔ)言創(chuàng)建子目錄。子目錄的名稱可以是語(yǔ)言的兩個(gè)字母 iso 代碼或完整的語(yǔ)言環(huán)境名稱,如 en_us、fr_fr 等。
步驟 3
在每個(gè)語(yǔ)言子目錄下創(chuàng)建單獨(dú)的 default.po 文件。該文件包含 msgid和 msgstr形式的條目,如下程序所示。
msgid "msg" msgstr "cakephp internationalization example."
這里, msgid 是將在視圖模板文件中使用的鍵, msgstr 是存儲(chǔ)翻譯的值。
步驟 4
在查看模板文件,我們可以使用上面的 msgid,如下圖,會(huì)根據(jù)locale的設(shè)置值進(jìn)行翻譯。
echo __('msg');
可以通過(guò)以下行在 config/app.php 文件中設(shè)置默認(rèn)語(yǔ)言環(huán)境。
'defaultlocale' => env('app_default_locale', 'en_us')
要在運(yùn)行時(shí)更改本地,我們可以使用以下幾行。
use cake\i18n\i18n; i18n::locale('de_de');
示例
在 config/routes.php 文件中進(jìn)行更改,如以下程序所示。
config/routes.php
use cake\http\middleware\csrfprotectionmiddleware; use cake\routing\route\dashedroute; use cake\routing\routebuilder; $routes--->setrouteclass(dashedroute::class); $routes->scope('/', function (routebuilder $builder) { $builder->registermiddleware('csrf', new csrfprotectionmiddleware([ 'httponly' => true, ])); $builder->applymiddleware('csrf'); //$builder->connect('/pages', ['controller'=>'pages','action'=>'display', 'home']); $builder->connect('locale', ['controller'=>'localizations','action'=>'index']); $builder->fallbacks(); });
在 src/controller/localizationscontroller.php 中創(chuàng)建一個(gè) localizationscontroller.php 文件。 將以下代碼復(fù)制到控制器文件中。
src/controller/localizationscontroller.php
namespace app\controller; use app\controller\appcontroller; use cake\i18n\i18n; class localizationscontroller extends appcontroller { public function index() { if($this--->request->is('post')) { $locale = $this->request->getdata('locale'); i18n::setlocale($locale); } } } ?>
在資源\ locales 中創(chuàng)建一個(gè) locales 目錄。在 locales 目錄下創(chuàng)建 3 個(gè)名為 en_us, fr_fr, de_de 的目錄。在每個(gè)目錄下創(chuàng)建一個(gè)名為 default.po 的文件。 將以下代碼復(fù)制到相應(yīng)文件中。
resources/locales/en_us/default.po
msgid "msg" msgstr "cakephp internationalization example."
resources/locales/fr_fr/default.po
msgid "msg" msgstr "exemple cakephp internationalisation."
resources/locales/de_de/default.po
msgid "msg" msgstr "cakephp internationalisierung beispiel."
在 src/template 中創(chuàng)建一個(gè) localizations 目錄,然后在該目錄下創(chuàng)建一個(gè)名為 index.php 的 view 文件。 在該文件中復(fù)制以下代碼。
src/template/localizations/index.php
echo $this--->form->create(null,array('url'=>'/locale')); echo $this->form->radio("locale", [ ['value'=>'en_us','text'=>'english'], ['value'=>'de_de','text'=>'german'], ['value'=>'fr_fr','text'=>'french'], ] ); echo $this->form->button('change language'); echo $this->form->end(); ?> echo __('msg');
通過(guò)訪問(wèn)以下 url 執(zhí)行上述示例。 http://localhost/cakephp4/locale
輸出
執(zhí)行后,您將收到以下輸出。

電子郵件
cakephp 提供電子郵件類來(lái)管理電子郵件相關(guān)功能。要在任何控制器中使用電子郵件功能,我們首先需要通過(guò)編寫以下行來(lái)加載電子郵件類。
use cake\mailer\email;
email 類提供了各種有用的方法,如下所述。
語(yǔ)法 |
from(string|array|null $email null, string|null $name null ) |
參數(shù) | |
返回 |
數(shù)組|$this |
描述 |
它指定來(lái)自哪個(gè)電子郵件地址;電子郵件將被發(fā)送 |
語(yǔ)法 |
to(string|array|null $emailnull, string|null $namenull) |
參數(shù) | |
返回 |
數(shù)組|$this |
描述 |
它指定電子郵件將發(fā)送給誰(shuí) |
語(yǔ)法 |
發(fā)送(string|array|null $contentnull) |
參數(shù) | |
退貨 | 數(shù)組 |
描述 |
使用指定的內(nèi)容、模板和布局發(fā)送電子郵件 |
語(yǔ)法 |
subject(string|null $subjectnull) |
參數(shù) | |
返回 |
數(shù)組|$this |
說(shuō)明 |
獲取/設(shè)置主題 |
語(yǔ)法 |
attachments(string|array|null $attachmentsnull) |
參數(shù) | |
退貨 |
數(shù)組|$this |
說(shuō)明 |
在電子郵件中添加附件 |
語(yǔ)法 |
bcc(string|array|null $emailnull, string|null $namenull) |
參數(shù) | |
退貨 |
數(shù)組|$this |
說(shuō)明 |
密件抄送 |
語(yǔ)法 |
cc( string|array|null $emailnull , string|null $namenull ) |
參數(shù) | |
退貨 |
數(shù)組|$this |
說(shuō)明 |
抄送 |
示例
在 config/routes.php 文件中進(jìn)行更改,如以下程序所示。
config/routes.php
use cake\http\middleware\csrfprotectionmiddleware; use cake\routing\route\dashedroute; use cake\routing\routebuilder; $routes--->setrouteclass(dashedroute::class); $routes->scope('/', function (routebuilder $builder) { $builder->registermiddleware('csrf', new csrfprotectionmiddleware([ 'httponly' => true, ])); $builder->applymiddleware('csrf'); //$builder->connect('/pages',['controller'=>'pages','action'=>'display', 'home']); $builder->connect('/email',['controller'=>'emails','action'=>'index']); $builder->fallbacks(); });
在 src/controller/emailscontroller.php 中創(chuàng)建一個(gè) emailscontroller.php 文件。 將以下代碼復(fù)制到控制器文件中。
src/controller/emailscontroller.php
namespace app\controller; use app\controller\appcontroller; use cake\mailer\email; class emailscontroller extends appcontroller{ public function index(){ $email = new email('default'); $email--->to('abc@gmail.com') ->subject('about') ->send('my message'); } } ?>
在 src/template 創(chuàng)建一個(gè)目錄 emails 并在該目錄下創(chuàng)建一個(gè)名為 index.php 的視圖文件。 復(fù)制以下代碼在那個(gè)文件中。
src/template/emails/index.php
email sent.
在發(fā)送任何電子郵件之前,我們需要對(duì)其進(jìn)行配置。在下面的屏幕截圖中,您可以看到有兩種傳輸方式,default 和 gmail。我們使用了 gmail 傳輸。
您需要將"gmail username"替換為您的 gmail 用戶名,將"app password"替換為您的應(yīng)用程序密碼。您需要在 gmail 中開啟兩步驗(yàn)證并創(chuàng)建新的 app 密碼才能發(fā)送電子郵件。
config/app.php

通過(guò)訪問(wèn)以下 url 執(zhí)行上述示例-http://localhost/cakephp/email
輸出
執(zhí)行后,您將收到以下輸出。

- CodeIgniter 文件上傳
- CodeIgniter 會(huì)話管理
- CodeIgniter Flashdata
- CodeIgniter 臨時(shí)數(shù)據(jù)
- CodeIgniter 頁(yè)面重定向
- CakePHP 擴(kuò)展視圖
- CakePHP 國(guó)際化
- FuelPHP 控制器
- FuelPHP 模型和數(shù)據(jù)庫(kù)
- FuelPHP 文件上傳
- FuelPHP 事件
- FuelPHP 單元測(cè)試
- FuelPHP 工作示例
- Laravel 控制器
- Laravel視圖
- Laravel Blade 模板
- Laravel 重定向
- Laravel 表單
- Laravel 錯(cuò)誤處理
- Laravel 歷史版本記錄