国际化(Internationalization)
与许多其他框架一样,CakePHP也支持国际化。 我们需要按照这些步骤从单一语言转到多语言。
Step 1 - 创建单独的Locale目录src\Locale 。
Step 2 - 为目录src\Locale下的每种语言创建子目录。 子目录的名称可以是语言的两个字母ISO代码,也可以是完整的语言环境名称,如en_US,fr_FR等。
Step 3 - 在每个语言子目录下创建单独的default.po文件。 此文件包含msgid和msgstr形式的条目,如以下程序所示。
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)
执行后,您将收到以下输出。
CakePHP提供电子邮件类来管理电子邮件相关的功能。 要在任何控制器中使用电子邮件功能,我们首先需要通过编写以下行来加载Email类。
use Cake\Mailer\Email;
Email类提供了各种有用的方法,如下所述。
Syntax | From(string | array | null $email null,string | null $name null) |
Parameters |
|
Returns | array|$this |
Description | 它指定从哪个电子邮件地址; 电子邮件将被发送 |
Syntax | To(string | array | null $email null,string | null $name null) |
Parameters |
|
Returns | array|$this |
Description | 它指定向谁发送电子邮件 |
Syntax | 发送(字符串|数组| null $content null) |
Parameters |
|
Returns | array |
Description | 使用指定的内容,模板和布局发送电子邮件 |
Syntax | Subject(string | null $subject null) |
Parameters |
|
Returns | array|$this |
Description | 获取/设置主题。 |
Syntax | 附件(字符串|数组| null $attachments null) |
Parameters |
|
Returns | array|$this |
Description | 添加电子邮件附件 |
Syntax | 密件抄送(字符串|数组| null $email null,字符串| null $name null) |
Parameters |
|
Returns | array|$this |
Description | Bcc |
Syntax | cc(string | array | null $email null,string | null $name null) |
Parameters |
|
Returns | array|$this |
Description | Cc |
例子 (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
通过访问以下URL执行上述示例: http://localhost:85/CakePHP/email
输出 (Output)
执行后,您将收到以下输出。