CakePHP - 国际化


与许多其他框架一样,CakePHP 也支持国际化。我们需要按照以下步骤从单一语言过渡到多种语言。

步骤1

创建单独的区域设置目录 resources\ locales

第2步

在目录 src\Locale 下为每种语言创建子目录。子目录的名称可以是语言的两个字母 ISO 代码或完整的语言环境名称,如 en_US、fr_FR 等。

步骤3

在每个语言子目录下创建单独的default.po文件。该文件包含msgidmsgstr形式的条目,如以下程序所示。

msgid "msg"
msgstr "CakePHP Internationalization example."

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

步骤4

在 View 模板文件中,我们可以使用上面的msgid,如下所示,它将根据 locale 的设置值进行翻译。

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

可以通过以下行在config/app.php文件中设置默认区域设置。

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

要在运行时更改本地,我们可以使用以下行。

use Cake\I18n\I18n;
I18n::locale('de_DE');

例子

在 config/routes.php 文件中进行更改,如以下程序所示。

配置/routes.php

<?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创建LocalizationsController.php文件将以下代码复制到控制器文件中。

src/Controller/LocalizationsController.php

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

在 resources\ locales处创建locales目录。在 locales 目录下创建 3 个目录,名为en_US、fr_FR、de_DE 。在每个目录下创建一个名为default.po 的文件将以下代码复制到相应文件中。

资源/locales/en_US/default.po

msgid "msg"
msgstr "CakePHP Internationalization example."

资源/locales/fr_FR/default.po

msgid "msg"
msgstr "Exemple CakePHP internationalisation."

资源/locales/de_DE/default.po

msgid "msg"
msgstr "CakePHP Internationalisierung Beispiel."

src/Template处创建一个Localizations目录,并在该目录下创建一个名为 index.php 的视图文件将以下代码复制到该文件中。

src/模板/本地化/index.php

<?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();
?>
<?php echo __('msg'); ?>

通过访问以下 URL 来执行上述示例。http://localhost/cakephp4/区域设置

输出

执行后,您将收到以下输出。

英语

电子邮件

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

use Cake\Mailer\Email;

Email 类提供了各种有用的方法,如下所述。

句法

From(字符串|数组|null $email null, string|null $name null )

参数
  • 带有电子邮件的字符串

  • 姓名

退货

数组|$这个

描述

它指定来自哪个电子邮件地址;电子邮件将被发送

句法

To(字符串|数组|null $email null, string|null $name null)

参数
  • 带有电子邮件的字符串

  • 姓名

退货

数组|$这个

描述

它指定电子邮件将发送给谁

句法

发送(字符串|数组|null $内容为null)

参数
  • 带有消息的字符串或带有消息的数组。

退货 大批
描述

使用指定的内容、模板和布局发送电子邮件

句法

主题(字符串|null $主题为空)

参数
  • 主题字符串

退货

数组|$这个

描述

获取/设置主题

句法

附件(字符串|数组|null $attachment snull)

参数
  • 带有文件名的字符串或带有文件名的数组

退货

数组|$这个

描述

将附件添加到电子邮件中

句法

密件抄送(字符串|数组|null $电子邮件null,字符串|null $名称null)

参数
  • 带有电子邮件的字符串

  • 姓名

退货

数组|$这个

描述

密件抄送

句法

cc( 字符串|数组|null $email null , 字符串|null $name null )

参数
  • 带有电子邮件的字符串

  • 姓名

退货

数组|$这个

描述

抄送

例子

在 config/routes.php 文件中进行更改,如以下程序所示。

配置/routes.php

<?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创建一个EmailsController.php文件将以下代码复制到控制器文件中。

src/Controller/EmailsController.php

<?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处创建一个Emails目录,并在该目录下创建一个名为index.php 的视图文件。将以下代码复制到该文件中。

src/模板/电子邮件/index.php

Email Sent.

在发送任何电子邮件之前,我们需要对其进行配置。在下面的屏幕截图中,您可以看到有两种传输方式:默认传输方式和 Gmail。我们使用了 Gmail 传输。

您需要将“GMAIL USERNAME”替换为您的 Gmail 用户名,将“APP PASSWORD”替换为您的应用程序密码。您需要在Gmail中开启两步验证并创建新的APP密码才能发送电子邮件。

配置/应用程序.php

程序应用程序

通过访问以下 URL 执行上述示例 - http://localhost/cakephp/email

输出

执行后,您将收到以下输出。

文档API