CakePHP - Internationalisation

Comme beaucoup d'autres frameworks, CakePHP prend également en charge l'internationalisation. Nous devons suivre ces étapes pour passer d'une langue unique à plusieurs langues.

Étape 1

Créez un répertoire de paramètres régionaux séparé resources \locales.

Étape 2

Créez un sous-répertoire pour chaque langue, sous le répertoire src \ Locale. Le nom du sous-répertoire peut être un code ISO à deux lettres de la langue ou un nom de langue complet comme en_US, fr_FR etc.

Étape 3

Créer séparé default.pofichier sous chaque sous-répertoire de langue. Ce fichier contient une entrée sous la forme demsgid et msgstr, comme indiqué dans le programme suivant.

msgid "msg"
msgstr "CakePHP Internationalization example."

Ici le msgid est la clé qui sera utilisée dans le fichier de modèle de vue et msgstr est la valeur qui stocke la traduction.

Étape 4

Dans le fichier de modèle de vue, nous pouvons utiliser ce qui précède msgid, comme indiqué ci-dessous, qui sera traduit en fonction de la valeur définie de locale.

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

Les paramètres régionaux par défaut peuvent être définis dans le config/app.php fichier par la ligne suivante.

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

Pour changer le local au moment de l'exécution, nous pouvons utiliser les lignes suivantes.

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

Exemple

Modifiez le fichier config / routes.php comme indiqué dans le programme suivant.

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

Créer un LocalizationsController.php déposer à src/Controller/LocalizationsController.php. Copiez le code suivant dans le fichier du contrôleur.

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

Créer un locales répertoire aux ressources \locales. Créez 3 répertoires appelésen_US, fr_FR, de_DEsous le répertoire locales. Créez un fichier sous chaque répertoire appelédefault.po. Copiez le code suivant dans le fichier respectif.

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

Créer un annuaire Localizations à src/Template et sous ce répertoire, créez un View fichier appelé index.php. Copiez le code suivant dans ce fichier.

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

Exécutez l'exemple ci-dessus en visitant l'URL suivante. http: // localhost / cakephp4 / locale

Production

Lors de l'exécution, vous recevrez la sortie suivante.

Email

CakePHP fournit une classe Email pour gérer les fonctionnalités liées aux emails. Pour utiliser la fonctionnalité de messagerie dans n'importe quel contrôleur, nous devons d'abord charger la classe Email en écrivant la ligne suivante.

use Cake\Mailer\Email;

La classe Email fournit diverses méthodes utiles qui sont décrites ci-dessous.

Syntaxe

From (chaîne | tableau | null $ email null, chaîne | null $ nom null)

Paramètres
  • Chaîne avec email

  • Name

Retour

tableau | $ this

La description

Il spécifie à partir de quelle adresse e-mail; l'e-mail sera envoyé

Syntaxe

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

Paramètres
  • Chaîne avec email

  • Name

Retour

tableau | $ this

La description

Il précise à qui le mail sera envoyé

Syntaxe

Envoyer (chaîne | tableau | null $ content null)

Paramètres
  • Chaîne avec message ou tableau avec messages.

Retour tableau
La description

Envoyer un e-mail en utilisant le contenu, le modèle et la mise en page spécifiés

Syntaxe

Subject (chaîne | null $ subject null)

Paramètres
  • Chaîne d'objet

Retour

tableau | $ this

La description

Obtenir / Définir le sujet

Syntaxe

Pièces jointes (string | array | null $ attachment snull)

Paramètres
  • Chaîne avec le nom de fichier ou tableau avec les noms de fichiers

Retour

tableau | $ this

La description

Ajouter des pièces jointes au message électronique

Syntaxe

Cci (chaîne | tableau | null $ email null, chaîne | null $ nom null)

Paramètres
  • Chaîne avec email

  • Name

Retour

tableau | $ this

La description

Cci

Syntaxe

cc (chaîne | tableau | null $ email null, chaîne | null $ nom null)

Paramètres
  • Chaîne avec email

  • Name

Retour

tableau | $ this

La description

Cc

Exemple

Modifiez le fichier config / routes.php comme indiqué dans le programme suivant.

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

Créé un EmailsController.php déposer à src/Controller/EmailsController.php. Copiez le code suivant dans le fichier du contrôleur.

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

Créer un annuaire Emails à src/Template et sous ce répertoire, créez un fichier View appelé index.php. Copiez le code suivant dans ce fichier.

src/Template/Emails/index.php

Email Sent.

Avant d'envoyer un e-mail, nous devons le configurer. Dans la capture d'écran ci-dessous, vous pouvez voir qu'il existe deux transports, par défaut et Gmail. Nous avons utilisé le transport Gmail.

Vous devez remplacer «GMAIL USERNAME» par votre nom d'utilisateur Gmail et «APP PASSWORD» par le mot de passe de votre application. Vous devez activer la vérification en deux étapes dans Gmail et créer un nouveau mot de passe APP pour envoyer un e-mail.

config/app.php

Exécutez l'exemple ci-dessus en visitant l'URL suivante - http: // localhost / cakephp / email

Production

Lors de l'exécution, vous recevrez la sortie suivante.