b2evolution 0.9.0.9 の日本語対応
b2evolution 0.9.0.9 はアップグレード時およびMovable Typeからの移行時にエラーが発生する場合があります。これからインストール/アップグレードされる方は、修正された 0.9.0.10 を利用するようにしてください。
b2evolution の日本語対応に関するメモ。(0.9.0.8 の日本語対応 とは一部やり方を変えました。異なる部分も多いので注意してください)
b2evolution はそのままで使ってもそれなりに日本語が使えます。
しかし、ブックマークレット、トラックバックの受信、コメント等があった際の通知メールの文字コード処理などで問題が発生する可能性があります。
さらに、こちらでは検証しておらず予想でしかありませんが、メールでブログに記事を投稿する機能を使う際に、文字コード処理が行われないのでおそらく正常に書き込めないと思います。これは、私は今のところ使う予定の無い機能ですので、どなたかが調査してくださると嬉しいです。
バージョン0.9.0.9について、私が行った対処を書いておきます。
他の環境でも通用するかは不明です。
(XREA.COM で使用する場合は、XREA.COM 特有の b2evolution 設定 も参照してください)
- デフォルトのメッセージを日本語にする
-
インストール・アップグレード処理や、ログイン画面・管理画面でのデフォルトの言語を日本語にするには、
/conf/_locales.php
の33行目、$default_locale = 'en-EU';
を
$default_locale = 'ja-JP';
に変更します。
このデフォルト設定は、ウェブブラウザの設定のほうが優先されるので、うまく行かない時はウェブブラウザの言語設定(エンコード設定ではないので混同しないよう注意)と、b2evolution の管理画面の「設定」タブの地域設定での優先度を確認・調整してください。さらに、インストール時に日本語(ja-JP)以外の言語を指定していた場合、ブログ設定とユーザ設定の言語・地域設定(Locale)が「日本語」(Japanese)になっていないと思われます。
その状態では、日本語の投稿の書き込みがうまくいかない可能性がありますので、管理画面の「ブログ」と「ユーザ」と「設定 : 地域」とでそれぞれ設定してください。 - 週の初めの曜日
-
カレンダー表示等で週の初めが月曜日になっているのを変更するには、
/conf/_locales.php
の226行目の$start_of_week = 1;
を変更します(
0
で日曜、1
で月曜、2
で火曜が週の初めと見なされます)。 - ブックマークレット
-
ブックマークレットの問題は、ブックマークレットのJavaScriptで
escape()
が用いられていることが原因です。encodeURIComponent()
を使用するように変更します。(欧文のみの環境ですと、escape()
のほうが問題が少ないようです。しかし日本語等、UTF-8を使用する場合ではencodeURIComponent()
のほうが無難です)/admin/tools.php
の31行目、38行目、46行目、53行目、85行目の各行に、3個もしくは2個ずつある+escape(
を
+encodeURIComponent(
に置き換えます。
この変更を行った後に、ブックマークレットの登録をやり直してください。
(
/admin/tools.php
を書き換えるより、ブラウザのお気に入り/ブックマークに登録したブックマークレットURIを、後から変更(escape
をencodeURIComponent
に置き換え)したほうが簡単かもしれません。楽だと思うほうでやってみてください) - 通知メール
-
通知メールについて、日本語限定の対処と、言語に限定されない対処を紹介します。(日本語しか使わないのであれば、「日本語限定の対処」を推奨します)
-
日本語限定でメール出力を奇麗にする対処方法です。携帯電話等で通知メールを受け取る場合はこちらでないと差し障りがあると思います。
/b2evocore/_functions.php
の1315行目の$headers[] = 'Content-Type: text/plain; charset='.$locales[ $current_locale ]['charset'];
という部分を、コメントアウト(行の先頭に
//
を付ける)して// $headers[] = 'Content-Type: text/plain; charset='.$locales[ $current_locale ]['charset'];
と変更します。
それから、
/b2evocore/_functions.php
の1335行目、return @mail( $to, $subject, $message, $headerstring );
を
$message = str_replace("\r\n", "\n", $message);
mb_language('Japanese');
mb_internal_encoding( $locales[ $current_locale ]['charset'] );
return @mb_send_mail( $to, $subject, $message, $headerstring );に変更します。
-
言語汎用の対処方法です。メールの受信環境によっては問題が出る可能性もあります。多言語でブログを運用している場合のみ、こちらを使うようにしてください。
/b2evocore/_functions.php
の1335行目のreturn @mail( $to, $subject, $message, $headerstring );
の前に
$message = str_replace("\r\n", "\n", $message);
$subject = '=?' . $locales[ $current_locale ]['charset'] . '?B?' . base64_encode($subject) . '?=';という2行を追加します。
-
- トラックバック
-
/b2evocore/_functions_trackback.php
の67行目の$query_string = "title=$title&url=$url&blog_name=$blog_name&excerpt=$excerpt";
を
$charset = urlencode( locale_charset(false) );
$query_string = "title=$title&url=$url&blog_name=$blog_name&excerpt=$excerpt&charset=$charset";
に変更します。
次に、
/htsrv/trackback.php
の45行目の$title = strip_tags($title);
の前に、次のいずれかを追加します。
-
推奨。自動判別を行うようにして日本語の処理が適切に行われるようにしたものです。日本語以外ではうまくいかない可能性のある対処ですが、多言語で運用していない限りはこちらをお薦めします。
param( 'charset', 'string', NULL );
if ( isset($charset) && function_exists('iconv') )
{
locale_temp_switch( get_bloginfo('locale', $blogparams) );
$to_charset = locale_charset(false);
$title = iconv( $charset, $to_charset, $title );
$excerpt = iconv( $charset, $to_charset, $excerpt );
$blog_name = iconv( $charset, $to_charset, $blog_name );
locale_restore_previous();
} elseif ( function_exists('mb_convert_encoding') )
{
if (!isset($charset)) $charset = mb_detect_encoding( $title . $excerpt . $blog_name, 'auto');
locale_temp_switch( get_bloginfo('locale', $blogparams) );
$to_charset = locale_charset(false);
$title = mb_convert_encoding( $title, $to_charset, $charset );
$excerpt = mb_convert_encoding( $excerpt, $to_charset, $charset );
$blog_name = mb_convert_encoding( $blog_name, $to_charset, $charset );
locale_restore_previous();
} -
多言語で使う場合を考慮し、自動判別を行わないようにしたものです。多言語でブログを運用している場合のみ、こちらを使うようにしてください。
param( 'charset', 'string', NULL );
if ( isset($charset) )
{
locale_temp_switch( get_bloginfo('locale', $blogparams) );
if ( function_exists('iconv') )
{
$to_charset = locale_charset(false);
$title = iconv( $charset, $to_charset, $title );
$excerpt = iconv( $charset, $to_charset, $excerpt );
$blog_name = iconv( $charset, $to_charset, $blog_name );
} elseif ( function_exists('mb_convert_encoding') )
{
$to_charset = locale_charset(false);
$title = mb_convert_encoding( $title, $to_charset, $charset );
$excerpt = mb_convert_encoding( $excerpt, $to_charset, $charset );
$blog_name = mb_convert_encoding( $blog_name, $to_charset, $charset );
}
locale_restore_previous();
}
-
- 経由検索エンジンのキーワード
-
統計の検索エンジン経由アクセスの使用キーワード表示が日本語に対応していませんので、その文字化け対策です。
(ただし、非日本語の対応が難しいので、文字コード自動判別・変換は行っていません)/b2evocore/_functions_hitlogs.php
の471行目、echo htmlentities($kwout);
を
echo htmlspecialchars($kwout);
に変更します。
- マルチバイト関数が使えない環境での対策
-
海外のレンタルサーバなどでは、マルチバイト関数(mbstring)(
mb_
で始まる関数)が用意されていない場合が多くあります。
Andy氏が作られた mbstringエミュレータ を使うことで、マルチバイト関数が使えない環境でも、主要なmb_*
関数が使えるようになります。
(マルチバイト関数(mbstring) が使える環境では、この変更を行う必要はありません)まず、ダウンロードしたmbstringエミュレータのアーカイブファイルを展開して、出てきたファイル全てを
/conf/
ディレクトリに置きます。次に、
/conf/
ディレクトリにhacks.php
という名前のファイルを作ります。内容は次の通りです。(すでに/conf/hacks.php
がある場合は、適切に内容を追加してください。)<?php
if (!extension_loaded('mbstring')) {
include dirname(__FILE__).'mb-emulator.php';
}
?>内容の前後(
<?php
の前、?>
の後)に余分な改行を入れないよう注意してください。
[...] ��きたファイルを展開する。 2.新バージョンにMUTOさんのトコのこのパッチをあてる。 3.メール投稿の為に新バージョンの/conf [...]