2014-10-09

Laravelでローカリゼーションするなら「Translation Manager」がすごく便利!(多言語翻訳ファイルも紹介してます)

さて今回はLaravelのローカリゼーションに関する便利なパッケージを発見したので備忘録として使い方+αをお届けしたいと思います。

実際少し前にLaravelを英語と日本語でローカリゼーションする機会があったのですが、この作業が地味に大変なんです。

つまり、英語のファイルと日本語のファイルが(もちろん)別れているため、一回一回キーを追加したり探したりする必要があります。

いつか自分で管理パッケージをつくろうかと思っていたらやはり先に同じことを考えている人がいたようですね。
さすがはLaravelです。^-^


出典:M. Adiputra


最終結論: ローカリゼーションが必要でなくてもバリデーション用にも使えるパッケージでした!


まず今回使わせていただくパッケージの紹介から。

barryvdh/laravel-translation-manager

※この作者は他にも「laravel-debugbar」や「laravel-ide-helper」などの有名なパッケージを作成しているようですね。心から感謝です。m_ _m



では、早速インストールしましょう。

Laravelをインストールしたフォルダ直下にある「composer.json」を開いて以下のように require にパッケージを追加します。

composer.json

"require": {
(その他のパッケージ),
"barryvdh/laravel-translation-manager": "0.1.x"
},


そして、コマンドから `compser update` を実行しましょう。
自動でパッケージがインストールされます。


そして、パッケージを使えるように設定をします。

app/config/app.php

'providers' => array( (その他のパッケージ),  'Barryvdh\TranslationManager\ManagerServiceProvider',
),
※追記

すみません。migrationする作業が抜けていました。T_T
以下を実行してDBに専用テーブルを作成してください。

php artisan migrate --package="barryvdh/laravel-translation-manager"


つぎに通常のパッケージインストールではあまり使わない以下のコマンドを実行してパッケージ内にある config ファイルをLaravel本体へコピーします。

php artisan config:publish barryvdh/laravel-translation-manager

※注: なぜかわかりませんが、私の場合存在するはずの 


vendor/barryvdh/laravel-translation-manger/src/config/
vendor/barryvdh/laravel-translation-manger/src/config/config.php

が見つかりませんでした。
もし同じことが発生していたら configフォルダを作成し、その中にconfig.php をコピペしてください。


そして、 app/routes.php に

Route::group(array('before' => 'auth_admin'), function() {
    Route::controller('translations', 'Barryvdh\TranslationManager\Controller');
});

を追加すると、http://***.com/translations にアクセスできるようになります。


※もし本番環境で表示したくない場合は、App::isLocal() などを使って場合分けをしたほうがいいですね。



使い方

※まだ app/lang/ja を作っていない場合はフォルダを作成しましょう。


まず、画像にある「import groups」をクリックしましょう。すでに「lang」登録されている単語を抽出します。



それが完了したら、ページを再読み込みすれば以下のようにどのファイルを編集するかを選択できるようになりますのでクリックしましょう。


あとは単語一覧が表示されるので個別に編集していくだけです。
(※まだファイル自体には反映されてません次の「ファイルへの反映」をみてください)




ファイルへの反映

ページには「publish translations」ボタンを押すとファイルに反映されると書いてますが実際はできなかった(おそらく権限を変更すればいけるのかな?)のでもうひとつの方法である「コマンドでの反映」をご紹介します。

コマンドでLaravelをインストールしているフォルダへ移動し、

php artisan translation:export ***

を実行しましょう。
言語ファイルに変更が反映されます。


※ ***は .phpをぬいたファイル名。例えば「messages」「validation」です。


はい!
ということで Translation Manager の紹介は終了です。


おまけ

世界各国の翻訳データを集めたファイルが以下のページからダウンロードできます。
もし、サイト内容が日本だけでなく世界に向けたものなら言語ファイルだけでも追加しておいて損はしないかもしれませんね。

https://github.com/caouecs/Laravel4-lang



Thank you barryvdh and caouecs!
You guy's works must save my time when developing websites.:)))

2014-10-01

Laravel の独自パッケージを作成する手順

ここのところ多忙のためブログ投稿をサボってしまっていますが、Laravel(CakePHP)は常に触っていて、知れば知るほどその便利さがよくわかっきている今日このごろです。

さて、そんな多忙な中なのになぜブログ投稿をするのか?というと今はクライアント様の判断待ちで、さらにタイトルにある独自パッケージの作成方法を備忘録として残しておきたかったからです。

以前作成したこがあるのにやることが多くて忘れてしまっていました(汗)
ということで今回はLaravelの独自パッケージの作成法をまとめてみたいと思います。


[最終結論] Laravel 5.0ではもっと楽にできればいいなー^^


では、早速作業を開始しましょう。
前提としまして、パッケージの名前は、

sukohi/hoge

として話をすすめていきます。
これは、「ベンダー名(あなたの名前)/パッケージ名」になります。

では、ターミナルを開いて Laravelがインストールされている場所(artisanのあるフォルダ)まで移動して以下を実行してください。

php artisan workbench sukohi/hoge --resources


実行が完了すると、

laravel
├ app
├ bootstrap
├ public
├ vendor
└ workbench

という形で workbench フォルダが作成されています。
では、この中にある以下のフォルダを開きましょう。

laravel/workbench/sukohi/hoge/src/Sukohi/Hoge/

このフォルダで独自クラスの作成&「HogeServiceProvider.php」の設定をします。

では、独自クラスを作成しましょう。このサンプルでは「Hoge.php」です。
フォルダ構成は以下のようになります。


Sukohi
 └ Hoge
   ├ Hoge.php
   └ HogeServiceProvider.php


そして、このHoge.php 内にご自身でやりたいことができるようプログラムを作成しましょう。
書き方は通常のPHPクラスとまったく同じですが、クラス名とファイル名は同じにする必要があります。また、ネームスペースをいれることにも注意してください。


(Hoge.php)

<?php namespace Sukohi\Hoge;

class Hoge {

    // Something...

}


では、次に「HogeServiceProvider.php」の設定を見ていきましょう。
やることは2つ。
register() と provides() メソッドにそれぞれ決まり文句を追加するだけです。

1.register()

 public function register()
  {
  $this->app['hoge'] = $this->app->share(function($app)
  {
   return new Hoge;
  });
  }

※「hoge」「Hoge」はあなたのパッケージ名に置き換えてください。


2.provides() 

 public function provides()
 {
  return array('hoge');
 }


はい。
これでここの作業は終了です。


では、次に以下のような形でクラスを呼び出せるように Facades を作成しましょう。

Hoge::method();

HogeServiceProvider.phpがあるフォルダに「Facades」というフォルダを作成し、さらにその中に「Hoge.php」を作成してください。
フォルダ構成は以下のようになります。

Sukohi
 └ Hoge
   ├ Facades 
   ├ Hoge.php
   └ HogeServiceProvider.php

そして Hoge.phpの中に以下のプログラムを書き込みましょう。


<?php namespace Sukohi\Hoge\Facades;

use Illuminate\Support\Facades\Facade;

class Hoge extends Facade {

  /**
   * コンポーネントの登録名を取得
   *
   * @return string
   */
  protected static function getFacadeAccessor() { return 'hoge'; }

}

※太字の部分がベンダー名とパッケージ名になります。大文字/小文字に気をつけてください。



では、次に Laravel からこのパッケージを呼び出せるように設定しましょう。
(いつものパッケージを composer からインストールしたときの手順と同じです。^-^)

Laravel/app/config/app.php 

を開いて、配列の providers の最後に「HogeServiceProvider」を登録し、

'providers' => array(

 (他のパッケージ), 
 'Sukohi\Hoge\HogeServiceProvider', 

),


さらに同じファイルにある「エイリアス」も設定します。


'aliases' => array(

 (他のパッケージ), 
  'Hoge' => 'Sukohi\Hoge\Facades\Hoge',

),


はい!
これでパッケージが完成しました。
もしエラーがでるようなら、フォルダの階層がまちがっていないか(←これは私のことです^^)、もしくは composer dump-autoload 、 composer update などをするとうまくいくことがあるようです。

ということで少し複雑でしたが、独自パッケージを作成手順でした。
ちなみに、フリーランスとしてプログラムの著作権をすべて渡してしまう約束の場合、こういったパッケージの開発は私はしません。全部持って行かれるのが悔しいパッケージは後のことを考えると便利ですが作成するのに少し時間がかかるので。(笑)
なので、プロジェクトとは別でゼロからパッケージを作成するようにしています。
でも、これってプロジェクトにとってもマイナスなんだけどなー。。。
この辺みんなはどうしてるんでしょう?

とにかくお疲れ様でした。



[参考ブログ(というかほぼ訳しただけ)]

http://culttt.com/2013/06/24/creating-a-laravel-4-package/

Thank you the author(s) of Culttt.com.
Your tip is really useful!
So I've just followed your twitter. :)))

2014-08-10

Laravelのキャッシュが消えない!

こんにちは。
ちょうど今、珍しく私の住んでいる地域に台風が直撃しているようです。
みなさんもくれぐれもお気をつけ下さいね。

さてさて、今回は数日前にリニューアル公開したインフォブログランキングの作業中に起こった「Laravelのキャッシュが消えない現象」についてご紹介しようと思います。

(はい。最近Laravel漬けになっています。知れば知るほど「すごいなー」とつぶやいています^^)





[最終結論: バグではないけど、別の仕様を追加してほしい]


まず、私に起こった問題は以下のようなものでした。


日付が変わると新しいデータをDBから取得して、それをまたキャッシュとして保存する。

↓↓↓

でもキャッシュが削除されず同じデータのまま。


つまり、その日ごとにデータを表示したかったのでその都度DBにアクセスをせずキャッシュを利用した、ということです。

実際のプログラムは以下。

if(Cache::has('key')) {

    return Cache::get('key');

}

// DBからデータを取得

$dt = Carbon::tomorrow();    // 明日の日付を取得
Cache::put('key', $value, $dt);
return $value;


前回紹介したCarbonを使っています。
※現在はより便利なCache::remember() を使っています。


一見問題なさそうなのですが、、、?
実はこれではキャッシュが消えなくなる(可能性を持っている)のです。


なぜなら、元々Laravelのキャッシュの有効期限はタイムスタンプではなく、「分」を使っているから

なのです。

つまり、上の例でいうと、

1.Laravelは、$dt を使って明日が始まる時間まで何分かを取得。
2.その分数を有効期限とするキャッシュを作成

???

やっぱり問題ないのでは、、、?

これが大有りなんです。


なぜなら、Carbon(dateTime)から分を取得するとき intval() で数字が切り下げになってしまう

のです。

そう!
つまり、キャッシュはまだ日付が変わっていないのに有効期限が切れて削除され、そしてその当日のデータ(すでに保存されているものと同じデータ)をまた新しく保存してしまうというものです。

インフォブログランキングは手前味噌ですが、なかなかページビューが多いサイトなのでこの僅かな時間に新しいアクセスがあり、キャッシュがうまく更新されていないという状況でした。


???

でも、新しいキャッシュができたとしてもまた、明日までの有効期限だからすぐに新しいデータに置き換わるのでは???


実は、これもそうでもないんです。

結論からいうと、

分数がゼロの時はキャッシュは永遠に保存されてしまう

からなのです。
つまり、分がintval()で切り下げられてキャッシュを保存し、そのキャッシュが削除ときには残り時間は予定の時間まで1分未満になります。

その1分未満はintval() でゼロに変換されてキャッシュが消えない状態になってしまうということですね。

ということで、インフォブログランキングをよろしく Laravelでキャッシュを使用する時にはお気をつけ下さい。^-^

※おそらく間違いはないと思っていますが、自信がない部分もありますのでこの記事に修正が必要でしたらぜひ教えてください。よろしくお願いいたします。m_ _m

ではでは〜。




2014-08-07

PHPで日付を扱うなら Carbonライブラリが便利すぎる!!

個人的にまた災難が起こってしまった後、はじめての投稿になります。
みなさんもお体にはくれぐれもお気をつけ下さい(汗)

さて、今回はPHPの日付に関する記事になります。
というのも、最近ハマっているPHPフレームワーク「Laravel 4」には Carbonが標準搭載されているようで、これを使ったらもう昔には戻れない!と思ったのでぜひ紹介&備忘録としてその使い方を公開したいと思います。




[最終結論] 直感的に使えるのでとても便利です!なんならLaravel以外での開発でも使っていこうと思いました。


では、使い方に行く前に注意点を少し。
Laravel での使用を想定しているので、基本的に static な使い方で書いてます。
必要に応じて new Carbon(); してインスタンスを作ってくださいね。
あと、PHPは5.3以上必要です。

また、よく使うだろうというものだけで、全てのメソッドは網羅していません。詳しくはCarbon(英語) を確認してください。


1.基本的な使い方。


・今の時間は?

 Carbon::now();

・今日が始まる時間を知りたい

 Carbon::today(); // (例)2014-08-07 00:00:00

・じゃあ、昨日は?

 Carbon::yesterday(); // (例)2014-08-06 00:00:00

・明日も教えて。

 Carbon::tomorrow(); // (例) 2014-08-08 00:00:00

・タイムスタンプがほしいんだけど?

 Carbon::today()->timestamp; // (例) 1407337200



2.足したり引いたりする使い方。


・今からちょうど一日後/前の時間は?

 Carbon::now()->addDay();
 Carbon::now()->subDay();

・3日後/前

 Carbon::now()->addDays(3);
 Carbon::now()->subDays(3);

 ※その他にも

 秒: second(s)
 分: minute(s)
 時間: hour(s)
 年: year(s)
 月: month(s)

 でも同様のメソッドが用意されています。

 例) addSecond(), subYears(5)


3.文字列から指定する使い方。

・次の水曜日は?
 
 new Carbon('next wednesday');

・今週の木曜日は?

 new Carbon('this thursday');

 ※この辺は英語の知識が必要になりますね。昔学校で習ったはずですが、、、(笑)


4.各種データを取得する使いかた。

 $dt = Carbon::now();
   
 $dt->year;
 $dt->month;
 $dt->day;
 $dt->hour;
 $dt->minute;
 $dt->second;
 $dt->daysInMonth;

 ※いつものごとく、月($dt->month)の数字はゼロから始まるので+1が現在の月のようです。
 ※逆に上記に数字を代入することで時間をセットすることもできるようです。便利!


5.多分必要になった時にとても感謝するだろう使い方。


・年齢

 Carbon::createFromDate(1980, 1, 1)->age;

・週末?

 if (Carbon::now()->isWeekend()) {

  echo 'パーティ!'; // 本家のサンプルにこう有ります(笑)

 }

・もう過ぎた?まだ?

 $dt = Carbon::now()->subDay();
 
 if ($dt->isPast()) {

  echo 'もう過ぎた!';

 }


 $dt = Carbon::now()->addDay();
 
 if ($dt->isFuture()) {

  echo 'まだ!';

 }

・タイムゾーンが知りたい

 Carbon::now()->timezoneName;


6.アロー演算子「->」の使い方。

 $dt = Carbon::now();
   
 echo $dt->year(1975)
     ->month(5)
     ->day(21)
     ->hour(22)
     ->minute(32)
     ->second(5);

 ※Laravelのように一気にかけるのはコードがスッキリして好きです。^^


と、ざっとこんな感じですね。
あとは日付の比較やBetween を使った便利なものもありますが、すこし複雑になるので気になった方は本家のCarbonのGitHubページをご覧ください。

それにしても技術は確実に進歩していっています。
より簡単に高度なプログラムが、しかも直感的に使えるようになってきていますね。

なお、Carbon はMITライセンスなので、開発者にはホントにありがたいです。
Brian Nesbittさん、ありがとうございます。


ということで以上です。
お疲れ様でした!


2014-07-03

AWS で"eb init" せず push するための設定

最近は新しい技術に触れる機会が多いのでとても刺激的な日常を過ごしています。^-^
ここのところ、新しいものをあまり勉強する機会がなかったのですが、自分のもっているスキルがいかに古くなってしまっているかを実感させられています。

(しかも嬉しいことに新しいことを学ぶ楽しさを思い出させてくれました。)

・・・ということで今回はAWS(Amazon Web Services) のGit を使ったデプロイシステム「EB」で、すでに作成されたレポジトリに後からアクセスする方法です。





[最終結論]: amazon が提供する zipファイルの中にしっかりと専用のファイルが入っていました。(汗)



では、まず前提としてなぜ "eb init" を使わないか、というと今回の案件の前任者がすでに作成していたので、新しくリポジトリを作成する必要がなかったからです。

もし、まだリポジトリを作成してない方はこのページは全く関係ないので注意してください。そして、もちろん git と eb はインストール済みという前提ですので、こちらも注意してくださいね。



では、順を追って実際の作業を説明します。


1.まず、AWS Elastic Beanstalk Command Line Tool からEBのパッケージをダウンロードして解凍しておきましょう。


2.ターミナル/コマンドプロンプト(以下のようなやつです)を開いて push したいプロジェクトまで移動しましょう。



例) cd /move/to/your/path


3.以下のコマンドを実行しましょう。


/(EBパッケージを解凍したフォルダ)/AWSDevTools/(Linux か Windows。←環境に合わせて選択)/AWSDevTools-RepositorySetup.sh

※Ubuntuなどの場合、もしかすると sudo とかが必要かも。


4.以下のコマンドを実行

git aws.config


5.以下の情報を入力

 ・パブリックキー
 ・シークレットキー
 ・リージョン(東京とか)
 ・AWS(EB)内のアプリケーションの名前
 ・環境

これで成功すれば、その場所で


git aws.push


とコマンドを打てば自動でデプロイしてくれます。
さらに、本番環境とテスト環境をもっている場合、


git aws.push --environmentの名前


とすると該当する環境の違う方へもデプロイができるそうです。(、、、が私は一度も試しておりません。^^;)


[参考ページ(というよりほぼ日本語訳にして丸写し。。)]:




Dan Hoerst, I appreciate you and your tip.
I could solve my problem earlier than I expected because of you!! :)


最後に、昔住んでたバンクーバーホテルの裏にあった図書館です。帰りたい、、、(笑)



2014-06-26

PHP + JavaScript(jQuery) でチャットするComet を作ったみた【ダウンロード可】

最近、おかげさまでホントに色々な案件に携わらせてもらっていて開発者としてまだまだレベルアップを感じている今日このごろです。^-^

ということで、今回は前々から気になっていた 擬似的なComet によるチャットシステムが必要になり、この部分は今後もきっと必要になる機会が多いんじゃないかと思いましたので、PHPとJSをパッケージ化して GitHub にアップしてみました。



使い方は README.md をご覧ください。(書き方はむちゃくちゃですが^^;)

[GitHub(Comet)]: https://github.com/SUKOHI/Comet/tree/master


[参考URL]: http://rewish.jp/blog/tech/php_with_jquery_comet

今回↑のページにはお世話になりました。ありがとうございます。 m_ _m


[追記]: 実際にテストページを作ってみました。





「 こんな短いブログ記事初めて(笑) 」

2014-06-10

Grunt が「Warning: watch ENOSPC」と警告を出した時の対処

現在、とても優秀な前任者から引き継いだ案件にとりかかっています。
この案件の中で彼がCSSやJavaScript の結合や軽量化をしてくれる「Grunt」と呼ばれる技術を使っていたので私もトライしてみたのですが、きちんとインストールしたにも関わらず「Warning: watch ENOSPC」という警告を多発していたので対処法を探ってみました。




[最終結論] ファイルを監視しておける数には限界が設けられているので、この数が足りなくなると警告が出される。


では、まずは私のPC環境から。

OS: Ubuntu 14.04
Grunt: 0.4.5

[エラーが出た状況] Grunt watch を使ってファイルを監視しようとすると以下のように毎回表示されていました。



少し Google で探ってみると以下のページにそのものズバリの回答と対処法が説明されていました。



これを読む限り、ユーザーが監視しておけるファイル数には限界が設けられていて、例えばDropBoxなどを利用しているとこの初期値を使い果たしてしまう。
そのためGruntがエラーを返していた、ということらしいです。


では、どのようにすればこの問題に対処できるか、というと・・・?


コマンドラインで、


echo fs.inotify.max_user_watches=100000 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p


を実行すればOKです。

※ちなにみ参照ページとは違い100,000という数に変更しています。


この命令は先ほど説明したファイル監視できる数を増やす命令文になります。
これを実行してから「Grunt watch」をすると、、、?




はい!うまく起動されてファイルが変更されるのを待ってくれています。


ということで今回は短い記事でしたが、私の場合はDropBoxがその原因になるという思いがけないものでしたので今回のTipをご紹介しました。

お疲れ様でした。m_ _m



Thanks, KDS!
Your tip helped me at once!

2014-06-01

Ubuntu 14.04 で再生されてる音を録音する方法

もうかれこれWindows→UbuntuへメインOSを変更して10ヶ月ほどが経ち、正直ほぼ何の問題もない今日このごろです。

そして、今回は以前windowsでもやったことがある「PC内で再生されている音を録音する」というのをUbuntuでもやってみたくなり、挑戦したところあっさりと実現できましたのでここに備忘録としてその方法を残したいと思います。




[最終結論] Audacity をインストールすれば後は設定だけでOK。


まず録音をするソフトウェアをインストールしましょう。
今回はターミナルを使わず簡単にインストールできる「Ubuntuソフトウェアセンター」を使います。

検索ボックスの中に「Audacity」と入力して検索すれば以下のようなマークのソフトウェアが出てくるのでそれをインストールしてください。



インストールが完了したらこのAudacityを開きましょう。

そして、音声の調整ができる pulseaudio というものがすでにインストールされているはずですので、これも起動してください。
(もしインストールされていなければ、Audacityと同様にUbuntuソフトウェアセンターからインストールできます。)

では、以下のようにAudacityの録音ボタンをクリックして録音を開始します。




次に、pulseaudio の方で以下のように、「録音」タブの中にある「ALSACapture から」の部分を

Monitor of 内部オーディオアナログステレオ

へ変更します。
この設定でPC内で再生されている音を録音することができます。

※なので、録音が終わったら元に戻しておくほうがいいと思います。試してませんが、おそらくこの設定のままでスカイプとかができなくなってしまうので。




さぁ、これで準備は万端です。
後はつないだ電子ピアノなどで音を鳴らせば Audacity 内で録音されていきます。

※ちなみにパソコンのスペックや環境によっては録音の遅延が起こり、なんともぼやけた音が録音されることがあります。その際は他のアプリケーションを閉じるなど工夫してみてください。

以上です。
おそらく他にもいろいろな録音設定があると思うのですが、今回のケースでは何の問題もなかったのでもし不具合が起こったら、また追記したいと思います。


ではでは。
最後に僕の中で一番天国に近い場所、バンクーバーの写真をご覧ください。^-^


2014-05-14

Laravel 4 のパスワード・リマインダーのメール件名を追加&日本語化

前回の記事に引き続き人気上昇中のPHPフレームワーク「Laravel4」について書きます。
というのも、このLaravelがホントにいたれりつくせりで開発者として感動させられるからです。

特にページネーションはホントに何もかもやってくれますし、データベースのAND、OR検索などもグループ化することで複雑なものさえも簡単に実現してくれます。

ただ、だからこそ最近見たネット記事で「プログラムさえ将来機械化してしまうから職がなくなるかも」という話題に信ぴょう性を感じてしまいました。。

ま、気を取り直して、タイトルの「パスワード・リマインダーのメール件名を追加&日本語化」をご覧ください。^-^



[結論] パスワード・リマインダーの件名はデフォルトでは空白なので改造が必要。メール内容の日本語化は簡単です。


まず、基本的なパスワード・リマインダーの作成は『パスワードリマインダーとリセット』 で完了させておいてください。

では先にパスワード・リマインダーに件名を追加する方法を紹介しましょう。


1.Laravel4のパスワード・リマインダーにメール件名をセット


先ほどのリンク先の作業を済ませると、

app/controllers/RemindersController.php


というコントローラーファイルがあるので、これを開きましょう。
そして、中ほどにある「postRemind」を探します。

デフォルトでは、以下のようになっています。


public function postRemind()
{
 switch ($response = Password::remind(Input::only('email')))
 {
  case Password::INVALID_USER:
   return Redirect::back()->with('error', Lang::get($response));

  case Password::REMINDER_SENT:
   return Redirect::back()->with('status', Lang::get($response));
 }
}


ここを以下のように少しだけ改造しましょう。↓↓↓


public function postRemind()
{
 $response = Password::remind(Input::only('email'), function($message){
  
  $message->subject(Lang::get('messages.password_reminder'));
  
 });
 
 switch ($response)
 {
  case Password::INVALID_USER:
   return Redirect::back()->with('error', Lang::get($response));

  case Password::REMINDER_SENT:
   return Redirect::back()->with('status', Lang::get($response));
 }
}



簡単に言うと、$response の中にfunction を作ってその中に $message->subject() を作るだけです。

※ちなみに、Lang::get('messages.password_reminder') はローカリゼーション用なので、日本語だけでいい方は直接「パスワードのリセット: (サイトタイトル)」など件名を書き込んでください。 

はい!
以上で件名の追加は完了です。



では、次にメール本文の日本語化をしましょう。

いたれりつくせりのLaravel4ですが、ここはまだローカリゼーション対応してくれていないようです。


2.Laravel4 のパスワード・リマインダー:メール本文の日本語化


こちらはホントに簡単で、

app/views/emails/auth/reminder.blade.php


の中にある、

To reset your password, complete this form:


の部分を日本語に変更するだけでOKです。
「パスワードをリセットするためにフォームを完成させてください。」などの日本語に変更しましょう。

※もちろんローカリゼーションする場合は、


Lang::get('messages.******'); 


という具合に変更します。


ちなみに、、、


app/config/mail.php

の中にgmail の情報を書き込んでおくと、ローカル環境からでも gmailから送信することができます。
これ、すごく便利ですね。
個人的に、今後はサーバー内のメールはあまり使わなくなるかもしれません。
(でも、開発で誤送信メールには気をつけなければ!!)

ということで、設定については『Laravel4、メールの送信』がとてもわかりやすいです。^-^

以上になります。
お疲れ様でした。^^



 Hirohisa Kawaseさん、いつも役立つLaravel情報ありがとうございます!

And also thank you, satie. Your tips helped me!!

[Solved] Password reminder without subject



2014-05-10

Laravel4 に reCAPTCHA を設置する方法

今現在、業務向けにAndroidアプリを作成しているのですが、機能的にサーバーとの連携が必要なため、以前から気になっていたPHPフレームワーク「Laravel4」を使ってページを作成することにしました。

Laravel4は最近特に海外で人気なようですし、前々から「良い良い」と聞いていたので、今後のために勉強をはじめましたがやはり完全に使いこなすまでには時間がかかりそうですね。

・・・ということで、自分自身のためにも今回の記事を投稿します。

(追記)どうやら reCAPTCHAは仕様が変わったらしくこの方法ではうまく行かない場合があるようです。そのため、以下のようなパッケージを利用することをおすすめします。

Laravel 4: https://github.com/mewebstudio/captcha/tree/master-l4
Laravel 5: https://github.com/mewebstudio/captcha




[最終結論] 公開されているプラグイン本家の設置方法をみただけではうまくいきませんでした。(汗)

まずは環境の方から。

OS: Ubuntu 14.04
PHP: 5.5.9
Laravel: 4.1.28
reCAPTCHA: publicキーとprivateキーを取得しておく。

そして、laravelに設置するプラグインは「greggilbert/recaptcha」です。


では、早速作業に入りましょう!



1.プラグインの情報を追加する


まずpublicフォルダの中にある「composer.json」を開いて、require の中に

"greggilbert/recaptcha": "dev-master"

を追加。




そして、app/config/app.phpを開いて、「providers」の中に

Greggilbert\Recaptcha\RecaptchaServiceProvider

を追加します。


2.composerを使ってインストール


ターミナルを開いて、laravelをインストールしたフォルダへ移動し、

composer update

を実行しましょう。


成功すれば、上のような画面になります。


3.reCAPTCHAの情報を追加

※追記

すみません。今見なおしたら、以下のコマンドを実行する手順が抜けていました。
ホントにごめんなさい。m_ _m
php artisan config:publish greggilbert/recaptcha


app/config/packagesにファイルが作成されているので、

app/config/packages/greggilbert/recaptcha/config.php

を開きましょう。
この中に以下のように、それぞれ public_key と private_key を設定する部分があるので、ここにreCaptchaで事前に取得したパスワードを書き込みます。




はい。以上でプラグインを使う準備は完了です。



4.ビュー&バリデートに設置

まずビューにreCAPTCHAを表示するためにコントローラー内で、

$this->layout->content = View::make('home.home, array(
    recaptcha' => Form::captcha()
));

を追加。そして、ビューの中で、

<?=$recaptcha; ?>

とします。

※追記

コントローラで作成しなくても、直接 View の中で以下のように利用することもできます。

{{ Form::captcha() }}

これで以下のような画像認証が表示されます。



あとは以下のように通常通りバリデートのルールにプラグインの情報を追加してあげれば完了です。(reCAPTCHA以外のバリデートが必要な場合は適宜追加してくださいね。)


$validator = Validator::make(
array(
'recaptcha_response_field' => Input::get('recaptcha_response_field')
),
array(
'recaptcha_response_field' => 'required|recaptcha'
)
);

if($validator->fails()) {

// 認証失敗 ;_;

}


はい!
これですべて完了です。

それにしても amazon で laravel4の本を探してみましたがまだ日本語板のものってないんですね。
そのうち 海外版kindle本を買う必要が出てくるかも、と思いました。
(もしかすると今はプログラムの本とかは売れないから出さないのかな・・・?)





Greg Gilbert, thank you from my heart!
Your plug-in is really useful.:)))

2014-05-02

左右にスライドして実行するAndroid-Bootstrap 拡張ボタンを作ってみた。(ダウンロード可)

前回の記事でも書きましたが、私は今 Android-Bootstrap にハマっています。
とても便利なので。(^-^)v

ということで今回は前回に引き続き Android-Bootstrap を拡張したスライドボタンをここで公開したいと思います。




とはいえ、作業はほぼ前回と同じなので簡単に説明します。


[準備編]

1.まずGitHub からBootstrapSlideButtonをダウンロードし解凍してください。

2.Android-Bootstrap の「src」の中に「com.sukohi.lib」というパッケージフォルダを作り、BootstrapSlideButton.javaをコピー(もちろん移動でもOK)

3.次に「layout」フォルダの中に、bootstrap_slide_button.xml をコピー。

4.最後に「values」の中にattrs.xml をコピーして上書きする。


はい。
以上で準備は完了です。


[実行編]

では、実際に使って見ましょう。

使いたいレイアウトのxmlの中で、

    <com.sukohi.lib.BootstrapSlideButton
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        bootstrap:bsb_type="success"
        bootstrap:bsb_slide_mode="both"
        bootstrap:bsb_right_text="Right Text"
        bootstrap:bsb_center_text="Center Text"
        bootstrap:bsb_left_text="Left Text"
        bootstrap:bsb_text_size="16"
        bootstrap:bsb_right_icon="fa-floppy-o"
        bootstrap:bsb_left_icon="fa-times-circle-o"
        bootstrap:bsb_restorable="true"
        bootstrap:bsb_padding="10"
        bootstrap:bsb_padding_top="10"
        bootstrap:bsb_padding_right="10"
        bootstrap:bsb_padding_bottom="10"
        bootstrap:bsb_padding_left="10" />

こんな感じでタグを配置します。
(※ネームスペースとして xmlns:bootstrap="http://schemas.android.com/apk/res-auto" を忘れずに!)

プロパティの意味は以下です。

bootstrap:bsb_type ・・・ ブートストラップの色タイプ。「Default」「Primary」「Info」「Success Warning」「Danger」「Inverse」の7つ。

bootstrap:bsb_slide_mode ・・・ 右のみ、左のみ、両方にスライド可能かを決める。パラメータは「right」「left」「both」

bootstrap:bsb_right_text ・・・ 右側のテキスト

bootstrap:bsb_center_text ・・・ 中央のテキスト

bootstrap:bsb_left_text ・・・ 左側のテキスト

bootstrap:bsb_text_size ・・・ テキストのサイズ

bootstrap:bsb_right_icon ・・・ 右側のアイコン(fa-****という形。Android-Bootstrapと同じ)

bootstrap:bsb_left_icon ・・・ 左側のアイコン

bootstrap:bsb_restorable ・・・ スライドさせたあとも元に戻せるかどうか

bootstrap:bsb_padding ・・・ padding。これを使うと top, right, bottom, left を省略可。

bootstrap:bsb_padding_top
bootstrap:bsb_padding_right
bootstrap:bsb_padding_bottom
bootstrap:bsb_padding_left ・・・ 個別のpadding。


※コード内での使い方は「BootstrapSlideButton.java」の中にある「Example」を参照してください。


ちなみに今回のボタンは本日アップデートした『HTBニュース』で使われています。
ぜひ参考にしてみてくださいね。

ちなみに、このスライドボタンだけでなくチェックボックスやCalloutなどもGitHubで公開しています。もしもう少し数が多くなってきたら「Android-Bootstrap ○○」みたいな形でひとまとめにして公開したいと思います。
(・・・とはいえ、本家のBootstrap とは全く関係のないコンポーネントもありますけどね^^;)

お疲れ様でした。


2014-04-17

Stackicons もAndroid-Bootstrap で使えるようにしてみました。(ダウンロード可)

以前、「デザインが出来ないエンジニアのAndroid-Bootstrap利用方法」という記事を読んで以来 Android開発でも Bootstrap を活用しています。

なんといっても Font-Awesome の多様なアイコンが簡単に利用できるとあっていつも助けられているのですが、今回は Font-Awesome にはないアイコンが使いたくなったため、この「Android-Bootstrap」を拡張して「Stackicons」でも利用できるようにしてみましたのでGitHubにて公開したいと思います。

(※拡張、と言ってもほぼ全てAndroid-Bootstrap からのコピーですが。。^^)




[作業手順(3ステップ)]

手順としては Android-Bootstrap の FontAwesomeText とほとんど同じです。


1.Stackicons からファイルをダウンロードし、中に入っている「Stackicons-Social.ttf」をStackicons を使いたいプロジェクト内にある assets にコピーします。



2.Android-Bootstrap-Stackicons(GitHub) からZIPファイルをダウンロード&解凍。今度は AndroidBootstrap の中に「Stackicons.java」と「StackiconsText.java」を以下のように設置。



3.後は、以下のように xml にアイコン名を記述すればOKです。

<com.beardedhen.androidbootstrap.StackiconsText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18sp"
    android:textColor="#000000"
    bootstrap:fa_icon="st-icon-amazon" />


※xmlns:bootstrap="http://schemas.android.com/apk/res-auto" の記述を忘れないでくださいね。


できました!



ちなみに上記の一覧は、ZIPファイル内に入っている 「MainActivity.java」と「activity_main.xml」を使えば見ることができます。

お疲れ様でした。




Parker Bennett, Bearded Hen and Dave Gandy, I appreciate you guys!!!

2014-03-05

GenymotionをUbuntu13.10にインストールする方法

今更ながらですが、高速Androidエミュレータの『Genymotion』をUbuntu13.10 にインストールしてみました。
前々から良いとは聞いてたのですが、通常のエミュレータでもそれほど遅くなかったのでずっとスルーしてきましたが、すこし時間ができたのでこの際チャレンジしてみました。

作業的には多少ありますが、これがまた高速です。
起動も高速、動作も高速。
新幹線を使わず飛行機で東京へ行った時のことを思い出しました。



[最終結論] Genymotion はホントに高速で動きます。インストール作業は多少ありますが、やる価値はありますよ!


では、インストールですが、多少作業することがあるので以下の3つのブロックに分けて説明します。

1.Virtualbox のインストール
2.Genymotion のインストール
3.エミュレータの使い方


〜 作業フォルダの作成 

作業にはいる前に、

/home/{あなたのユーザー名}/virtualbox

というフォルダを作っておいてください。
今回の作業でダウンロードするファイルは全てここに保存してください。

では、作業の開始です


第1部 〜 Virtualbox のインストール 

では、まずターミナル(端末)を開いてください。
そして、

sudo gedit /etc/apt/sources.list

でファイルをオープンしましょう。
そして、最後の行に

deb http://download.virtualbox.org/virtualbox/debian saucy contrib

と書いて保存&終了します。

次にpublicキーをダウンロードです。
はじめに作成した「virtualbox」フォルダへ移動しましょう。

cd /home/{あなたのユーザー名}/virtualbox

そして、

wget http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc

で、ファイルをダウンロードします。
で、virtualboxのインストールです。

sudo apt-get update
と、
sudo apt-get install virtualbox-4.3

でインストールしてください。
これで第1部は終了です。


第2部 〜 Genymotion のインストール 

では、次にGenymotionです。
まず以下のURLからユーザー登録しましょう。



上からユーザー名、メールアドレス、パスワード、パスワード(確認)、そして最後が利用規約に同意です。
送信が完了したら、入力したメールアドレスの中にアクティベーションコードが書かれたリンクがありますので、以下を参考にしてそれをクリックしてください。



はい、これでユーザー登録が完了しました。
では、次にGenymotion のダウンロードです。
以下のダウンロードページからUbuntu用ファイルをvirtualboxフォルダへ保存しましょう。


※ファイルはご自身のパソコンのあった方を選んでください。


では、実際にGenymotionのインストールをしていきましょう。
ターミナルに戻って、virtualboxフォルダへ移動します。
(そのままの人は必要ありません。)

cd /home/{あなたのユーザー名}/virtualbox

そして、ダウンロードしたファイルに対して以下のコマンドを実行します。
(ファイル名が違っている場合がありますので注意してください。)

chmod +x genymotion-2.1.1_x86.bin

と、
./genymotion-2.1.1_x86.bin


はい!これでGenymotionのインストールが完了です。
第2部は終了になります。


第3部 〜 エミュレータの使い方 

では、最後にGenymotionの起動と設定の仕方を紹介します。
ターミナルで、

cd /home/{あなたのユーザー名}/virtualbox/genymotion

でGenymotionのフォルダへ移動して、

./genymotion

で、Genymotionを起動します。
では次に動かしたい機種を設定しましょう。


右下にある「Connect」をクリックするとGenymotionのログイン情報を入力するエリアが表示されるので、そこにユーザ名とパスワードを入力し、「Connect」をクリックしてください。

すると、以下のように機種のリストが出てきますので、好きなものを選んで「Next」をクリック。
(私の場合はNexus 7 のAPIレベル19にしました。^^)


ダウンロードには少し時間がかかるのでしばらく待ちましょう。


はい!完了しました。


あとは、PlayボタンをクリックするだけでOKです。


うまく起動しました!


さらに、eclipseのDDMSを確認するときちんとデバイスとして認識されています。



後は、ご自身が作業しているAndroidアプリをeclipseから起動してGenymotionがいかに高速化を実感してみてください。
お疲れ様でした。


[参考ページ]:
Install GenyMotion in Linux/ubuntu 13.04

Your article helped me a lot.
Thank you, Linuxicle!!:)))