higuchi.com blog

The means justifies the ends

日本語対応 [Nucleusの使い方]

[PR] 本ブログの商品紹介リンクには広告が含まれています

このサイトで使用しているNucleusというBlogシステムを日本語対応させる備忘録です。
このシステム、そのまま使っても基本的な機能は日本語OKなのですが、細かい不具合がないわけではありませんので、それにどう対処するかなどのメモです。これからNucleusをお使いになる方の参考になれば。

[追記:現在では、このメモの内容など、ボランティアのみなさんが行った日本語化対応を施してある日本語版パッケージが配布されています(Nucleus日本語公式サイト)ので、それを使えばこの作業は必要ありませんが、日本語パッケージの中身はどういうことをやっているのかにご興味がある方は参考にしてください。]

なお、
・PHPが使える環境がある(できればPHPはマルチバイト対応)
・MySQLサーバが使える環境がある
・PHPプログラムのテキストファイルを編集できる
という方を対象にしています。あしからず。
このメモで使用しているNucleusのバージョンは2.0、Webサイトの表示文字コードとPHPの内部文字コードは、いずれもEUC-JPを使っていることを前提にしています。

このメモは随時追記、更新していきます。また、みなさんからの「わからんぞ」「うまくいかない」といったコメントも歓迎です。ある程度まとまったところで、オリジナルのコードを修正してもらえる部分は修正を依頼しようと思います ■Nucleusをインストールする まず、Nucleusをダウンロードして、マニュアルにしたがってインストールします。
手順をかいつまんで説明すると
・ファイルを展開し、ディレクトリ構造を保ったままWebサーバーのドキュメントルート以下のどこかのディレクトリにアップロードする
・ディレクトリやファイルのパーミッションを設定する
・インストールスクリプトのURLをブラウザから開き、データベースにアクセスするための情報やファイルパスなどを設定する
という順序です。
マニュアルをxx.nakahara21.netのまみおさんが日本語に翻訳してくださったものが日本語公式サイトにあります。
http://japan.nucleuscms.org/documentation/
■日本語ランゲージファイルをインストールする メニューなどの文字を日本語にするためのファイルをダウンロードして、展開し、nucleus/languagesディレクトリに置きます。Shift JIS、EUC、UTF-8用にそれぞれ別のファイルが用意されていますので、自分のサイトで使っている表示用文字コードと同じものを使います。インストール後、管理画面でDefault Languageをjapanese-なんとか(なんとかの部分は文字コード名)に変更すれば、管理画面などが日本語で表示されるようになります。
chrome さん作の日本語ランゲージファイルをベースに未翻訳の部分を追加で翻訳し、Version 2.5で追加された用語を足したものが本家nucleus.orgサイトからダウンロードできます。
同じものがここからもダウンロードできます。

■表示されるページの文字コードやlocale(言語環境・地域情報)を設定し、固定の文字列を翻訳する Nucleusでは、ページのデザインをテンプレートとスキンを使って組み立てます。
テンプレートはページを構成する部品です。例えば、記事一覧のリスト、記事本文、コメント文といった部品のひとつひとつになにをどういう順番で表示するかがテンプレートとして定義されています。
スキンはページ全体のデザインで、スキンの中にテンプレートで定義した部品を組み込んでページを完成させます。
このテンプレートとスキンを編集してページの中の文字やページ全体のデザインをカスタマイズします。
Admin Area(管理画面)から[Nucleusの管理...]をクリックするとテンプレートとスキンを編集する画面へのリンクが表示されます。

・スキンの編集
ナビゲーションのメニューなど、画面上の固定の文字がbaseのスキンの中に書かれていますので、これを日本語に翻訳します。

また、RSSフィードの文字コードを設定するために、xmlrssとxmlrss2の中のMain Indexの[編集]を選んで、最初の行を
<?xml version="1.0" encoding="ISO-8859-1"?>
から
<?xml version="1.0" encoding="euc-jp"?>
に変更します。また、
<language>en-us</language>

<language>ja-jp</language>
に変更します。

・テンプレートの編集
まず、defaultとdetailedの各テンプレートのLocaleをenからja_JP.EUCに変更します。
この変更を行うと、今までたとえば“14 July”と表示されていたところが突然“14 7月”などとおかしな表示になります。これを修正するには、テンプレートの中の語順などを書き換える必要があります。上の例の“14 July”と表示されていたところは、テンプレート上では“%d %B”となっていた部分。%dが日付の数字だけを表示する記号で、%Bが月の名前を表示する記号です。これを、例えば“%m/%d”と書き換えると“07/14”となるし、“%B%d日”とすれば“7月14日”と表示されます。この「%なんとか」の記号はstrftime関数で使われているものそのものです。くわしくはPHPのマニュアルopengroup.orgのマニュアルを参照してください。
そのほか、固定文字の翻訳や語順の変更を行います。

上記の変更を施したスキンとテンプレートのファイルをWebで公開しています。まだ自分でスキンやテンプレートをいじっていなくて、これから新しくインストールするという方はこれをそのままImportすれば、上記の変更作業はいりません。
Importするには、スキンの編集画面の下のほうにある[スキンのImport/Export...]機能を使います。
Importする際にローカルファイルではなくURLを指定するようにし、
http://www.higuchi.com/downloads/skindata-eucjp.xml (内部コードがEUC-JP)
http://www.higuchi.com/downloads/skindata-sjis.xml (内部コードがShift JIS)
http://www.higuchi.com/downloads/skindata-utf8.xml (内部コードがUTF-8)
のいずれかを入力します。スキンとテンプレートの名前がぶつかるという意味のエラーが出ます。上書きしてもかまわないときは上書きするチェックボックスにチェックをつけて、今使っているスキンやテンプレートの設定を残したいときはチェックをつけずにImportします。
システムによってはLocale名が通用しない場合があるかもしれません。その場合はテンプレートの編集画面を一つ一つ開いて、各テンプレートのLocaleをお使いのシステムに合ったものに書き換えてください。
表示用文字コードと内部文字コードが違う設定になっているシステムをお使いの場合は、内部文字コードに合ったファイルをインポートして、それぞれのテンプレートの中にあるHTTPヘッダー部分のcharsetを表示文字コードに合わせて書き直してください。

※注意※ 上書きでImportすると、それまでご自分で行った変更もすべて元に戻ってしまいますので、くれぐれもご注意ください。また、このスキンとテンプレートはまだ十分テストされていません。いろいろ不具合があるかもしれません。ご了承ください。

■globalfunctions.php のパッチ ・カテゴリ名に日本語が使えるようにする
カテゴリ名にアルファベット、半角スペース、数字しか使えないようになっているので、日本語の文字コードも通るようにするためのパッチを当てます。
チェックを甘くして、文字数が1文字以上ならいつもTrueを返すというのでもOKかもしれません。
512行目:isValidCategoryName関数全体を差し替え
function isValidCategoryName($name) {
return eregi('^[a-z0-9]+[a-z0-9 ]*[a-z0-9]+$', $name);
}
を次のように変更します(ただし、これは内部文字コードがEUCの場合しか動きません)。
function isValidCategoryName($name) {
$ascii = '[\x00-\x7F]'; # 1バイト EUC-JP文字
$twoBytes = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'; # 2バイト EUC-JP文字
$threeBytes = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト EUC-JP文字
$character = "(?:$ascii|$twoBytes|$threeBytes)"; # EUC-JP文字
return preg_match("/^$character+$/", $name);
}
なお、同じことを実現するのに、カテゴリ名はASCII文字だけで指定して、カテゴリの内容(Description)を表示するプラグインを使う、という方法もあります。このほうがエレガントかもしれません。くわしくはまみおさんのご説明を。

・文字列の後ろをちょん切る関数の修正
長い文字列を指定の長さで切る関数がありますが、これがシングルバイト文字前提で作られているので、日本語などダブルバイト文字列では文字化けします。これを修正するパッチ。
550行目:shorten関数の中 //2. Actual Shortening の下
if (strlen($text) > $maxlength)
$text = substr($text,0,$maxlength-strlen($toadd)) . $toadd;
を次のように変更します。
$text = mb_strimwidth($text, 0, $maxlength, $toadd); マルチバイト対応でないPHPの場合は次のような感じでもたぶんOK(ただし、EUCの場合のみ)。
if (strlen($text) > $maxlength) {
$text = substr($text,0,$maxlength-strlen($toadd));
while (ord($text[-1]) == 0x8F || preg_match_all("/[\x8E\xA1-\xFE]/", $text, $tmp) % 2) {
$text = substr($text,0,strlen($text)-1);
}
$text .= $toadd;
}

・<%archivetype%>変数の表示翻訳
スキンやテンプレートの中で使う<%archivetype%>という変数があります。これは、例えばアーカイブ一覧のページのメニューのスキンで“次の<%archivetype%>”と書いておくと、表示しているアーカイブ一覧の種類によって“次の日”とか“次の月”というように表示を変えるために使うのですが、この“日”と“月”に相当する文字がプログラムの中に埋め込まれているため、ランゲージファイルを翻訳してもここだけ“day”、“month”と英語で表示されてしまいます。これを修正します。なお、将来はこの文字をランゲージファイルに収めるようにする予定のようです(TODOと書いてある)。
400行目付近:
$archivetype = 'day'; と $archivetype = 'month'; という部分を探して、それぞれ $archivetype = '日'; と $archivetype = '月'; に修正する。

■BLOG.phpのパッチ ・イメージポップアップウィンドウの文字化け修正
この修正は開発者に報告済み、すでにCVSには反映されていますので、次のリリースでは治っているはずです。
1170行目:
$vars['rawpopuplink'] = $CONF['Self'] . "?imagepopup=" . htmlspecialchars($filename) . "&width=$width&height=$height&imagetext=" . htmlspecialchars($text); を次のように変更します。
$vars['rawpopuplink'] = $CONF['Self'] . "?imagepopup=" . htmlspecialchars($filename) . "&width=$width&height=$height&imagetext=" . urlencode(htmlspecialchars($text));
■NOTIFICATION.phpのパッチ ・コメントが投稿された際などの通知メールの文字コード修正
49行目:
@mail($address, $title, $message , "From: ". $from . "\nContent-Type: text/plain; charset=iso-8859-1"); を次のように変更
@mb_send_mail($address, $title, $message , "From: ". $from . "\nContent-Type: text/plain; charset=ISO-2022-JP"); php.iniの中に
mbstring.func_overload = 1 などと奇数の数字が指定してあれば、@mb_send_mailの部分は@mailのままでもOK。

Coming soon: プラグインの日本語化

コメント

catさんのコメント:

大変参考になりました。
うちでは(おそらく)mb_strimwidthが変な動作を起こしたようで画面中央にセレクトボックスが現れる怪奇現象が起こったこと以外はスムーズにいけました^^;
(内部処理エンコードの設定を入れればうまくいくかも。)
2003/7/15 10:45

catさんのコメント:

uelencodeのところエラー出たので調べたら、urlencodeのtypoみたいですね。ご報告です。
(このコメントは削除してかまいません)
2003/7/15 10:47

樋口 理さんのコメント:

cat さん。ありがとうございます。typoは修正しておきました。
怪奇現象、気になりますね。原因を追究してつぶしたいところ。なにか手がかりがあればお教えください。再現実験してみます。
2003/7/15 12:05

タカさんのコメント:

はじめまして。Nucleusを始めたばかりの者です。参考にさせていただきました。ありがとうございます。UTF-8でやってます。
ところで、うちはたまに管理画面でなぞのセレクトボックスが出現しますが、catさんのとは違うみたいですね。スクロールさせると消えたり出たりするので何となくCSSがらみっぽいです。
2003/7/24 14:53

樋口 理さんのコメント:

ここでも謎のセレクトボックスですか。
再現できる手順をみつけたら、ぜひ教えてくださいませ。

UTF-8とは、チャレンジャーですね(笑)。すばらしい。
2003/7/25 23:47

Tatsuya-SOGAさんのコメント:

NucleusCMSをインストールして、日本語化のためにこちらを参考にさせていただきました。ありがとうございます。
1つ気づいた点があるのですが、globalfunctions.phpの中の512行目のisValidCategoryName()の部分で、isValidDisplayNameの関数名が書いてありますが、この関数はメンバー名と管理者名のプリントの関数なので修正しなくてもいいんですよね?
2003/7/29 17:45

noppoさんのコメント:

はじめまして。
僕のblogの文字コードをEUC-JPに変更した際、
>NOTIFICATION.phpのパッチ
を参考にさせていただきました。
いつも貴重な情報をありがとうございます。
2003/7/29 23:50

樋口 理さんのコメント:

tat さん:
> isValidCategoryName()の部分で、isValidDisplayNameの関数名が書いてありますが
あー、ごめんなさい。間違いです。直しました。

noppo さん:
はじめまして。お役に立ててなによりです。
なにかお気づきの点などありましたら、ぜひお教えくださいませ。

ひぐち
2003/7/30 20:15

eccoさんのコメント:

日本語ランゲージファイルの _EBLOG_DISABLECOMMENTS が
「コメントを無効にしますか?」になってますが、
英語ランゲージファイルでは "Comments enabled?" なので意味が逆転してます。
挙動を見ても確かに英語の方が正しいです。
でもそれならこの変数名(?)は妙ですけど。
2003/8/1 22:16

樋口 理さんのコメント:

おっと、そうでしたか。完全に見落としていました。修正しておきます。ありがとうございます。
2003/8/2 23:43

ななさんのコメント:

こんにちは。higuchiさんのHPを見ながら設定させてもらい、ついさっき無事に設置できました。ありがとうございました!今は固定言語の日本語化に取り組み中です。・・コレが思うように変わってくれず困ってます。固定文字の翻訳や語順の変更を施したスキンとテンプレートのファイルがもしまだありましたら、わたしも使ってみたいです。どうぞ宜しくお願いします。
2003/9/9 11:29

樋口 理さんのコメント:

こんにちは

> 固定文字の翻訳や語順の変更を施したスキンとテンプレートのファイルがもしまだありましたら、わたしも使ってみたいです。

上の「Skinのインポート」のあたりの手順を追ってみてください。翻訳したスキンとテンプレートに入れ替わります。
2003/9/9 12:05

ななさんのコメント:

こんばんは!
教えていただいた通りskinのインポートしてみたら、無事できました。
ご報告までに・・

ほんとにわかりやすくて参考になります。
どうもありがとうございました。
2003/9/9 22:43

スオミさんのコメント:

私もHiguchiさんのページを見ながらなんとかHPをNucleus化できました。
初心者にもわかり易くて、とても助かりました。
ありがとうございます。

まだまだわからないことがたくさんあるので、みなさんのサイトを参考にさせていただきながら頑張りたいと思います。
2003/9/19 22:09

みるくさんのコメント:

こんばんわ!始めまして^^
やっとここへたどり着きました♪
えっと、質問してもいいですか?
分からない所があるのですが、ここのHPでは、検索すると、
あ=%82%A0と、あ=%A4%A2
両方でるやり方教えてください。
ここでは両方でるのですね!!すごいです。
現在、Flashで検索を作ったのですが、何故か変数があ=%82%A0で送信されてしまいます;;宜しくお願いします。
説明が下手ですみません^^;
2004/2/21 03:58

樋口 理さんのコメント:

> 分からない所があるのですが、ここのHPでは、検索すると、
> あ=%82%A0と、あ=%A4%A2
> 両方でるやり方教えてください。
「あ」が%82%A0となるか%A4%A2となるかは、検索文字を送信するフォームの文字コード設定によって変わります。前者はShift JIS、後者はEUC-JPです。
両方出る、というのがどういう意味かよくわかりませんが、このサイトはEUCでフォームを作っていますから、「あ」は%A4%A2になります。
これまたFlashのことはよく知りませんのでアレですが、「あ」が%82%A0で送信されるということは、FlashがShift JISで送信しているということです。
もし、受け取る側のBlogサイトをEUC-JPで作っているのなら、Flashの文字コードもEUC-JPに合わせる必要があります。(どうやるのかは、知りません)
あるいは、受け取る側のBlogサイトをShift JISで作るという手もあります。
そのどちらもできないのであれば、受け取る側のBlogのプログラムを、受け取ったShift JISの文字列をEUC-JPに変換してから検索処理をするように修正することになろうかと思います。
2004/2/22 21:38

みるくさんのコメント:

Flash側の質問で回答が、PHP側で漢字コードの変換が必要になりますとのことでしたので、BlogでのEUC-JPとShift JISで検索出来るようにやりたいのですが、検索処理でどのように、プログラムを変えたらいいのか分からないです・・・
2004/2/23 23:58

樋口 理さんのコメント:

> BlogでのEUC-JPとShift JISで検索出来るようにやりたいのですが
Blog(少なくともNucleusのシステム)では、いろんな文字コードを判別して検索するような造りにはなっていません。システムをEUC-JPで設定していればEUC-JPで、Shift-JISで作っていればShift-JISでしか検索できません。

検索文字列をPOSTするフォームの文字コードが違うのならば、POST側で同じ文字コードに合わせる必要があります。どうしてもあわせられないのなら、POSTされたデータを受け取るPHPプログラム側でmb_convert_encodingか何かを使って、文字コードを変換する処理を検索処理の前に入れてみてください。
2004/2/24 00:27

タカ(♂)さんのコメント:

Nucleus(JP)のフォーラムからきました。

↑で、charset=iso-2022-1 というのがありますが、たぶん iso-2022-jp にしたほうが将来的にシアワセになれるとおもいます。

今後参照されるかたのために。
2004/2/24 16:40

樋口 理さんのコメント:

ご指摘ありがとうございます。修正しておきました。
2004/2/24 17:39

soumaさんのコメント:

本日Nucleusをインストールしたsoumaと申します。
Nucleusについて質問があります。
管理画面において「設定変更」のボタンをクリックした後になかなか反映されないという現象が起こります。何度も設定変更作業を続けているとやがては反映されるのですが編集がスムーズではありません。
また、アイテムを追加してもやはり反映されず、アイテムとしても記録に残っていません。
これは一体何が原因なのでしょうか・・?
2004/6/30 21:25

樋口 理さんのコメント:

申し訳ありませんが、もう少し問題を切り分けて(原因を絞り込んで)いただかないと、私にはちょっと分かりかねます。

サポートフォーラムで質問してみてはどうでしょうか?たくさんの方が集まっていますので、似たような症状を経験したことのある方がいらっしゃるかもしれません。
http://nucleus.fel-is.info/bb/
2004/6/30 21:33

soumaさんのコメント:

すみません。書き方が悪かったようでしたね。

今見てみた所、アイテムが反映されていました。反映に時間がかかっていたようです。
お世話がせしてすみませんでした。
2004/6/30 21:38

コメントを書く

関連するかもしれない記事

文字化け解消 [BlogRolling表示プラグイン]

このサイトでも使っている、お気に入りブログをリスト表示してくれるサービスの老舗BlogRolling、本来は...

この記事を読む »

迷子よけ [パンくずリスト]

このBlogのデザインを定義している“スキン”を少しいじって、ページのアタマに、いわゆる“パンくずリスト...

この記事を読む »

Joiもすなるblog [Nucleus に日本語を通してみよう]

「今さら何を」と言われそうですが、Joi に触発されて、blog (Weblog)に興味を持ちはじめました。いわゆ...

この記事を読む »

higuchi.com blog http://www.higuchi.com/

広告入り [Nucleusの携帯対応]

先日、銀座某所で「樋口さんのブログは携帯から読めないのか」というお問い合わせをいただいていた(じ...

この記事を読む »

Nucleusの記事できました [UNIX USER 2004年1月号]

以前にお知らせしたNucleusの記事を寄稿したUNIX USER誌が発売されました。 編集部のご好意で記事の...

この記事を読む »

私は如何にして心配するのをやめてスパムを愛するようになったか [CRM114の日本語対応]

さて、先日のインストール編に続いて、CRM114の日本語対応改造です。 CRM114のFAQには“BUT if you us...

この記事を読む »

ひろゆき像のAA

ズレトル [WIRED の「日本のAA紹介」が実に残念な件]

雑誌《WIRED》の創刊15周年記念だった先月号に載っている Lisa Katayama の西村博之(ひろゆき)につい...

この記事を読む »

改築中 [DokuWikiの日本語化]

ここ1ヶ月ほど、higuchi.comのサーバーを少しずつアップグレードしています。旧サーバーではNucleusを日...

この記事を読む »

解説書できました [Nucleusでつくる!最強のブログサイト]

このブログを構築するのに使っているNucleus(ニュークリアス)というブログツール、機能が豊富で無料な...

この記事を読む »

Nucleus の終わりと始まり [LMNucleus 3.66]

higuchi.com を10数年にわたって支えてきたブログシステムの Nucleus CMS が、開発終了を宣言してし...

この記事を読む »