LoginSignup
14
15

More than 5 years have passed since last update.

PHP 日付ライブラリ Carbonの日本語化&言語ファイル差し替え

Last updated at Posted at 2017-07-31

概要

日付計算が簡単にできるライブラリのCarbon。現在日時と比較して「○分前」みたいなことも標準メソッドが用意されており、超簡単。
とはいえ、デフォルトの言語は英語なので、日本語化するための備忘録です。

環境

PHP 7.1.3
Carbon 1.22.1

やること

  1. 普通に使う(○分前表示)
  2. 日本語化
  3. 言語ファイルを差し替える(これがメイン)

以下、サンプル

普通に使う

echo Carbon::now()->subMinutes(12)->diffForHumans();
#12 minutes ago
echo Carbon::now()->subHours(2)->diffForHumans();
#2 hours ago
echo Carbon::now()->addMinutes(12)->diffForHumans();
#12 minutes from now
echo Carbon::now()->addHours(2)->diffForHumans();
#2 hours from now

日本語化

一行追加するだけ。でもスペースが気にくわない。

# この一行を追加するだけ。
Carbon::setLocale('ja');

echo Carbon::now()->subMinutes(12)->diffForHumans();
#12 分 前
echo Carbon::now()->subHours(2)->diffForHumans();
#2 時間 前
echo Carbon::now()->addMinutes(12)->diffForHumans();
#今から 12 分
echo Carbon::now()->addHours(2)->diffForHumans();
#今から 2 時間

言語ファイルを差し替える

情報が見つからず、ソースを見て試行錯誤したorz
もっと良い方法があったら指摘ください。

// 言語リソース差し替え ここから(LaravelならAppServiceProviderとかで行う)
$translator = new \Symfony\Component\Translation\Translator('ja');
$translator->addLoader('array', new \Symfony\Component\Translation\Loader\ArrayLoader());
// 専用の言語ファイルを用意することを推奨(Laravelなら下のようにやる)
// $date_resource = require resource_path(sprintf('lang/%s/date.php', config('app.locale')));
$date_resource = [
    'year'      => ':count年',
    'month'     => ':countヶ月',
    'week'      => ':count週間',
    'day'       => ':count日',
    'hour'      => ':count時間',
    'minute'    => ':count分',
    'second'    => ':count秒',
    'ago'       => ':time前',
    'from_now'  => '今から:time',
    'after'     => ':time後',
    'before'    => ':time前'
];
$translator->addResource('array', $date_resource, 'ja');
Carbon::setTranslator($translator);
// 言語リソース差し替え ここまで

echo Carbon::now()->subMinutes(12)->diffForHumans();
#12分前
echo Carbon::now()->subHours(2)->diffForHumans();
#2時間前
echo Carbon::now()->addMinutes(12)->diffForHumans();
#今から12分
echo Carbon::now()->addHours(2)->diffForHumans();
#今から2時間

補足

未来時間のdiffForHumans()で「今から2時間」って何だ?「2時間後」にした方が良いのか?と思いつつも使う予定はないのでそのままにした。

以上です。

14
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
15