tDiary.org - 日記コミュニケーションを加速する


プラグインをUTF-8化する方法

この記事は開発者向け情報です。

tDiaryは2.3から文字コードを全言語でUTF-8に変更しました。これにともない、プラグインなどが出力するテキストもUTF-8にしなくてはなりません。標準添付やcontribに含まれるプラグインはすべてUTF-8を出力するようになっていますが、自作プラグインなどはそれぞれで対応しなくてはいけません。

以下にUTF-8化のための手法について簡単に述べます。もちろん、すべてのプラグインに当てはまるわけではないので、特別なことをしているプラグインは個別に特別な処理が必要になるでしょう。

プログラムコード

プログラムコードについては、言語リソースをUTF-8で書けばOKです(共通コードに言語依存の文字列が入っている場合にはそちらもUTF-8化する必要があります)。たとえば、hoge.rbというプラグインの日本語リソースをUTF-8化するには以下のようにできます(UTF-8対応のNKFがある場合):

«< % ls -F hoge.rb ja/ en/ zh/

% cd ja % mv hoge.rb hoge.rb.euc-jp % nkf -Ew hoge.rb.euc-jp hoge.rb

もちろん、文字コード変換機能の付いたエディタで読み込んで、UTF-8で保存しなおすなど、他の手法でもOKです。

データファイルなど

プラグインで独自のファイルに情報を保管しているような場合には、それも変換する必要があります。

ユーザにプログラムと同じように手動で変換してもらうのも手ですが、最初の実行時に自動的に変換するのが親切です。tDiary 2.3では、coreのplugin/90migrate.rbがその役目を担っています。90migrate.rbの動作は以下のようになっています:

「@conf.tdiary_version」が存在しない場合のみ変換コードが動作するようにする。@conf.tdiary_versionはtDiary 2.3から導入された変数で、最後に保存されたときのtDiaryのバージョンが入っています。もちろんすでに2.3に移行済みのことを考慮する場合には、保存されたデータファイルの文字コードについて配慮しつつ動作するのも良いでしょう。

データファイルを読み込んで、「@conf.migrate_to_utf8メソッド」を使ってUTF-8化する。@conf.migrate_to_utf8メソッドの引数は文字列です。ここに変換前の文字列を指定すると、現在動作中の言語に応じて適切な変換ルールが適用され、UTF-8文字列が返されます。

UTF-8化されたデータをファイルに保存する。

データファイルが単純なテキストファイルの場合には簡単ですが、PStoreを使っているような場合にはデータ構造に応じた変換コードを書く必要があると思います。90migrate.rbを参考にしつつ、変換コードを書いてみてください。