b2evolution 0.9.0.8 の日本語対応
b2evolution の日本語対応に関するメモ。(ほぼ 0.9.0.5 の日本語対応 と同じです)
そのままで使っても困る場面というのは少ないのですが、ブックマークレットと、トラックバックの受信と、コメント等があった際の通知メールの文字コード処理で問題が発生する可能性があります。
もう一つ、予想でしかありませんが、メールでブログに記事を投稿する機能を使う際に、文字コード処理が行われないのでおそらく正常に書き込めないと思います。これは、私は今のところ使う予定の無い機能ですし、XREA.COMではこの機能自体そのままでは動作しないようですので、どなたかが調査してくださると嬉しいです。
バージョン0.9.0.8について、まずブックマークレット、次にトラックバックと通知メールについて、私が行った対処を書いておきます。
検証を十分に行ったわけではなく、XREA.COMの環境 (Apache 1.3系、PHP 4.3系 + マルチバイト文字列関数(mbstring)有効 + .htaccess
によるPHP設定変更可能) と私の使い方ではうまくいったという程度のものですから、他でも通用するかは不明です。
(XREA.COM で使用する場合は、XREA.COM 特有の b2evolution 設定 も参照してください)
- デフォルトのメッセージを日本語にする
-
インストール・アップグレード処理や、ログイン画面・管理画面でのデフォルトの言語を日本語にするには、
blogs/conf/_locales.php
の23行目、$default_locale = 'en-EU';
を
$default_locale = 'ja-JP';
に変更します。
このデフォルト設定は、ウェブブラウザの設定のほうが優先されるので、うまく行かない時はウェブブラウザの言語設定(エンコード設定ではないので混同しないよう注意)と、b2evolution の管理画面の設定タブの地域設定での優先度を確認・調整してください。 - 週の初めの曜日
-
カレンダー表示等で週の初めが月曜日になっているのを変更するには、
blogs/conf/_locales.php
の193行目の$start_of_week = 1;
を変更します(
0
で日曜、1
で月曜、2
で火曜が週の初めと見なされます)。 - ブックマークレット
-
ブックマークレットの問題は、ブックマークレットのJavaScriptで
escape()
が用いられていることが原因です。encodeURIComponent()
を使用するように変更します。(欧文のみの環境ですと、escape()
のほうが問題が少ないようです。しかし日本語等、UTF-8を使用する場合ではencodeURIComponent()
のほうが無難です)blogs/admin/tools.php
の27行目、34行目、42行目、49行目、81行目の各行に、3個もしくは2個ずつある+escape(
を
+encodeURIComponent(
に置き換えます。
- トラックバックと通知メール
-
トラックバックと通知メールについて、文字セットに限定されない汎的な対処と、日本語限定で簡単な対処を紹介します。
-
文字セット汎用の対処方法です。
blogs/sample.htaccess
のファイル名を.htaccess
に変更して、その中の<IfModule mod_php4.c>
php_flag register_globals off
</IfModule>を
<IfModule mod_php4.c>
php_flag register_globals off
php_value mbstring.language "neutral"
php_value mbstring.internal_encoding "UTF-8"
php_value mbstring.func_overload "6"
php_flag mbstring.encoding_translation on
php_value mbstring.http_input "ASCII,JIS,UTF-8,EUC-JP,SJIS"
php_value mbstring.http_output "pass"
</IfModule>と変更します。(各項目の意味は PHP のマニュアル マルチバイト文字列関数(mbstring) を参照してください)
使用される言語に応じて、php_value mbstring.http_input "ASCII,JIS,UTF-8,EUC-JP,SJIS"
に他のエンコード(ISO-8859-1
など)を追加する必要があるかもしれません。ISO-8859-1
などISO-8859-?
の指定を追加すると、順序に関わらずそちらのほうが優先されて自動判別が効かなくなってしまうため、ISO-8859-1
などは指定するといけないようです。次に、
blogs/b2evocore/_functions.php
の1331行目のreturn @mail( $to, $subject, $message, $headerstring );
の前に
$subject = '=?' . $locales[ $current_locale ]['charset'] . '?B?' . base64_encode($subject) . '?=';
という1行を追加します。
以上で、トラックバックの文字化けは防ぐことができますし、通知メールは投稿の言語指定に従って(日本語に設定されていればUTF-8)送信されるので、多言語対応(特にUTF-8対応)メーラーを使っていれば問題ないはずです。
-
日本語限定でメール出力をより奇麗にする対処方法です。
コメント等があった際の通知メールは、UTF-8に対応していないメーラーもありますし、Outlook Express など一部のメーラーはUTF-8のメールの表示に失敗することがあるそうですので、きちんとしたやり方ではなく応急処置的ですがISO-2022-JPのメールになるようにする方法も提示しておきます。
blogs/sample.htaccess
のファイル名を.htaccess
に変更して、その中の<IfModule mod_php4.c>
php_flag register_globals off
</IfModule>を
<IfModule mod_php4.c>
php_flag register_globals off
php_value mbstring.language "Japanese"
php_value mbstring.internal_encoding "UTF-8"
php_value mbstring.func_overload "7"
php_flag mbstring.encoding_translation on
php_value mbstring.http_input "ASCII,JIS,UTF-8,EUC-JP,SJIS"
php_value mbstring.http_output "pass"
</IfModule>と変えます。
それから、
blogs/b2evocore/_functions.php
の1311行目の$headers[] = 'Content-Type: text/plain; charset='.$locales[ $current_locale ]['charset'];
という部分を、コメントアウト(行の先頭に
//
を付ける)して// $headers[] = 'Content-Type: text/plain; charset='.$locales[ $current_locale ]['charset'];
と変えてみてください。
なお、Apache 2 の場合は、
.htaccess
の
<IfModule mod_php4.c>
を
<IfModule sapi_apache2.c>
に変えるといいらしいです。
(PHPマニュアル 設定を変更するには の末尾を参照) -
- 経由検索エンジンのキーワード
-
前述の「トラックバックと通知メール」対策を行うと、統計の検索エンジン経由アクセスの使用キーワード表示でエラーが出るようになってしまいますので、その対処と文字化け対策です。
blogs/b2evocore/_functions_hitlogs.php
の460行目、if( strpos( $q, 'Ã' ) !== false )
を
if( mb_strpos( $q, "\xC3", 0, 'ASCII' ) !== false )
に変更します。
また、同ファイル471行目、echo htmlentities($kwout);
を
echo htmlspecialchars($kwout);
に変更します。
1 トラックバック, 1 ピンバック
ピンバック from: ススムココロ - 祝 初トラックバック 訪問者
[...] トラックバックを受けた時にメールで知らせてくれるのですが、常用の鶴亀メールの方は問題なしだったのですが、転送しているPHSの方はバケバケでした。茶気抄 (cha-ki-sho)さんのこれをキッチリやったら、文字化けしなくなるのかなぁ? コメントを残す • トラックバック (0) - [...]
祝 初トラックバック
SkypeOutのエントリーに、日々適当なblogさんがトラックバックしてくれました。ども、ありがとございます。:)
b2evolutionという、日本での導入事例少ないシステムを使っているので、...