activeCollab で日時出力のローカライズ

activeCollab はもともと英語版のロケールしかありませんが,N.S.WORKs さんの日本語化ファイルを使うことで日本語で扱うことができます。

メッセージまわりは日本語になるのですが,日付の出力形式が

Thursday, 2 November

みたくなって切ない。なのでソースを解読して日時の出力をローカライズしてみました。

まず,language/ja_jp.php の後半に

  $this->setDateTimeFormat('Y/m/d H:i');

  $this->setDateFormat('Y/m/d');

  $this->setTimeFormat('H:i');

  if (method_exists($this, 'setDescriptiveDateFormat'))
    $this->setDescriptiveDateFormat('n月j日 (D)');

を付け足します。もともとのファイルは EUC-JP になっていますが,UTF-8 にしてください。

method_exists() してるのは,もともとのローカライザで定義されてないためです。そのファイル(environment/classes/localization/Localization.class.php)のパッチはこちら。

--- environment/classes/localization/Localization.class.php.orig	2006-09-19 02:54:22.000000000 +0900
+++ environment/classes/localization/Localization.class.php	2006-11-02 15:52:07.000000000 +0900
@@ -287,6 +287,17 @@
     } // setDateFormat
     
+    /**
+    * Set descriptive date format value
+    *
+    * @access public
+    * @param string $value
+    * @return null
+    */
+    function setDescriptiveDateFormat($value) {
+      $this->descriptive_date_format = (string) $value;
+    } // setDescriptiveDateFormat
+    
     /**
     * Get time format
     *
     * @access public

日付出力が date() 関数を使っているので曜日が日本語にならないのはご愛敬ということで。

フォーラムの http://www.activecollab.com/forums/post/82/#post82 で言及されているように,たしかにローカライゼーションまわりのコードがイマイチ固まってない感じなので*1いつまで使えるかわかりません。

あと,日付入力フォームの並び順(月・日・年)などはかわりません。application/helpers/form.php の function pick_date_widget() が該当部分なんですが,ローカライズを考えた作りになっていないので。

*1:メッセージまわりはこのままでいけそうですけれど