« b2evoでの「Trackback の脆弱性」対策案b2evolution 0.9.0.9 の日本語対応 »

b2evolution 0.9.0.10 の日本語対応

2004/07/10 19:54 | 著者: Jun MUTO [mail] | カテゴリ: b2evolution

b2evolution の日本語対応に関するメモ。(ほぼ 0.9.0.9 の日本語対応 と同じです)

b2evolution はそのままで使ってもそれなりに日本語が使えます。
しかし、ブックマークレット、トラックバックの受信、コメント等があった際の通知メールの文字コード処理などで問題が発生する可能性があります。

さらに、こちらでは検証しておらず予想でしかありませんが、メールでブログに記事を投稿する機能を使う際に、文字コード処理が行われないのでおそらく正常に書き込めないと思います。これは、私は今のところ使う予定の無い機能ですので、どなたかが調査してくださると嬉しいです。

バージョン0.9.0.10について、私が行った対処を書いておきます。
他の環境でも通用するかは不明です。
(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 の233行目の

$start_of_week = 1;

を変更します(0 で日曜、1 で月曜、2 で火曜が週の初めと見なされます)。


ブックマークレット

ブックマークレットの問題は、ブックマークレットのJavaScriptで escape() が用いられていることが原因です。encodeURIComponent() を使用するように変更します。(欧文のみの環境ですと、escape() のほうが問題が少ないようです。しかし日本語等、UTF-8を使用する場合では encodeURIComponent() のほうが無難です)

/admin/tools.php の31行目、38行目、46行目、53行目、87行目の各行に、3個もしくは2個ずつある

+escape(

+encodeURIComponent(

に置き換えます。

この変更を行った後に、ブックマークレットの登録をやり直してください。

/admin/tools.php を書き換えるより、ブラウザのお気に入り/ブックマークに登録したブックマークレットURIを、後から変更(escapeencodeURIComponent に置き換え)したほうが簡単かもしれません。楽だと思うほうでやってみてください)


通知メール

通知メールについて、日本語限定の対処と、言語に限定されない対処を紹介します。(日本語しか使わないのであれば、「日本語限定の対処」を推奨します)

  • 日本語限定でメール出力を奇麗にする対処方法です。携帯電話等で通知メールを受け取る場合はこちらでないと差し障りがあると思います。

    /b2evocore/_functions.php の1316行目の

    $headers[] = 'Content-Type: text/plain; charset='.$locales[ $current_locale ]['charset'];
    

    という部分を、コメントアウト(行の先頭に // を付ける)して

    // $headers[] = 'Content-Type: text/plain; charset='.$locales[ $current_locale ]['charset'];
    

    と変更します。

    それから、/b2evocore/_functions.php の1336行目、

    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 の1336行目の

    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 の前、?> の後)に余分な改行を入れないよう注意してください。

この記事へのトラックバック アドレス

Trackback URL (right click and copy shortcut/link location)

1 トラックバック

トラックバック from: Studio-HYG [訪問者]
Firefoxでectoizeが使えた!
以前のエントリで書いたとおり,ectoを使ってます。で,ectoizeを使ってる...
2004/11/06 @ 23:01

コメントを残す


Your email address will not be revealed on this site.

頂いたURLは表示されます。
(改行が自動で <br /> になります)
(Name, email & website)
(ユーザに、メッセージ・フォームを通じた連絡を許可します (あなたのメール・アドレスは表示されません))
2009年11月
 << <   > >>
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

茶気抄:
このサイトは、私(Jun MUTO)が気になったことをメモしておくために設置しています。
気の向くままに運用しているため、予告なく停止したり、表示がおかしくなったりすることがあります。

当サイトではログの採取を行っています。ご承知おきください。

検索

最近の投稿

XMLフィード

b2