当前位置: 首页 > 文档资料 > CakePHP 入门教程 >

国际化(Internationalization)

优质
小牛编辑
131浏览
2023-12-01

与许多其他框架一样,CakePHP也支持国际化。 我们需要按照这些步骤从单一语言转到多语言。

Step 1 - 创建单独的Locale目录src\Locale

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

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

msgid "msg"
msgstr "CakePHP Internationalization example."

这里, msgid是将在View模板文件中使用的密钥, msgstr是存储转换的值。

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

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

可以通过以下行在config/bootstrap.php文件中设置缺省语言环境。

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

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

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

例子 (Example)

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

config/routes.php

<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;
   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('locale',['controller'=>'Localizations','action'=>'index']);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();

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->data('locale');
            I18n::locale($locale);
         }
      }
   }
?>

src\Locale创建一个Locale目录。 在Locale目录下创建名为en_US, fr_FR, de_DE的3个目录。 在名为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创建一个名为index.ctp的View文件。 复制该文件中的以下代码。

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

通过访问以下URL执行上述示例。

http://localhost:85/CakePHP/locale

输出 (Output)

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

本地化

Email

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

use Cake\Mailer\Email;

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

SyntaxFrom(string | array | null $email null,string | null $name null)
Parameters
  • 字符串与电子邮件

  • Name

Returnsarray|$this
Description它指定从哪个电子邮件地址; 电子邮件将被发送
SyntaxTo(string | array | null $email null,string | null $name null)
Parameters
  • 字符串与电子邮件

  • Name

Returnsarray|$this
Description它指定向谁发送电子邮件
Syntax发送(字符串|数组| null $content null)
Parameters
  • 包含消息或带消息的数组的字符串。

Returnsarray
Description使用指定的内容,模板和布局发送电子邮件
SyntaxSubject(string | null $subject null)
Parameters
  • 主题字符串

Returnsarray|$this
Description获取/设置主题。
Syntax附件(字符串|数组| null $attachments null)
Parameters
  • 带有文件名的文件名或带有文件名的数组

Returnsarray|$this
Description添加电子邮件附件
Syntax密件抄送(字符串|数组| null $email null,字符串| null $name null)
Parameters
  • 字符串与电子邮件

  • Name

Returnsarray|$this
DescriptionBcc
Syntaxcc(string | array | null $email null,string | null $name null)
Parameters
  • 字符串与电子邮件

  • Name

Returnsarray|$this
DescriptionCc

例子 (Example)

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

config/routes.php

<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;
   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('/email',['controller'=>'Emails','action'=>'index']);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();

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创建一个目录电子邮件,并在该目录下创建一个名为index.ctp.的View文件index.ctp. 复制该文件中的以下代码。

src/Template/Emails/index.ctp

Email Sent.

在发送任何电子邮件之前,我们需要对其进行配置。 在下面的屏幕截图中,您可以看到有两种传输方式,默认和Gmail。 我们使用过Gmail传输。 您需要将“GMAIL USERNAME”替换为您的Gmail用户名,将“APP PASSWORD”替换为您的应用程序密码。 您需要在Gmail中启用两步验证并创建新的APP密码才能发送电子邮件。

config/app.php

Gmail用户名

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

输出 (Output)

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

电子邮件