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
  • String com email

  • Name

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
  • String com email

  • Name

Devoluções

array | $ this

Descrição

Ele especifica para quem o e-mail será enviado

Sintaxe

Enviar (string | array | null $ content null)

Parâmetros
  • String com mensagem ou matriz com mensagens.

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
  • String de assunto

Devoluções

array | $ this

Descrição

Obter / definir assunto

Sintaxe

Anexos (string | array | null $ attachment snull)

Parâmetros
  • String com o nome do arquivo ou matriz com nomes de arquivos

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
  • String com email

  • Name

Devoluções

array | $ this

Descrição

Bcc

Sintaxe

cc (string | array | null $ email null, string | null $ name null)

Parâmetros
  • String com email

  • Name

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.