CakePHP - Internazionalizzazione

Come molti altri framework, CakePHP supporta anche l'internazionalizzazione. Dobbiamo seguire questi passaggi per passare da una lingua a più lingue.

Passo 1

Crea una directory locale separata risorse \locales.

Passo 2

Crea una sottodirectory per ogni lingua, nella directory src \ Locale. Il nome della sottodirectory può essere il codice ISO di due lettere della lingua o il nome completo della locale come en_US, fr_FR ecc.

Passaggio 3

Crea separato default.pofile in ciascuna sottodirectory della lingua. Questo file contiene una voce sotto forma dimsgid e msgstr, come mostrato nel seguente programma.

msgid "msg"
msgstr "CakePHP Internationalization example."

Qui, il msgid è la chiave che verrà utilizzata nel file del modello di visualizzazione e msgstr è il valore che memorizza la traduzione.

Passaggio 4

Nel file del modello di visualizzazione, possiamo utilizzare quanto sopra msgid, come mostrato di seguito, che verrà tradotto in base al valore impostato di locale.

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

La locale predefinita può essere impostata nel file config/app.php file dalla riga seguente.

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

Per cambiare il locale in fase di esecuzione, possiamo usare le seguenti righe.

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

Esempio

Apporta le modifiche al file config / routes.php come mostrato nel seguente programma.

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

Creare un LocalizationsController.php file in src/Controller/LocalizationsController.php. Copiare il codice seguente nel file del controller.

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

Creare un locales directory in risorse \locales. Crea 3 directory chiamateen_US, fr_FR, de_DEnella directory locales. Crea un file in ogni directory chiamatadefault.po. Copia il seguente codice nel rispettivo file.

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 una directory Localizations a src/Template e sotto quella directory, crea un file View file chiamato index.php. Copia il codice seguente in quel file.

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

Esegui l'esempio precedente visitando il seguente URL. http: // localhost / cakephp4 / locale

Produzione

Dopo l'esecuzione, riceverai il seguente output.

E-mail

CakePHP fornisce una classe di posta elettronica per gestire le funzionalità relative alla posta elettronica. Per utilizzare la funzionalità di posta elettronica in qualsiasi controller, dobbiamo prima caricare la classe Email scrivendo la riga seguente.

use Cake\Mailer\Email;

La classe Email fornisce vari metodi utili descritti di seguito.

Sintassi

Da (stringa | array | null $ email null, stringa | null $ nome null)

Parametri
  • Stringa con e-mail

  • Name

ritorna

array | $ questo

Descrizione

Specifica da quale indirizzo di posta elettronica; l'email verrà inviata

Sintassi

A (stringa | array | null $ email null, stringa | null $ nome null)

Parametri
  • Stringa con e-mail

  • Name

ritorna

array | $ questo

Descrizione

Specifica a chi verrà inviata l'email

Sintassi

Invia (stringa | array | null $ content null)

Parametri
  • Stringa con messaggio o matrice con messaggi.

ritorna Vettore
Descrizione

Invia un'e-mail utilizzando il contenuto, il modello e il layout specificati

Sintassi

Oggetto (stringa | null $ soggetto null)

Parametri
  • Oggetto stringa

ritorna

array | $ questo

Descrizione

Ottieni / Imposta oggetto

Sintassi

Allegati (stringa | array | null $ allegato snull)

Parametri
  • Stringa con il nome del file o matrice con i nomi dei file

ritorna

array | $ questo

Descrizione

Aggiungi allegati al messaggio di posta elettronica

Sintassi

Ccn (stringa | array | null $ email null, stringa | null $ nome null)

Parametri
  • Stringa con e-mail

  • Name

ritorna

array | $ questo

Descrizione

Bcc

Sintassi

cc (stringa | array | null $ email null, stringa | null $ nome null)

Parametri
  • Stringa con e-mail

  • Name

ritorna

array | $ questo

Descrizione

Cc

Esempio

Apporta le modifiche al file config / routes.php come mostrato nel seguente programma.

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

Creare un EmailsController.php file in src/Controller/EmailsController.php. Copiare il codice seguente nel file del controller.

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 una directory Emails a src/Template e in quella directory, crea un file View chiamato index.php. Copia il codice seguente in quel file.

src/Template/Emails/index.php

Email Sent.

Prima di inviare qualsiasi e-mail, dobbiamo configurarla. Nello screenshot qui sotto, puoi vedere che ci sono due trasporti, predefinito e Gmail. Abbiamo utilizzato il trasporto di Gmail.

Devi sostituire "GMAIL USERNAME" con il tuo nome utente Gmail e "APP PASSWORD" con la password delle applicazioni. Devi attivare la verifica in due passaggi in Gmail e creare una nuova password per l'APP per inviare l'email.

config/app.php

Esegui l'esempio precedente visitando il seguente URL: http: // localhost / cakephp / email

Produzione

Dopo l'esecuzione, riceverai il seguente output.