CakePHP的国际化

2018-11-24 12:30 更新

和许多其他框架一样,CakePHP也支持国际化。我们需要遵循以下步骤来实现从单一语言向多语言转化。

第1步 -创建一个单独的区域目录src\Locale 。

第2步 -在该src\Locale目录下为每一种语言创建子目录。子目录的名称可以是语言ISO代码所用的2个字母,或完整区域名如en_US, fr_FR等等。

第3步 -在每种语言子目录下创建独立的default.po文件。此文件包含以下程序中的msgid,msgstr表单入口

msgid "msg"
msgstr "CakePHP Internationalization example."

这里,msgid是将在视图模板文件中使用的键,msgstr是用来存储各翻译的值。

第4步 -在视图模板文件中,我们可以用上面msgid如下,程序将根据区域的设定值进行翻译。

<?php echo __('msg'); ?>

默认的语言环境可以通过config/bootstrap.php中的文件进行设置,如下。

'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US')

若要在运行时改变语言设置,我们可以使用下面的语句。

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/目录下创建一个LocalizationsController.php文件。复制以下代码至其中。

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目录下创建3个目录名为en_US,fr_FR,de_DE,并在每个目录下分别创建一个default.po文件。复制以下代码至对应的文件中。

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目录下创建一个目录Localizations, 并在此Localizations目录下创建一个名为index.ctp视图文件。复制以下代码至其中。

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'); ?>

通过访问以下网址执行上面的例子。

http://localhost:85/locale

输出

执行以上程序,你会看到如下页面。


电子邮件

CakePHP提供了Email类来管理电子邮件相关的功能。如要在任何控制器中使用电子邮件功能,我们首先需要通过编写以下语句来加载Email类。

use CakeMailerEmail;

Email类提供各种有用的方法如下。

语法From (string|array|null $email null , string|null $name null ) 
参数说明 -email;-名字;
返回类型数组|$this
说明表明邮件发送方地址
语法To (string|array|null $email null, string|null $name null) 
参数说明 -email;-名字;
返回类型数组|$this
说明表明邮件接收方地址
语法Send (string|array|null $content null) 
参数说明信息内容,或者信息数组
返回类型数组
说明使用指定的内容,模版或者样式发送邮件
语法Subject (string|null $subject null) 
参数说明主题
返回类型数组|$this
说明获得/设置主题
语法Attachments (string|array|null $attachments null) 
参数说明文件名,或文件名数组
返回类型数组|$this
说明给邮件添加附件
语法Bcc (string|array|null $email null, string|null $name null) 
参数说明 -email;-名字;
返回类型数组|$this
说明Bcc
语法cc( string|array|null $email null , string|null $name null ) 
参数说明 -email;-名字;
返回类型数组|$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/目录下创建一个EmailsController.php文件。复制以下代码至其中。

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目录下创建一个Emails目录,并在该Emails目录下创建一个名为index.ctp视图文件复制以下代码至其中。

src/Template/Emails/index.ctp

Email Sent.

在我们发送电子邮件之前,我们需要对它进行配置。在下面的截图中,可以看到有两个传输配置,默认和Gmail。我们使用Gmail的传输配置。使用您的Gmail用户名密码代替“GMAIL USERNAME”和"APP PASSWORD"。打开Gmail的两步验证,并创建一个新的应用密码发送电子邮件。

config/app.php


通过访问以下网址执行上述例如

http://localhost:85/CakePHP/email

输出

执行以上程序,你会看到如下页面。



以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号