個別アーカイブのコメントフォーム周りに手を加えようと思ったんですが、最終的には以外と大変と言うか面倒くさい作業になってしまいました。内容としては、accesskey
とtabindex
を付加する作業で、「個別エントリアーカイブ(Individual Entry Archive)」テンプレート自体の修正は至って簡単に終わったんですが、コメント投稿時の確認(プレビュー)画面が厄介でした。
「コメント・プレビュー」の構造
まず「コメント・プレビューのテンプレート」を見れば分かるのですが、コメントプレビュー画面にあるコメントフォーム部分は下記のようになっています。
<MTCommentFields preview="1">
上記の1行でコメントフォームを表示しています。で、これは何処から呼び出して表示しているかと言うと、cgiを置いてあるディレクトリ内のmt/lib/MT/Template内の「Context.pm」。さらにその1229行目から1358行目までの部分です。この部分が分かれば、あとは「個別エントリアーカイブ(Individual Entry Archive)」テンプレートと同じように修正していけば簡単です。
「Context.pm」内の"MT_TRANS"タグ
しかし、今回はaccesskey
を付加するために、『名前 (A) :』って感じでアクセスキーを明示しようと思っていたんですが、「Context.pm」ではこれが面倒くさい。例として入力フォームの名前欄の部分を「個別エントリアーカイブ(Individual Entry Archive)」テンプレート(上)と「Context.pm」(下)とで比較してみれば分かります。
<label for="author">名前 (<kbd>A</kbd>) :</label><br />
<input tabindex="1" id="author" name="author" accesskey="A" />
<label for="author"><MT_TRANS phrase="Name:"></label><br />
<input tabindex="1" name="author" id="author" value="$comment_author" accesskey="A" />
上の「個別エントリアーカイブ(Individual Entry Archive)」テンプレートでは名前の後に(<kbd>A</kbd>) :
とアクセスキーを表示させるようにしたのですが、下の「Context.pm」では当該部分が<MT_TRANS phrase="Name:">
となっています。実はこの部分は、cgiを置いてあるディレクトリ内のmt/lib/MT/L10Nにある「ja.pm」と言うファイルを参照して日本語に置き換えているようです。なので、アクセスキーの表記はその「ja.pm」を変更して行わなければいけません。
「ja.pm」の修正
さらにここから、実際に「ja.pm」にて該当する部分を探そうと思ったんですが、ちょっと引っかかりました。1020行目に## lib/MT/Template/Context.pm
と記述があるのですが、その直下の該当する部分は下記のように#
でコメントアウトされています。
## lib/MT/Template/Context.pm
'Thanks for signing in,' => 'サイン・インしてくれてありがとう',
'Now you can comment.' => 'さん。コメントしてください。',
'sign out' => 'サイン・アウト',
'(If you haven\'t left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won\'t appear on the entry. Thanks for waiting.)' => '(いままで、ここでコメントしたとがないときは、コメントを表示する前にこのウェブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)',
# 'Remember me?' => '情報を登録する?',
# 'Yes' => 'はい',
# 'No' => 'いいえ',
# 'Comments:' => 'コメント:',
# 'Preview' => '確認',
# 'Post' => '投稿',
'You are not signed in. You need to be registered to comment on this site.' => 'サイン・インしていません。このサイトにコメントをする前に登録してください。',
'Sign in' => 'サイン・イン',
'. Now you can comment.' => 'さん。コメントしてください。',
'If you have a TypeKey identity, you can ' => 'TypeKey の ID をもっていたら、',
'sign in' => 'サイン・イン',
'to use it here.' => 'してください。',
# 'Name:' => '名前:',
# 'Email Address:' => 'メールアドレス',
# 'URL:' => 'URL:',
当該部分のコメントアウトを解除し、修正したのですが、「URL」「はい」「いいえ」「コメント」には反映されません。要は、上記部分以降で再度定義されているので上書きされているっぽいです。上記の4カ所はそれぞれ、下記の部分に当てはまりました。
- URL
- 1205行目『## lib/MT/App/Trackback.pm』の下の1224行目
'URL:' => 'URL:',
- 「保存しますか?」の「はい」
- 1370行目『## lib/MT/default-templates.pl』の下の1422行目
'Yes' => 'はい',
- 「保存しますか?」の「いいえ」
- 上記のすぐ下の1423行目
'No' => 'いいえ',
- コメント
- 1370行目『## lib/MT/default-templates.pl』の下の1407行目
'Comments:' => 'コメント:',
「ja.pm」を変更するリスク
もし、自分も弄ってみよう何て言う希有な方は、必ずバックアップをとって自己責任で行ってください。と言うか、正直やって良いものなのか保証できません。実際には、「ja.pm」内の定義を複数の場所で参照しているので、Movable Type設定画面などの思わぬ場所に反映される可能性が高いです。また、MTのアップデートなんかがあった場合を考えると、あまりお薦めできません。もしかしたら「いやいや、それはやらない方が良いよ」なんてご指摘があるやも知れません(笑)
本当は、フォーム関係のマークアップを見直して、定義リストdl
にしようかなと思っていたのですが、後回しになってしまいました。アクセスキーの表記も属性セレクタとafter疑似要素を使って書き出そうかなと思ったんですが、IEの未実装を考慮して今回は見送りました。
Comments
こんにちは。
どこを変えればいいのかを探して、彷徨っているうちに辿り着きました。
ありがとうございます。
accesskeyも良いですが・・・何やら大変そうなので、次の機会に試してみたいです。