2004年04月14日 (水)

iBlog 1.3.6 のチグハグな日本語の扱い

ご存じのとおり iBlog 1.3.6 がリリースされました。1.3.5 正式版から幾つかのβ版を通して入れ込まれた各種変更をまとめたのが主な変更点です。この中で特筆すべきなのは UTF-8 を出力するようになったことです。しかし、扱いがあまりにも中途半端です。このため、iblogPatcher のプラグイン達を少し変更しただけではきちんと日本語化することができない状態になってしまいました。

以下にその状態を説明します。どなたか英語が得意な方は是非 iBlog の開発元へお伝え下さい。恐らく lifli Software ではマルチバイトコードを使う所謂 CJK の環境下で十分なテストをする能力を備えていません。このために 1.3.6 の状態が以下に中途半端かに気付くことができないものと思われます。シェアウェアですから個人に近い状態で開発しているのだと思います。だとしたら当然と言えば当然です。我々が指摘&説明しないと埒があかないでしょう。

主な変更点

以下に記述するのは、iBlog 1.3.6 の状態で日本語化を試みてそれがすぐにはできないことを悟り途中でやめるまでに確認したものです。ハイパーリンクや画像に対する変更点を検証する以前に諦めたのでそれらは含まれていません。(それだけ根本的に駄目なバージョンだということです。)

改善点

  • blog の説明の文字化けは解消
  • 本文は UTF-8 で出力
  • ナビゲーション項目も UTF-8 で出力
  • カテゴリイメージに alt 属性(値は空)が付いた
  • RSS は最初から UTF-8 で出力される

改悪点もしくは未解消点

  • 日本語の blog 名は文字化けする(未解消)
  • 日本語のカテゴリ名も文字化けする(未解消)
  • カテゴリイメージに border 属性がない
    a タグで囲っているときに不都合です。想定していなかったと言うことですね。これは許す。
  • CommonLib.js がデフォルトに戻される
    getFeebackLink とスペルミスをしていた関数名が getFeedbackLink に直された。一見改良点のようですがユーザがカスタマイズしている可能性を無視しています。
  • FeedPage.txt が置き換えられる
    エンコード指定は最初から UTF-8 になっている。これも一見改良点のようですがユーザがカスタマイズしている可能性を無視しています。
  • blog の説明の中にある HTML の予約文字 & < " > が実体参照化されない。
    このため & < " > のいずれかを含んだ説明文を書いたときに、XHTML や RSS に致命的な文法エラーを入れる可能性があります。
  • CommonLib.js(テンプレート) に UTF-8 で日本語を書いておくと変な変換がところどころ入れられて CommonLib.js が壊れる。
    Shift_JIS で書いておけば大丈夫。
  • テンプレートに UTF-8 で日本語を書いておくと変な変換がされて文字化けする。

国際化における問題点解説

エントリの内容やナビゲーション項目、blog の説明は期待どおりに UTF-8 化されました。引き続き blog 名、カテゴリ名は以前と同じようにラテン系の文字コードとして実体参照化されるため、全ての文字の変換テーブルを用いないと正しい文字コードに戻すことができません。ここまでは OK です。既に解決させた問題点ですから。

しかし、CommonLib.js やテンプレートセットの中のファイルのようなテンプレートファイルに含まれる日本語に UTF-8 を用いた場合、テンプレートファイルを適用してプレビューページを生成するときに文字化けを起こします。つまり、勝手に何らかの変換が入ってしまうのです。一方で驚くべきことに Shift_JIS を用いた場合はこの勝手な変換が入らずにそのまま適用されます。したがって、日本語を含んだテンプレートを作成するときは Shift_JIS で書くということになります。実際 iBlog の機能を用いてテンプレートセットのテンプレートファイルを変更するときは Shift_JIS が用いられるようです。

しかし、上述のとおりエントリの内容その他は UTF-8 で出力されます。したがって、一つのファイルの中に Shift_JIS の部分と UTF-8 の部分が同居することになります。

これによりそのファイルの実際のエンコードが統一されないため、ブラウザで参照した場合、どうやっても文字化けを含んでしまいます。

他の問題点

blog の説明の中に & < " > が含まれていてもそれが実体参照に変換されないことは既に述べました。これは RSS Feed の中においては channel の description 要素の中にあるので、機械的に抽出して変換が可能です。

しかし Homepage.txt から生成されるプレビュー時の index.html の中では別段何にも囲まれていないので識別することができません。このため補正が非常に難しくなっています。

また、RSS Feed においても常に変換が可能というわけではありません。もし </description> という文字列が説明に含まれていたら、機械的に抽出することができないからです。

iBlog がとるべき方向

これは明らかです。各種テンプレートファイルに変なコード変換をするようなことはやめ <$hogehoge$> あるいは [$hogehoge$] という形の変数部分の置き換えだけをやってくれればそれでいいのです。なぜそうならなかったかは幾つか理由を想像できますが憶測に過ぎないので、ここでは控えておきます。

また、blog の説明の & < " > が実体参照にならないのは、実体参照に変換してくれればよく、これはとても簡単な処理です。恐らく

現象を改善するために iblogPatcher がとれる道

現在二つの方針をアイデアとして持っています。どちらも一長一短があり、迷っています。いずれにしろ、実は 1.3.6 を試している余裕等ない中、無理をして試して対応しようと努力したような状態なのですぐには実施できません。

方針1

一つ目は、テンプレートファイルに用いる日本語を全て実体参照にすることです。これを手作業で行うのはかなり面倒ですから、ファイルに含まれる日本語を実体参照にするプログラムを提供する必要があります。

そのプログラムで変換する手間がかかるのもちょっと嫌ですが、それ以上に iBlog の機能を用いてテンプレートファイルを変更するのに支障が出るというのが欠点です。逆に長所は、iblogPatcher のプラグイン達のロジックをほとんど変更をしなくてよいということで、日本語化に関しては blog 定義ファイルやプラグインの中の設定部分を何文字か変更すればそれで済みます。

方針2

テンプレートは Shift_JIS にしておいて、UTF-8 で出力される部分を識別するための <!-- BEGIN XXXX --> <!-- END XXXX --> のような識別子を入れておき、コード変換や、変な実体参照による文字化け解消はみな CHANGE_CONTENT.plugin の要領で記述してしまう方法です。

これは iblogPatcher のプラグイン構成をがらりと換えるとともにとテンプレートファイルの書き換え部分が多くなるのが欠点です。なんとなくスマートではないのですが、その分もの凄い柔軟なものになります。つまり将来の iBlog の仕様というか動作に今回のような大幅な変更があっても対処がしやすくなるというのが長所です。

方針3

果報は寝て待て!


取り敢えずは時間が取れないので、方針3 です。その間に、意見やアイデアがあったら是非お寄せ下さい。

Posted: 07:27    | Comment | Trackback


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