質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

1805閲覧

Cakephpでの多言語化(配列やメール)

kenkbou

総合スコア151

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2017/05/08 02:22

お世話になります。

CakePHP3系で多言語化したサイトを作りたいと思っているのですが、
・配列
・メール
をどのように多言語化したらよいかと思っております。

配列に関しまして、以下のようにforeachで回したものを多言語化したいのですが、
『__()』で囲いi18nで翻訳ファイルを作成しようとすると、エラーになってしまいます。

PHP

1$data = [ 2'aaa' => 'AAA', 3'bbb' => 'BBB', 4'ccc' => 'CCC', 5]; 6<select name="select"> 7<?php foreach ($data as $k => $v) : ?> 8<option value="<?= $k; ?>"><?= $v; ?></option> 9<?php endforeach; ?> 10</select>

メールの本文に関しては、テンプレートを指定する際に、以下のようにディレクトリ構造を取ればいいかなと思うのですが、タイトルをどのようにしたらよいか分かりません。

PHP

1$email = new Email(); 2$email->transport('default') 3 ->from(MAIL_FROM) 4 ->template($this->lang . '/template') 5 ->subject('title') 6 ->send();

書いていて思ったのですが、タイトルも『__()』で囲って、i18nコマンドでよいのかもしれません。

ご存知の方、もしくは別の方法で解決された方、ご意見頂けますと助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

単純に__()で囲むだけでおっしゃる通りのなのですが、どのように書いたらエラーになりましたか?
以下、例です。

PHP

1$data = [ 2'aaa' => __('AAA'), 3'bbb' => __('BBB'), 4'ccc' => __('CCC'), 5]; 6

PHP

1->subject(__('title'))

追記

PHP

1 2private $how_hour = []; 3 4public function initialize(array $config) 5{ 6 $this->how_hour = [ 7 1 => '30' . __('分'), 8 2 => '1' . __('時間'), 9 3 => '1' . __('時間') . '30' . __('分'), 10 4 => '2' . __('時間'), 11 5 => '2' . __('時間') . '30' . __('分'), 12 6 => '3' . __('時間'), 13 7 => '3' . __('時間') . '30' . __('分'), 14 8 => '4' . __('時間'), 15 9 => '4' . __('時間') . '30' . __('分'), 16 10 => '5' . __('時間'), 17 11 => '5' . __('時間') . '30' . __('分'), 18 12 => '6' . __('時間'), 19 ]; 20}

投稿2017/05/08 03:19

編集2017/05/08 07:47
coba-coba

総合スコア1409

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenkbou

2017/05/08 04:56

ありがとうございます。配列に関してなのですが、モデルに記述してもいけるものなのでしょうか・・・?うまく行かず・・・
coba-coba

2017/05/08 05:37

どこに書いてもいけますよ。 該当するコードとエラーを見せていただけますか?
kenkbou

2017/05/08 07:18

private $how_hour = [ 1 => '30' . __('分'), 2 => '1' . __('時間'), 3 => '1' . __('時間') . '30' . __('分'), 4 => '2' . __('時間'), 5 => '2' . __('時間') . '30' . __('分'), 6 => '3' . __('時間'), 7 => '3' . __('時間') . '30' . __('分'), 8 => '4' . __('時間'), 9 => '4' . __('時間') . '30' . __('分'), 10 => '5' . __('時間'), 11 => '5' . __('時間') . '30' . __('分'), 12 => '6' . __('時間'), ]; このような配列もモデルに記載しております。
coba-coba

2017/05/08 07:50

上に追記しました。 直接クラスのプロパティに入れるとPHPのエラーになるので、initialize()などで用意します。
kenkbou

2017/05/08 09:13

ありがとうございます。 public function setHour($id = null) { $hour = $this->how_hour; return $hour[$id]; } initialize()で用意したものを呼び出してみたのですが、nullになってしまうみたいでして、、、何度もすみません。
coba-coba

2017/05/08 10:12

そのsetHour()メソッドはどこに書いていて、どこからどのように使っていますか? 状況が分からないと推測でしか答えられないので、もう少し具体的に書いてくださいね。 [前提] HogesTable.phpとHogesController.phpを使うとします。 setHour()とinitialize()をHogesTable.phpに書いているとします。 [書き方] - 同じテーブル内(HogesTable.php)で使う場合は $this->setHour(4) のように呼び出します。 - コントローラー(HogesController.php)で使う場合は $this->Hoges->setHour(3) のように呼び出します。
kenkbou

2017/05/09 06:43

上記の通りです。 具体的にはHogesTable.phpに記載したsetHourをコントローラーから呼び、 Hoge.phpに記載したsetHourはTemplateから呼び出しております。 どちらもNULLになってしまいます、、、
coba-coba

2017/05/09 08:30

もしよければ、1つずつ確認させてください。 以下の2つの結果を教えてください。 1. HogesTable.phpのsetHour()を次のように修正して、HogesController.phpから呼び出したとき、$idの値が表示されることを確認してください。 ------------------------------------- public function setHour($id = null) { debug( $id ); } ------------------------------------- 2. setHour()を次のように修正して再度呼び出し、求めている時間が取得できることを確認してください。 ------------------------------------- public function setHour($id = null) { debug( $this->how_hour[$id] ); } -------------------------------------
kenkbou

2017/05/09 15:56

1では想定していた値が取得出来ます。 2ではnullになってしまいます。 public function initialize(array $config) { $this->how_hour = [ 1 => '30' . __('分'), 2 => '1' . __('時間'), 3 => '1' . __('時間') . '30' . __('分'), 4 => '2' . __('時間'), 5 => '2' . __('時間') . '30' . __('分'), 6 => '3' . __('時間'), 7 => '3' . __('時間') . '30' . __('分'), 8 => '4' . __('時間'), 9 => '4' . __('時間') . '30' . __('分'), 10 => '5' . __('時間'), 11 => '5' . __('時間') . '30' . __('分'), 12 => '6' . __('時間'), ]; } で定義したものが呼び出せていないみたいなのです。
coba-coba

2017/05/09 16:46

確認ありがとうございます。 更に確認3として、そのinitialize()に「debug($this->how_hour);」を足すと、そのテーブルを利用するページを開いたら配列が表示されますか? public function initialize(array $config) { $this->how_hour = [ 1 => '30' . __('分'), 2 => '1' . __('時間'), 3 => '1' . __('時間') . '30' . __('分'), 4 => '2' . __('時間'), 5 => '2' . __('時間') . '30' . __('分'), 6 => '3' . __('時間'), 7 => '3' . __('時間') . '30' . __('分'), 8 => '4' . __('時間'), 9 => '4' . __('時間') . '30' . __('分'), 10 => '5' . __('時間'), 11 => '5' . __('時間') . '30' . __('分'), 12 => '6' . __('時間'), ]; // これを追加 debug($this->how_hour); }
coba-coba

2017/05/09 17:11

手元の環境では想定通り取得できているので、何か違いがあるはずなのですが・・・。 もしだめなら、setHour()に時間を格納した配列を直接書いてもいいと思います。
kenkbou

2017/05/09 17:19

遅い時間にありがとうございます。どうやらinitialize関数が無視されているみたいです、、、 >> setHour()に時間を格納した配列を直接書いてもいいと思います。 こちらで記述して実現出来ました。本当にありがとうございます。
coba-coba

2017/05/09 17:39

いえ、今日はなかなか眠れず起きていましたので… お手間を取らせてすみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問