Yuriko.Net 個別記事

2008-12-01
晴れ

WordPress 本家開発者の I18N 軽視はどうにかならんか

ゆりこ による 15:56:47 の投稿
カテゴリー: WordPressハック
タグ: ,

現在開発中の WordPress 2.7 ですが、新機能として「投稿表示部分を囲む div 要素に、属するカテゴリーごとの class 指定ができる」というものがあります。例えば、mobile カテゴリーの投稿ならば、div class="category-mobile" という div 要素で囲まれます。これ自体はデザインの多様化が図れて歓迎されることなんですが、その実装があまりに国際化や HTML/CSS 仕様を無視したもので、泣けてきます。

この機能は、Changeset 8641 にて post_class() 関数を増強する形で追加されました。コード (下に引用) を見ると分かりますが、”category-XXXX” の XXXX の部分は、カテゴリースラッグそのままです。ところが、カテゴリースラッグに使える文字と、class 指定に使える文字の範囲が異なるため、このままでは XHTML および CSS 違反になってしまいます。カテゴリー名が英数字だけならば、スラッグは a-z, 0-9, – (ハイフン), _ (アンダースコア) だけになるため問題ありません。しかし、カテゴリー名に Unicode 文字 (日本語等) を使うと、スラッグは %nn という URL エンコードした形式になります。しかし、class 名には % 記号は使えないのです!! 現在のコードでは、class 名に % 記号を含んだものになってしまいます (「携帯」カテゴリーならば “category-%e6%90%ba%e5%b8%af” となってしまう)。

186	    // Categories 
187	    foreach ( (array) get_the_category($post->ID) as $cat ) { 
188	        if ( empty($cat->slug ) ) 
189	            continue; 
190	        $classes[] = 'category-' . $cat->slug; 
191	    } 
192	 
193	    // Tags 
194	    foreach ( (array) get_the_tags($post->ID) as $tag ) { 
195	        if ( empty($tag->slug ) ) 
196	            continue; 
197	        $classes[] = 'tag-' . $tag->slug; 
198	    } 

今までも、WordPress 開発者は、I18N (国際化対応) がいい加減だと思っていましたが、今回もまた配慮が足りません……。早々にチケットを切らないといけませんが、対応策としては「カテゴリー ID を使う」ぐらいしか思い浮びません。スラッグから % 記号を抜いたもの、とか、% を _ に変化させたもの、を使うのはいまいちだと思いますし。実は class 名には「ASCII 以外の Unicode 文字」が使えるため「category-携帯」という出力でよかったりするんですが、既存のウェブブラウザーがそういう記述を認識するのかは疑問なので、「スラッグではなくカテゴリー名そのものを使う」という変更が有効なのかは疑問です……。

[追記] いい加減な英語でチケット#8446を切りました。結局、解決策としては、バックスラッシュで % 記号をエスケープするか、カテゴリー ID を使うかどちらか、ということにしました。カテゴリー名そのものを使うのは、ASCII 記号が含まれている場合によくないので没としました。

さきほど発表された WordPress 2.7 RC1 でも直っていませんでした……。チケットは切ってあるので、RC2 あたりで直してもらえることを期待しましょう。

トラックバック・コメント »

  1. [...] 新機能の問題点を指摘していた WordPress 2.7 ですが、さきほどリリースされてしまいました。trac のチケットを切ったり、WordPress 日本語フォーラムでトピックを作ったんですが、結局直さ [...]

上に戻る

※スパム対策プラグインの影響により、すぐにトラックバックが反映されない場合があります。お手数ですが、半日ほど待ってみてください。

コメント投稿

※発言の責任を明確にするため「名無し」「通りすがり」「匿名希望」等の匿名は不可とします。捨てハンドルでもいいので必ず名乗ってください。
XHTML (使えるタグ): <a href="" title="" ktai=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <img localsrc="" alt=""> .
※スパム対策プラグインの影響により、すぐにコメント内容が表示されない場合があります。お手数ですが、半日ほど待ってみてください。

上に戻る