CakePHP的国际化
和许多其他框架一样,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
输出
执行以上程序,你会看到如下页面。