CakePHP - Internacionalización

Como muchos otros marcos, CakePHP también admite la internacionalización. Necesitamos seguir estos pasos para pasar de un solo idioma a varios idiomas.

Paso 1

Cree un directorio de locales independiente resources \locales.

Paso 2

Cree un subdirectorio para cada idioma, en el directorio src \ Locale. El nombre del subdirectorio puede ser un código ISO de dos letras del idioma o un nombre completo de la configuración regional como en_US, fr_FR, etc.

Paso 3

Crear por separado default.poarchivo en cada subdirectorio de idioma. Este archivo contiene una entrada en forma demsgid y msgstr, como se muestra en el siguiente programa.

msgid "msg"
msgstr "CakePHP Internationalization example."

Aquí el msgid es la clave que se utilizará en el archivo de plantilla Ver y msgstr es el valor que almacena la traducción.

Etapa 4

En el archivo de plantilla Ver, podemos usar lo anterior msgid, como se muestra a continuación, que se traducirá según el valor establecido de la configuración regional.

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

La configuración regional predeterminada se puede establecer en el config/app.php archivo por la siguiente línea.

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

Para cambiar el local en tiempo de ejecución, podemos usar las siguientes líneas.

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

Ejemplo

Realice cambios en el archivo config / routes.php como se muestra en el siguiente programa.

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

Crear un LocalizationsController.php archivar en src/Controller/LocalizationsController.php. Copie el siguiente código en el archivo del 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);
         }
      }
   }
?>

Crear un locales directorio en recursos \locales. Crea 3 directorios llamadosen_US, fr_FR, de_DEen el directorio locales. Cree un archivo en cada directorio llamadodefault.po. Copie el siguiente código en el archivo respectivo.

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."

Crea un directorio Localizations a src/Template y en ese directorio, cree un View archivo llamado index.php. Copie el siguiente código en ese archivo.

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

Ejecute el ejemplo anterior visitando la siguiente URL. http: // localhost / cakephp4 / locale

Salida

Tras la ejecución, recibirá el siguiente resultado.

Email

CakePHP proporciona una clase de correo electrónico para administrar las funcionalidades relacionadas con el correo electrónico. Para usar la funcionalidad de correo electrónico en cualquier controlador, primero debemos cargar la clase Correo electrónico escribiendo la siguiente línea.

use Cake\Mailer\Email;

La clase Email proporciona varios métodos útiles que se describen a continuación.

Sintaxis

De (cadena | matriz | nulo $ correo electrónico nulo, cadena | nulo $ nombre nulo)

Parámetros
  • Cadena con correo electrónico

  • Name

Devoluciones

matriz | $ esto

Descripción

Especifica desde qué dirección de correo electrónico; el correo electrónico será enviado

Sintaxis

Para (cadena | matriz | nulo $ correo electrónico nulo, cadena | nulo $ nombre nulo)

Parámetros
  • Cadena con correo electrónico

  • Name

Devoluciones

matriz | $ esto

Descripción

Especifica a quién se enviará el correo electrónico

Sintaxis

Enviar (cadena | matriz | nulo $ contenido nulo)

Parámetros
  • Cadena con mensaje o matriz con mensajes.

Devoluciones formación
Descripción

Envíe un correo electrónico utilizando el contenido, la plantilla y el diseño especificados

Sintaxis

Asunto (cadena | nulo $ asunto nulo)

Parámetros
  • Cadena de asunto

Devoluciones

matriz | $ esto

Descripción

Obtener / Establecer asunto

Sintaxis

Adjuntos (cadena | matriz | null $ adjunto snull)

Parámetros
  • Cadena con el nombre de archivo o matriz con nombres de archivo

Devoluciones

matriz | $ esto

Descripción

Agregar archivos adjuntos al mensaje de correo electrónico

Sintaxis

Cco (cadena | matriz | nulo $ correo electrónico nulo, cadena | nulo $ nombre nulo)

Parámetros
  • Cadena con correo electrónico

  • Name

Devoluciones

matriz | $ esto

Descripción

Cco

Sintaxis

cc (cadena | matriz | nulo $ correo electrónico nulo, cadena | nulo $ nombre nulo)

Parámetros
  • Cadena con correo electrónico

  • Name

Devoluciones

matriz | $ esto

Descripción

Cc

Ejemplo

Realice cambios en el archivo config / routes.php como se muestra en el siguiente programa.

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

Crear un EmailsController.php archivar en src/Controller/EmailsController.php. Copie el siguiente código en el archivo del 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');
      }
   }
?>

Crea un directorio Emails a src/Template y en ese directorio, cree un archivo de vista llamado index.php. Copie el siguiente código en ese archivo.

src/Template/Emails/index.php

Email Sent.

Antes de enviar cualquier correo electrónico, debemos configurarlo. En la siguiente captura de pantalla, puede ver que hay dos transportes, el predeterminado y Gmail. Hemos utilizado el transporte de Gmail.

Debe reemplazar el "NOMBRE DE USUARIO DE GMAIL" con su nombre de usuario de Gmail y la "CONTRASEÑA DE LA APLICACIÓN" con la contraseña de su aplicación. Debe activar la verificación en 2 pasos en Gmail y crear una nueva contraseña de aplicación para enviar correo electrónico.

config/app.php

Ejecute el ejemplo anterior visitando la siguiente URL: http: // localhost / cakephp / email

Salida

Tras la ejecución, recibirá el siguiente resultado.