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.
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 |
|
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 |
|
Devoluciones | matriz | $ esto |
Descripción | Especifica a quién se enviará el correo electrónico |
Sintaxis | Enviar (cadena | matriz | nulo $ contenido nulo) |
---|---|
Parámetros |
|
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 |
|
Devoluciones | matriz | $ esto |
Descripción | Obtener / Establecer asunto |
Sintaxis | Adjuntos (cadena | matriz | null $ adjunto snull) |
---|---|
Parámetros |
|
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 |
|
Devoluciones | matriz | $ esto |
Descripción | Cco |
Sintaxis | cc (cadena | matriz | nulo $ correo electrónico nulo, cadena | nulo $ nombre nulo) |
---|---|
Parámetros |
|
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.