TypeKey サイン・インのメッセージを変更する
個別エントリーアーカイブ/コメント・プレビュー/コメント・エラーの各コメント欄を整形しました。コメント欄にあるTypekeyバナーの配置は、以前から気に入っていた Ogawa::Memoranda さんのコメント欄のアイデアを勝手ながらそのまま拝借させて頂きました。ありがとうございます。
またTypeKeyサイン・イン後の日本語ニックネームが文字化けする件が残っていましたので、TypeKeyでサイン・インしても表示が変わらない問題を対処を参考に対処しました。
整形に伴って、TypeKeyサイン・イン前後のメッセージをそれぞれ
TypeKey ID を使ってサイン・インしてください。
↓
TypeKeyサイン・イン
サイン・インを確認しました、hogehogeさん。コメントしてください。 (サイン・アウト)
↓
hogehogeさんのサイン・インを確認しました(サイン・アウト)
に変更してみました(青色はリンクを示しています)。
ということで、ここではTypeKeyサイン・インのメッセージのカスタマイズ方法を載せましたので参考になれば幸いです。なおこのカスタマイズはTypekeyの設定が有効かつ、サイン・インしなくてもコメントが可能になっている状態が前提です。
個別エントリーアーカイブ
個別エントリーアーカイブにあるメッセージを変更する場合、個別エントリーアーカイブの赤色部分を青色に修正します。修正前の状態はデフォルトテンプレートと公開テンプレートの2種類について掲載しておきます(若干違ってましたらお許しを)。
デフォルトテンプレート(抜粋:変更前)
<MTIfRegistrationAllowed>
<script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script>
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.write('サイン・インを確認しました、', commenter_name, 'さんのサイン・インを確認しました (<a href="<$MTRemoteSignOutLink static="1"$>">サイン・アウト</a>)');
} else {
document.write('TypeKey ID を使って <a href="<$MTRemoteSignInLink static="1"$>"> TypeKey サイン・インする</a> ');
}
// -->
</script>
</MTIfRegistrationAllowed>
公開テンプレート(抜粋:変更前)
<MTIfRegistrationAllowed>
<script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script>
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.write('サイン・インを確認しました、', commenter_name, 'さん。コメントしてください。 (<a href="<$MTRemoteSignOutLink static="1"$>">サイン・アウト</a>)');
} else {
document.write('TypeKey ID を使って <a href="<$MTRemoteSignInLink static="1"$>"> サイン・イン</a> してください。');
}
// -->
</script>
</MTIfRegistrationAllowed>
変更後
<MTIfRegistrationAllowed>
<script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script>
<script language="javascript" type="text/javascript">
<!--
if (commenter_name) {
document.write(commenter_name, 'さんのサイン・インを確認しました(<a href="<$MTRemoteSignOutLink static="1" encode_html="1"$>">サイン・アウト</a>)');
} else {
document.write('<a href="<$MTRemoteSignInLink static="1" encode_html="1"$>">TypeKey サイン・イン</a>');
}
// -->
</script>
</MTIfRegistrationAllowed>
コメント・プレビュー/コメント・エラー
個別エントリーアーカイブはテンプレートの変更だけで可能ですが、コメント・プレビュー/コメント・エラーにあるメッセージを変更する場合、プログラム(context.pm)と言語変換用のファイル(ja.pm)を修正する必要があります。カスタマイズ前にファイルのバックアップをとるか、エディタで履歴を戻せるようにしておいてください。
まず lib/MT/Template/Context.pm の1335行目辺り(3.171-ja の場合)にある下記のスクリプトの赤色部分を削除します。
if ($rem_auth_token && $registration_allowed) {
$result .= $javascript;
$result .= MT->translate_templatized(<<HTML);
<script language="javascript" type="text/javascript">
<!--
if (getCookie("commenter_name")) {
document.write('<MT_TRANS phrase="Thanks for signing in,"> ', '$commenter_name', '<MT_TRANS phrase=". Now you can comment."> (<a href="$path$comment_script?__mode=handle_sign_in&$static_arg&entry_id=$entry_id&logout=1"><MT_TRANS phrase="sign out"></a>)');
} else {
document.write('<MT_TRANS phrase="If you have a TypeKey identity, you can " escape="singlequotes"><a href="$signon_url$lang$needs_email&t=$rem_auth_token&v=$tk_version&_return=$path$comment_script%3f__mode=handle_sign_in%26$static_arg%26entry_id=$entry_id"> <MT_TRANS phrase="sign in" escape="singlequotes"></a> <MT_TRANS phrase="to use it here." escape="singlequotes">');
}
// -->
</script>
HTML
削除したら一旦サイトからコメントの確認を実行してエラーが出ないことを確認してください。もしエラーが出てコメント・プレビュー画面が正常に表示されなくなった場合は削除部分を一旦元に戻します(一番最初の状態に戻せばきちんと表示されます)。そして削除箇所に誤りがないか確認して再度行ってください(「'」の有無に気をつけてください)。
正常に動作するようになったら、次に lib/MT/L10N/ja.pm を編集します。その前に日本語変換の仕組みについて説明します。
例えば「?さん。コメントしてください。」というメッセージは、上のスクリプトの青色
<MT_TRANS phrase=". Now you can comment.">
の部分にあたります。"MT_TRANS" は言語変換用のタグです。このタグの phrase 属性に記述された 「. Now you can comment.」をキーにして、ja.pm に記述された
'. Now you can comment.' => 'さん。コメントしてください。',
という行を探し、「. Now you can comment.」を「さん。コメントしてください。」に変換し、画面に表示します。
なお Context.pm には日本語を直接記述しないでください(文字化けします)。
さて、Context.pm の編集で最初のメッセージから下記の赤色部分が削除されました。
TypeKey ID を使ってサインインしてください。
サイン・インを確認しました、hogehogeさん。コメントしてください。 (サイン・アウト)
後はサイン・イン後のメッセージ「さん。コメントしてください。」を「さんのサイン・インを確認しました」に変更するだけです。これは ja.pm にある
'. Now you can comment.' => 'さん。コメントしてください。',
を
'. Now you can comment.' => 'さんのサイン・インを確認しました',
に変更すればOKです。なお同じキーが何ヶ所かありますが、変更する文字列の少し上に
## lib/MT/Template/Context.pm
と書かれてありますのでその下にある一番近い該当の文字列を変更してみてください。もし変換されないようでしたら他の箇所も検索して変更してみてください。
以上です。なお、MT_TRANS タグの phrase 属性値、つまりキーとなる英文のメッセージを新しく作ることも可能です。つまり、それに対応する日本語が追加できます。あと ja.pm は行の前にTAB文字が入っていますが、TABがなくても問題ありません。
またコメント・プレビュー/コメント・エラーのコメント欄付近は Context.pm の内容を変更することでレイアウトをやメッセージの追加・変更が可能です。腕に自信のある方はチャレンジしてみてください。変更箇所のポイントは
sub _hdlr_comment_fields {
:
}
の中に
:
return MT->translate_templatized(<<HTML);
:
(タグ)
:
HTML
$result .= MT->translate_templatized(<<HTML);
:
(タグ)
:
HTML
:
(略)
と、「<<HTML」と「HTML」で括られた部分に、実際に表示されるタグ等が記述されていますので、ここにHTMLタグやメッセージ変換用タグを記述することができます。括られていない他の部分はプログラムですのでご注意ください。
TypeKeyの使い方
TypeKeyはシックス・アパートのサービスのひとつで、ウェブログにコメントする時に利用するIDです。TypeKeyを利用することでウェブログはコメントスパムを防止することが可能になります(現実にはコメント投稿の利便性を考慮しているサイトが多く、結果的に完全な防止には至らないようです)。
すでにあちこちのサイトで書かれているようですが、このエントリーではTypeKeyについて
- アカウント取得
- TypeKey認証によるコメント投稿が可能なサイトにする
- TypeKey認証によるコメント投稿
の3つの項目に分けて記します。なお機能を完全に把握できている訳ではございませんので認識誤り等ございましたら予めご了承ください。
TypeKeyアカウント取得
TypeKeyを利用する人が共通して行う作業として「TypeKeyアカウントの取得」があります。
TypeKeyウェブサイトのTypeKeyへのよくある質問に「Type Keyアカウントの取得方法」が掲載されておりますので参照ください。TypeKeyの登録は無料です。
TypeKey認証によるコメント投稿が可能なサイトにする
TypeKey認証によるコメント投稿
Movable Typeを用いたウェブログ(注:TypeKeyは他のアプリケーションでも利用可能みたいです)で個別エントリーアーカイブのコメント入力欄の上に
- TypeKey ID を使って サイン・イン してください。
とあるのをよく見かけると思います。これを利用することでTypekey認証によるコメント投稿が可能になります。TypeKey認証を行えば名前・メールアドレスの入力は不要です。この表示がないサイトはTypeKey認証によるコメント投稿を利用していないか、管理画面でTypeKey設定を行っていても(多分)3.0以前のバージョンの個別エントリーアーカイブテンプレートを用いているためページに反映されていない可能性があります。
TypeKeyアカウントを取得されているのであればログイン画面からログインすることでコメント画面に戻り、先の表示が
- サイン・インを確認しました、hogehoge. さん。コメントしてください。 (サイン・アウト)
に変わります。これでTypeKey認証されましたのでコメントを投稿します。投稿したコメントの投稿者欄にはTypeKeyによる投稿を行ったコメンターマーク
が表示されます。TypeKey認証を終了する場合は上記の「サイン・アウト」をクリックします。
|
|
|
|
TypeKeyでサイン・インしても表示が変わらない問題を対処
現状の公開テンプレートでは個別アーカイブからTypeKeyにサイン・インした後、サイン・イン状態の画面になりません。実は以前からそういう状態だったのですが「そういうものか…」と思って解決に向かっての行動を怠ってました(他のサイトでTypeKeyサイン・インをしないもので…)が、mayutanさんからのご質問でやはり不具合であることが判明しました。すいません…。
ちなみに現状のテンプレートではサイン・イン後に確認画面に移動、またはリロードするとサイン・インされた状態が表示されます。
個別アーカイブからTypeKeyのサイン・インを行う時の画面遷移は下記の通りです。
- 個別アーカイブの「TypeKey ID を使って サイン・イン してください。」のリンク部分をクリック
- TypeKeyログイン画面にジャンプするのでサイン・イン、または登録(サイン・イン情報をcookieに保持)
- サイン・インが成功すればサイン・イン画面から個別アーカイブにリダイレクト(cookieよりサイン・イン情報を取得してサイン・イン状態表示)
この中の、一番下のcookieの取得が正常に行えていないようです。
この問題解決にあたって参考させて頂いたサイトです。ありがとうございました。
以下、上記サイトからの引用です。
この問題は個別アーカイブの下記の赤色部分(2ヶ所)を青色部分に置き換えることで解決します。
修正前
<script type="text/javascript" src="<MTCGIPath><MTCommentScript>?__mode=cmtr_name_js"></script>
修正後
<script type="text/javascript">
<!--
var commenter_name = getCookie("commenter_name");
// -->
</script>
上記の対処とは別にTypeKeyサイトの「コメンターの設定」にある「ニックネーム」が日本語の場合、文字が化けが発生するようですので、下記の対処も併せて実施する必要があります。個別アーカイブ・コメントプレビュー・コメントリスト・コメントエラー上部にあるJavaScriptの赤色部分をそれぞれ青色のスクリプトに置き換えます。
2004.10.27 追記:3.11-ja以降の場合は「Remember Me」というテンプレートモジュールが修正対象です。注:修正後は再構築が必要です。
修正前
function setCookie (name, value, expires, path, domain, secure) {
var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
}
function getCookie (name) {
var prefix = name + '=';
var c = document.cookie;
var nullstring = '';
var cookieStartIndex = c.indexOf(prefix);
if (cookieStartIndex == -1)
return nullstring;
var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
if (cookieEndIndex == -1)
cookieEndIndex = c.length;
return unescape(c.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}
修正後
function setCookie (name, value, expires, path, domain, secure) {
var curCookie = name + "=" + (window.encodeURIComponent ? encodeURIComponent(value) : escape(value)) + ((expires) ? "; expires=" + expires.toGMTString() : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
}
function getCookie (name) {
var prefix = name + '=';
var c = document.cookie;
var nullstring = '';
var cookieStartIndex = c.indexOf(prefix);
if (cookieStartIndex == -1)
return nullstring;
var cookieEndIndex = c.indexOf(";", cookieStartIndex + prefix.length);
if (cookieEndIndex == -1)
cookieEndIndex = c.length;
var value = c.substring(cookieStartIndex + prefix.length, cookieEndIndex);
return window.decodeURIComponent ? decodeURIComponent(value) : unescape(value);
}
私のニックネームを半角英数から全角に変更して試したところ、正常に表示されることを確認しました。
これに伴い、公開中のテンプレートを修正致しました(またかよ…って感じですが)。修正したのは、
- MT 3カラム テンプレート(サイズ固定) Individual Entry Archive(1カラム・3カラム) コメント・プレビュー(1カラム・3カラム) コメント・エラー(1カラム・3カラム) コメント保留(getCookieのみ)
- Movable Type 3.01D-ja 個別アーカイブテンプレート
です。それ以前のテンプレートについてはTypeKey対応でないバージョンを考慮して変更していません(というかTypeKey対応のタグがそもそもありませんでしたね…)。
各テンプレートのサイン・インおよびサイン・アウトにつきましては一通り確認致しましたが不具合等ございましたらご連絡ください。

