CakePHP - Internationalisierung

Wie viele andere Frameworks unterstützt auch CakePHP die Internationalisierung. Wir müssen diese Schritte befolgen, um von einer Sprache zu mehreren Sprachen zu gelangen.

Schritt 1

Erstellen Sie ein separates Gebietsschema Verzeichnisressourcen \locales.

Schritt 2

Erstellen Sie ein Unterverzeichnis für jede Sprache im Verzeichnis src \ Locale. Der Name des Unterverzeichnisses kann ein aus zwei Buchstaben bestehender ISO-Code der Sprache oder ein vollständiger Name des Gebietsschemas wie en_US, fr_FR usw. sein.

Schritt 3

Separat erstellen default.poDatei unter jedem Sprachunterverzeichnis. Diese Datei enthält Einträge in Form vonmsgid und msgstr, wie im folgenden Programm gezeigt.

msgid "msg"
msgstr "CakePHP Internationalization example."

Hier die msgid ist der Schlüssel, der in der Ansichtsvorlagendatei und verwendet wird msgstr ist der Wert, der die Übersetzung speichert.

Schritt 4

In der View-Vorlagendatei können wir die oben genannten verwenden msgid, wie unten gezeigt, die basierend auf dem eingestellten Wert des Gebietsschemas übersetzt werden.

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

Das Standardgebietsschema kann im festgelegt werden config/app.php Datei durch die folgende Zeile.

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

Um das lokale zur Laufzeit zu ändern, können wir die folgenden Zeilen verwenden.

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

Beispiel

Nehmen Sie Änderungen in der Datei config / route.php vor, wie im folgenden Programm gezeigt.

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

Ein ... kreieren LocalizationsController.php Datei bei src/Controller/LocalizationsController.php. Kopieren Sie den folgenden Code in die Controller-Datei.

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

Ein ... kreieren locales Verzeichnis unter Ressourcen \locales. Erstellen Sie 3 aufgerufene Verzeichnisseen_US, fr_FR, de_DEunter dem Gebietsschema-Verzeichnis. Erstellen Sie eine Datei unter jedem Verzeichnis mit dem Namendefault.po. Kopieren Sie den folgenden Code in die entsprechende Datei.

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

Erstellen Sie ein Verzeichnis Localizations beim src/Template und erstellen Sie unter diesem Verzeichnis eine View Datei aufgerufen index.php. Kopieren Sie den folgenden Code in diese Datei.

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

Führen Sie das obige Beispiel aus, indem Sie die folgende URL aufrufen. http: // localhost / cakephp4 / locale

Ausgabe

Bei der Ausführung erhalten Sie die folgende Ausgabe.

Email

CakePHP bietet eine E-Mail-Klasse zum Verwalten von E-Mail-bezogenen Funktionen. Um die E-Mail-Funktionalität in einem Controller verwenden zu können, müssen Sie zuerst die E-Mail-Klasse laden, indem Sie die folgende Zeile schreiben.

use Cake\Mailer\Email;

Die E-Mail-Klasse bietet verschiedene nützliche Methoden, die im Folgenden beschrieben werden.

Syntax

Von (Zeichenfolge | Array | null $ email null, Zeichenfolge | null $ name null)

Parameter
  • String mit E-Mail

  • Name

Kehrt zurück

Array | $ this

Beschreibung

Es gibt an, von welcher E-Mail-Adresse; Die E-Mail wird gesendet

Syntax

To (Zeichenfolge | Array | null $ email null, Zeichenfolge | null $ name null)

Parameter
  • String mit E-Mail

  • Name

Kehrt zurück

Array | $ this

Beschreibung

Es gibt an, an wen die E-Mail gesendet wird

Syntax

Senden (Zeichenfolge | Array | null $ Inhalt null)

Parameter
  • String mit Nachricht oder Array mit Nachrichten.

Kehrt zurück Array
Beschreibung

Senden Sie eine E-Mail mit dem angegebenen Inhalt, der angegebenen Vorlage und dem angegebenen Layout

Syntax

Betreff (Zeichenfolge | null $ Betreff null)

Parameter
  • Betreffzeichenfolge

Kehrt zurück

Array | $ this

Beschreibung

Betreff abrufen / festlegen

Syntax

Anhänge (string | array | null $ Anhang snull)

Parameter
  • Zeichenfolge mit dem Dateinamen oder Array mit Dateinamen

Kehrt zurück

Array | $ this

Beschreibung

Fügen Sie der E-Mail-Nachricht Anhänge hinzu

Syntax

Bcc (Zeichenfolge | Array | null $ email null, Zeichenfolge | null $ name null)

Parameter
  • String mit E-Mail

  • Name

Kehrt zurück

Array | $ this

Beschreibung

Bcc

Syntax

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

Parameter
  • String mit E-Mail

  • Name

Kehrt zurück

Array | $ this

Beschreibung

Cc

Beispiel

Nehmen Sie Änderungen in der Datei config / route.php vor, wie im folgenden Programm gezeigt.

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

Erstelle ein EmailsController.php Datei bei src/Controller/EmailsController.php. Kopieren Sie den folgenden Code in die Controller-Datei.

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

Erstellen Sie ein Verzeichnis Emails beim src/Template Erstellen Sie unter diesem Verzeichnis eine Ansichtsdatei mit dem Namen index.php. Kopieren Sie den folgenden Code in diese Datei.

src/Template/Emails/index.php

Email Sent.

Bevor wir eine E-Mail senden, müssen wir sie konfigurieren. Im folgenden Screenshot sehen Sie, dass es zwei Transporte gibt, Standard und Google Mail. Wir haben den Google Mail-Transport verwendet.

Sie müssen den "GMAIL USERNAME" durch Ihren Google Mail-Nutzernamen und "APP PASSWORD" durch Ihr Anwendungskennwort ersetzen. Sie müssen die Bestätigung in zwei Schritten in Google Mail aktivieren und ein neues APP-Kennwort erstellen, um E-Mails zu senden.

config/app.php

Führen Sie das obige Beispiel aus, indem Sie die folgende URL aufrufen: http: // localhost / cakephp / email

Ausgabe

Bei der Ausführung erhalten Sie die folgende Ausgabe.