Cakephp-internationalization

提供:Dev Guides
移動先:案内検索

CakePHP-国際化

他の多くのフレームワークと同様に、CakePHPも国際化をサポートしています。 単一の言語から複数の言語に移行するには、次の手順に従う必要があります。

ステップ1 *-別のロケールディレクトリ *src \ Locale を作成します。

  • ステップ2 *-ディレクトリsrc \ Localeの下に各言語のサブディレクトリを作成します。 サブディレクトリの名前は、言語の2文字のISOコードまたはen_US、fr_FRなどの完全なロケール名にすることができます。

ステップ3 *-各言語サブディレクトリの下に個別の *default.po ファイルを作成します。 このファイルには、次のプログラムに示すように、 msgid および msgstr の形式のエントリが含まれています。

msgid "msg"
msgstr "CakePHP Internationalization example."

ここで、 msgid はViewテンプレートファイルで使用されるキーであり、 msgstr は翻訳を保存する値です。

ステップ4 *-Viewテンプレートファイルでは、ロケールの設定値に基づいて翻訳される上記の *msgid を以下に示すように使用できます。

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

デフォルトのロケールは、次の行で config/bootstrap.php ファイルで設定できます。

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

実行時にローカルを変更するには、次の行を使用できます。

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

次のプログラムに示すように、config/routes.phpファイルに変更を加えます。

*config/routes.php*
<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('locale',['controller'=>'Localizations','action'=>'index']);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();
*src/Controller/LocalizationsController.php* に *LocalizationsController.php* ファイルを作成します。 次のコードをコントローラーファイルにコピーします。
*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->data('locale');
            I18n::locale($locale);
         }
      }
   }
?>
*src \ Locale* に *Locale* ディレクトリを作成します。 Localeディレクトリの下に *en_US、fr_FR、de_DE* という3つのディレクトリを作成します。 *default.po* という名前の各ディレクトリの下にファイルを作成します。 それぞれのファイルに次のコードをコピーします。
*src/Locale/en_US/default.po*
msgid "msg"
msgstr "CakePHP Internationalization example."
*src/Locale/fr_FR/default.po*
msgid "msg"
msgstr "Exemple CakePHP internationalisation."
*src/Locale/de_DE/default.po*
msgid "msg"
msgstr "CakePHP Internationalisierung Beispiel."
*src/Template* に *Localizations* ディレクトリを作成し、そのディレクトリの下に *index.ctp* という名前のViewファイルを作成します。 そのファイルに次のコードをコピーします。
*src/Template/Localizations/index.ctp*
<?php
   echo $this->Form->create("Localizations",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'); ?>

次のURLにアクセスして、上記の例を実行します。

*http://localhost:85/CakePHP/locale*

出力

実行すると、次の出力が表示されます。

ローカライズ

Eメール

CakePHPは、Eメール関連の機能を管理するEmailクラスを提供します。 コントローラーで電子メール機能を使用するには、まず次の行を記述してEmailクラスをロードする必要があります。

use Cake\Mailer\Email;

Emailクラスは、以下で説明するさまざまな便利なメソッドを提供します。

Syntax From (string
array null $email null, string
null $name null ) Parameters
  • メール付きの文字列
  • Name
Returns
array $this
Description It specifies from which email address; the email will be sent
Syntax To (string
array null $email null, string
null $name null) Parameters
  • メール付きの文字列
  • Name
Returns
array $this
Description It specifies to whom the email will be sent
Syntax Send (string
array null $content null)
Parameters
  • メッセージを含む文字列またはメッセージを含む配列。
Returns array
Description Send an email using the specified content, template and layout
Syntax Subject (string
null $subject null) Parameters
  • 件名文字列
Returns
array $this
Description Get/Set Subject.
Syntax Attachments (string
array null $attachments null)
Parameters
  • ファイル名を含む文字列またはファイル名を含む配列
Returns array
$this Description
Syntax Bcc (string
array null $email null, string
null $name null) Parameters
  • メール付きの文字列
  • Name
Returns
array $this
Description Bcc
Syntax cc( string
array null $email null, string
null $name null ) Parameters
  • メール付きの文字列
  • Name
Returns
array $this
Description Cc

次のプログラムに示すように、config/routes.phpファイルに変更を加えます。

*config/routes.php*
<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('/email',['controller'=>'Emails','action'=>'index']);
      $routes->fallbacks('DashedRoute');
   });
   Plugin::routes();
*src/Controller/EmailsController.php* に *EmailsController.php* ファイルを作成します。 次のコードをコントローラーファイルにコピーします。
*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');
      }
   }
?>
*src/Template* にディレクトリEmailsを作成し、そのディレクトリの下に* index.ctp。*というViewファイルを作成します。そのファイルに次のコードをコピーします。
*src/Template/Emails/index.ctp*
Email Sent.

メールを送信する前に、設定する必要があります。 下のスクリーンショットでは、デフォルトとGmailの2つのトランスポートがあることがわかります。 Gmailトランスポートを使用しました。 「GMAIL USERNAME」をGmailユーザー名に、「APP PASSWORD」をアプリケーションパスワードに置き換える必要があります。 メールを送信するには、Gmailで2段階認証プロセスを有効にし、新しいAPPパスワードを作成する必要があります。

*config/app.php*

Gmailユーザー名

次のURLにアクセスして、上記の例を実行します。 http://localhost:85/CakePHP/email

出力

実行すると、次の出力が表示されます。

メール