CakePHP的國(guó)際化

2018-11-24 12:30 更新

和許多其他框架一樣,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è)面。



以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)