CakePHP - Internacionalização
Como muitos outros frameworks, o CakePHP também oferece suporte à internacionalização. Precisamos seguir essas etapas para ir de um único idioma para vários idiomas.
Passo 1
Crie um diretório de locales separado para recursos \locales.
Passo 2
Crie um subdiretório para cada idioma, no diretório src \ Locale. O nome do subdiretório pode ser um código ISO de duas letras do idioma ou um nome de local completo como en_US, fr_FR etc.
etapa 3
Criar separado default.poarquivo em cada subdiretório de idioma. Este arquivo contém entradas na forma demsgid e msgstr, conforme mostrado no programa a seguir.
msgid "msg"
msgstr "CakePHP Internationalization example."
Aqui o msgid é a chave que será usada no arquivo de modelo de visualização e msgstr é o valor que armazena a tradução.
Passo 4
No arquivo de modelo de visualização, podemos usar o acima msgid, conforme mostrado abaixo, que será convertido com base no valor definido de locale.
<?php echo __('msg'); ?>
A localidade padrão pode ser definida no config/app.php arquivo pela seguinte linha.
'defaultLocale' => env('APP_DEFAULT_LOCALE', 'en_US')
Para alterar o local em tempo de execução, podemos usar as seguintes linhas.
use Cake\I18n\I18n;
I18n::locale('de_DE');
Exemplo
Faça alterações no arquivo config / routes.php conforme mostrado no programa a seguir.
config/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();
});
Criar uma LocalizationsController.php arquivo em src/Controller/LocalizationsController.php. Copie o código a seguir no arquivo do controlador.
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);
}
}
}
?>
Criar uma locales diretório em recursos \locales. Crie 3 diretórios chamadosen_US, fr_FR, de_DEno diretório locales. Crie um arquivo em cada diretório chamadodefault.po. Copie o código a seguir no respectivo arquivo.
resources/locales/en_US/default.po
msgid "msg"
msgstr "CakePHP Internationalization example."
resources/locales/fr_FR/default.po
msgid "msg"
msgstr "Exemple CakePHP internationalisation."
resources/locales/de_DE/default.po
msgid "msg"
msgstr "CakePHP Internationalisierung Beispiel."
Crie um diretório Localizations em src/Template e nesse diretório, crie um View arquivo chamado index.php. Copie o código a seguir nesse arquivo.
src/Template/Localizations/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'); ?>
Execute o exemplo acima visitando o seguinte URL. http: // localhost / cakephp4 / locale
Resultado
Após a execução, você receberá a seguinte saída.
O email
O CakePHP fornece a classe Email para gerenciar funcionalidades relacionadas a email. Para usar a funcionalidade de email em qualquer controlador, primeiro precisamos carregar a classe Email escrevendo a seguinte linha.
use Cake\Mailer\Email;
A classe Email fornece vários métodos úteis descritos a seguir.
Sintaxe | De (string | array | null $ email null, string | null $ name null) |
---|---|
Parâmetros |
|
Devoluções | array | $ this |
Descrição | Ele especifica de qual endereço de e-mail; o email será enviado |
Sintaxe | Para (string | array | null $ email null, string | null $ name null) |
---|---|
Parâmetros |
|
Devoluções | array | $ this |
Descrição | Ele especifica para quem o e-mail será enviado |
Sintaxe | Enviar (string | array | null $ content null) |
---|---|
Parâmetros |
|
Devoluções | matriz |
Descrição | Envie um e-mail usando o conteúdo, modelo e layout especificados |
Sintaxe | Assunto (string | null $ subject null) |
---|---|
Parâmetros |
|
Devoluções | array | $ this |
Descrição | Obter / definir assunto |
Sintaxe | Anexos (string | array | null $ attachment snull) |
---|---|
Parâmetros |
|
Devoluções | array | $ this |
Descrição | Adicionar anexos à mensagem de e-mail |
Sintaxe | Bcc (string | array | null $ email null, string | null $ name null) |
---|---|
Parâmetros |
|
Devoluções | array | $ this |
Descrição | Bcc |
Sintaxe | cc (string | array | null $ email null, string | null $ name null) |
---|---|
Parâmetros |
|
Devoluções | array | $ this |
Descrição | Cc |
Exemplo
Faça alterações no arquivo config / routes.php conforme mostrado no programa a seguir.
config/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();
});
Criar um EmailsController.php arquivo em src/Controller/EmailsController.php. Copie o código a seguir no arquivo do controlador.
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('[email protected]')
->subject('About')
->send('My message');
}
}
?>
Crie um diretório Emails em src/Template e nesse diretório, crie um arquivo de visualização chamado index.php. Copie o código a seguir nesse arquivo.
src/Template/Emails/index.php
Email Sent.
Antes de enviarmos qualquer e-mail, precisamos configurá-lo. Na captura de tela abaixo, você pode ver que existem dois transportes, o padrão e o Gmail. Usamos o transporte do Gmail.
Você precisa substituir o “NOME DE USUÁRIO DO GMAIL” pelo seu nome de usuário do Gmail e “SENHA DO APP” pela senha do seu aplicativo. Você precisa ativar a verificação em duas etapas no Gmail e criar uma nova senha de APP para enviar e-mail.
config/app.php
Execute o exemplo acima visitando a seguinte URL - http: // localhost / cakephp / email
Resultado
Após a execução, você receberá a seguinte saída.