和許多其他框架一樣,CakePHP也支持國(guó)際化。我們需要遵循以下步驟來實(shí)現(xiàn)從單一語言向多語言轉(zhuǎn)化。
第1步 -創(chuàng)建一個(gè)單獨(dú)的區(qū)域目錄src\Locale 。
第2步 -在該src\Locale目錄下為每一種語言創(chuàng)建子目錄。子目錄的名稱可以是語言ISO代碼所用的2個(gè)字母,或完整區(qū)域名如en_US, fr_FR等等。
第3步 -在每種語言子目錄下創(chuàng)建獨(dú)立的default.po文件。此文件包含以下程序中的msgid,msgstr表單入口。
msgid "msg" msgstr "CakePHP Internationalization example."
這里,msgid是將在視圖模板文件中使用的鍵,msgstr是用來存儲(chǔ)各翻譯的值。
第4步 -在視圖模板文件中,我們可以用上面msgid如下,程序?qū)⒏鶕?jù)區(qū)域的設(shè)定值進(jìn)行翻譯。
<?php echo __('msg'); ?>
默認(rèn)的語言環(huán)境可以通過config/bootstrap.php中的文件進(jìn)行設(shè)置,如下。
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US')
若要在運(yùn)行時(shí)改變語言設(shè)置,我們可以使用下面的語句。
use CakeI18nI18n; I18n::locale('de_DE');
修改config/routes.php文件如下。
config/routes.php文件
<?php use CakeCorePlugin; use CakeRoutingRouteBuilder; use CakeRoutingRouter; Router::defaultRouteClass('DashedRoute'); Router::scope('/', function (RouteBuilder $routes) { $routes->connect('locale',['controller'=>'Localizations','action'=>'index']); $routes->fallbacks('DashedRoute'); }); Plugin::routes();
在src/Controller/目錄下創(chuàng)建一個(gè)LocalizationsController.php文件。復(fù)制以下代碼至其中。
src/Controller/LocalizationsController.php
<?php namespace AppController; use AppControllerAppController; use CakeI18nI18n; class LocalizationsController extends AppController{ public function index(){ if($this->request->is('post')){ $locale = $this->request->data('locale'); I18n::locale($locale); } } } ?>
在src\Locale目錄下創(chuàng)建3個(gè)目錄名為en_US,fr_FR,de_DE,并在每個(gè)目錄下分別創(chuàng)建一個(gè)default.po文件。復(fù)制以下代碼至對(duì)應(yīng)的文件中。
src/Locale/en_US/default.po
msgid "msg" msgstr "CakePHP Internationalization example."
src/Locale/fr_FR/default.po
msgid "msg" msgstr "Exemple CakePHP internationalisation."
src/Locale/de_DE/default.po
msgid "msg" msgstr "CakePHP Internationalisierung Beispiel."
在src/Template目錄下創(chuàng)建一個(gè)目錄Localizations, 并在此Localizations目錄下創(chuàng)建一個(gè)名為index.ctp視圖文件。復(fù)制以下代碼至其中。
src/Template/Localizations/index.ctp
<?php echo $this->Form->create("Localizations",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(); ?> <?php echo __('msg'); ?>
通過訪問以下網(wǎng)址執(zhí)行上面的例子。
http://localhost:85/locale
執(zhí)行以上程序,你會(huì)看到如下頁(yè)面。
CakePHP提供了Email類來管理電子郵件相關(guān)的功能。如要在任何控制器中使用電子郵件功能,我們首先需要通過編寫以下語句來加載Email類。
use CakeMailerEmail;
Email類提供各種有用的方法如下。
語法 | From (string|array|null $email null , string|null $name null ) | ||
參數(shù)說明 | -email;-名字; | ||
返回類型 | 數(shù)組|$this | ||
說明 | 表明郵件發(fā)送方地址 |
語法 | To (string|array|null $email null, string|null $name null) | ||
參數(shù)說明 | -email;-名字; | ||
返回類型 | 數(shù)組|$this | ||
說明 | 表明郵件接收方地址 |
語法 | Send (string|array|null $content null) | ||
參數(shù)說明 | 信息內(nèi)容,或者信息數(shù)組 | ||
返回類型 | 數(shù)組 | ||
說明 | 使用指定的內(nèi)容,模版或者樣式發(fā)送郵件 |
語法 | Subject (string|null $subject null) | ||
參數(shù)說明 | 主題 | ||
返回類型 | 數(shù)組|$this | ||
說明 | 獲得/設(shè)置主題 |
語法 | Attachments (string|array|null $attachments null) | ||
參數(shù)說明 | 文件名,或文件名數(shù)組 | ||
返回類型 | 數(shù)組|$this | ||
說明 | 給郵件添加附件 |
語法 | Bcc (string|array|null $email null, string|null $name null) | ||
參數(shù)說明 | -email;-名字; | ||
返回類型 | 數(shù)組|$this | ||
說明 | Bcc |
語法 | cc( string|array|null $email null , string|null $name null ) | ||
參數(shù)說明 | -email;-名字; | ||
返回類型 | 數(shù)組|$this | ||
說明 | Cc |
修改config/routes.php文件如下。
config/routes.php文件
<?php use CakeCorePlugin; use CakeRoutingRouteBuilder; use CakeRoutingRouter; Router::defaultRouteClass('DashedRoute'); Router::scope('/', function (RouteBuilder $routes) { $routes->connect('/email',['controller'=>'Emails','action'=>'index']); $routes->fallbacks('DashedRoute'); }); Plugin::routes();
在src/Controller/目錄下創(chuàng)建一個(gè)EmailsController.php文件。復(fù)制以下代碼至其中。
src/Controller/EmailsController.php
<?php namespace AppController; use AppControllerAppController; use CakeMailerEmail; 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目錄,并在該Emails目錄下創(chuàng)建一個(gè)名為index.ctp視圖文件。復(fù)制以下代碼至其中。
src/Template/Emails/index.ctp
Email Sent.
在我們發(fā)送電子郵件之前,我們需要對(duì)它進(jìn)行配置。在下面的截圖中,可以看到有兩個(gè)傳輸配置,默認(rèn)和Gmail。我們使用Gmail的傳輸配置。使用您的Gmail用戶名密碼代替“GMAIL USERNAME”和"APP PASSWORD"。打開Gmail的兩步驗(yàn)證,并創(chuàng)建一個(gè)新的應(yīng)用密碼發(fā)送電子郵件。
config/app.php
通過訪問以下網(wǎng)址執(zhí)行上述例如:
http://localhost:85/CakePHP/email
執(zhí)行以上程序,你會(huì)看到如下頁(yè)面。
更多建議: