2005年06月06日 (月)

ReformatDateTime.plugin が英語日付対応に

iBlog の日付、時刻、日時の書式を自由にカスタマイズするための iblogPatcher-1.3.1 のプラグイン ReformatDateTime.plugin をアップデートしました。

アップデートの主旨

システムの日付が英語で表示されるように Mac OS X を設定している場合、iBlog が出力するページの日付も英語になります。もともと ReformatDateTime.plugin は日本語に設定しているときにiBlog が出力するページの日時の書式が英語式であるにも関わらず文字は「月」など日本語が入っているために日本語として成り立っていない不具合に対応する目的でリリースしていました。

このため ReformatDateTime.plugin は元々英語式で日時が書かれている場合に対応していませんでした。しかしながら、システムは英語式で iBlog は日本語式、あるいはブログ毎に変えるというケースも考えられます。このため元が英語式であっても対応できるようにしました。ただし、私自身はシステムの設定を iBlog のためだけに変えるつもりがないので実際には試していません。机上で対応できているだろうと踏んでいるだけで、日本語の書式の設定に悪影響がないことのみを確認しています。

既に使用している方には設定等で変更はありませんが、よい機会なのでこのプラグインの設定方法を説明しておきます。

テンプレート

ReformatDateTime.plugin が対象としている、iBlog が出力する日付や時刻は次のテンプレートタグを通して行われます。

<$EntryPostDate$>
エントリを投稿した日付
<$EntryTimestamp$>
エントリを投稿した時刻
<$PublishDate$>
そのページの発行日時

これらをタグ名を使ったコメントで囲むことで ReformatDateTime.plugin は書式の変換対象だと認識できます。具体的には次のようにします。

<$EntryPostDate$>
<!-- BEGIN EntryPostDate --><$EntryPostDate$><!-- END EntryPostDate -->
<$EntryTimestamp$>
<!-- BEGIN EntryTimestamp --><$EntryTimestamp$><!-- END EntryTimestamp -->
<$PublishDate$>
<!-- BEGIN PublishDate --><$PublishDate$><!-- END PublishDate -->

ブログ定義ファイル

ファイル ReformatDateTime.plugin を所定の場所に保存した上でブログ定義ファイルで ReformatDateTime.plugin の使用を宣言します。これは ACTION > preview > after > onStart の一連の設定の中に次のように記述することで行います。

ReformatDateTime::OnStart(@_);

具体的な挿入位置についてはエントリ「iblogPatcher のブログ定義ファイルテンプレート」を参考にしてください。

書式の指定

デフォルトでは次のような表記になるようになっています。

日付
2005年06月06日 (月)
時刻
14:47
日時
2005-06-06 14:47

以前のバージョンでは 2005.06.06 14:47 としていました。

若干表示を変更しましたが、以前はなどの文字は実体参照を用いていました。というのは iBlog の過渡期に作成したため Shift_JIS のサイトや UTF-8 のサイトが混在していたからです。今は UTF-8 が主流なので実体参照を取りやめ UTF-8 で出力するようにしました。

デフォルトではなく独自に書式を指定したいときはカスタマイズすることができます。ReformatDateTime.plugin を書き換えてしまうのもよいのですが、これですと ReformatDateTime.plugin が更新されたときに一々新しいバージョンのファイルを書き換える必要があるのでブログ定義ファイルで書式を指定するのがお薦めです。上述のプラグインの使用宣言を入れた ACTION > preview > after > onStart の中で次の設定項目を指定します。

$ReformatDateTime::Conf{format}->{time}
時刻の書式 - strftime の書式指定(後述)
$ReformatDateTime::Conf{format}->{date}
日付の書式 - strftime の書式指定(後述)
$ReformatDateTime::Conf{format}->{dateTime}
日時の書式 - strftime の書式指定(後述)
$ReformatDateTime::Conf{wdayJpName}->{date}
日付の中で曜日名を日本語にするかどうか - 0: しない, 1: する
$ReformatDateTime::Conf{wdayJpName}->{dateTime}
日時の中で曜日名を日本語にするかどうか - 0: しない, 1: する
$ReformatDateTime::Conf{meridiemJpName}->{time}
時刻の中で AM/PM を日本語にするかどうか - 0: しない, 1: する
$ReformatDateTime::Conf{meridiemJpName}->{dateTime}
日時の中で AM/PM を日本語にするかどうか - 0: しない, 1: する

これを例えば

$ReformatDateTime::Conf{meridiemJpName}->{dateTime} = 0;
というようにして値を指定します。この例では日時の中で AM/PM を日本語に変換せずに英語のまま使用することを指定しています。

書式の指定のところで出てきた strftime の書式指定について説明します。strftime が何であるかはここでは興味がありませんが、これが用いる書式を指定する文字列を流用しています。ターミナルで man strftime とすると strftime のマニュアルが表示されて書式を指定する文字列についても説明されているのですが、英語なので日本語のマニュアルを参照するのがよいでしょう。

と、いきなりマニュアルを示されても困ると思います。ReformatDateTime.plugin の中でコメントとして例を列挙してあるのですが、ここでも例を列挙してみます。

12 時間制の時刻
$ReformatDateTime::Conf{format}->{time} = '%I:%M %p';
ex) 11:45 PM
タイムゾーン付きの 24 時間制の時刻
$ReformatDateTime::Conf{format}->{time} = '%R JST';
ex) 23:45 JST
英語式の日付
$ReformatDateTime::Conf{format}->{date} = '%a, %e %b %Y';
ex) Wed, 5 May 2004
ISO 8601 形式の日付
$ReformatDateTime::Conf{format}->{date} = '%F';
ex) 2004-05-24
漢字を用いた日時
$ReformatDateTime::Conf{format}->{dateTime} = '%Y'."\xE5\xB9\xB4".'%m'."\xE6\x9C\x88".'%d'."\xE6\x97\xA5".' %H'."\xE6\x99\x82".'%M'."\xE5\x88\x86";
ex) 2004年05月24日 23時45分

余談

しかし、RECENT_ENTRIES_JS.plugin を使用して最近のエントリを表示している方はデフォルトから変更しない方がよいでしょう。というのはこのプラグインは日付や時刻の部分を少し変形させてエントリの前後を見ているからです。本当はこのプラグインを英語対応させようかと思ったのですが、なぜかこっちを英語対応させてしまいました。RECENT_ENTRIES_JS.plugin を英語対応させる事自体は簡単なのですが、色々考えているうちに私の中で考えが膨らんでしまってまだ手を付けていません。というか iblogPatcher のバージョンアップか、新しいプラグインの投入を目論んでいます。

実は iBlog のデータファイルを読み取って CommonLib.js の機能と同じ機能を果たすことができるプラグインを作ってしまいました。「フィードバック」以外は全て JavaScript なしでサイトを運営することも可能です。「フィードバック」は Internet Explorer の変な仕様に対応するために JavaScript が必須なのです。このプラグインを用いるとエントリの日時がカスタマイズに依存せずに取得できます。今まで iBlog が出力するページから読み取っていたことの多くが取得できるのです。でも、例えば「統計情報」のように日々変わっていくものは JavaScript の方が便利です。というのはその度に更新するとなると毎回全部アップロードになってしまうからです。このプラグインをどう用いるのが効果的か色々考え中です。


Posted: 03:28    | Comment | Trackback


以下、類似エントリです。