Hikiプラグインの作り方 第三回 日本語の表示

何故、日本語文字を書いてはいけないのか。
それは、Hikiがユーザー(ブラウザー)の情報を読み取って英語を期待していれば英語を、日本語を期待していれば日本語を表示する、という風になっているからです。プラグインが表示するテキストを直接日本語にしてしまうと、英語を期待している人にも日本語が表示されてしまうので不親切なのです。


これまで、プラグインを作る際にはファイルを一つ作ってmisc/pluginフォルダーに入れていました。
(HTMLタグなどでなく)自然言語(日本語や英語など)を表示する場合には更に、

  • misc/plugin/ja や
  • misc/plugin/en

などのフォルダーにもファイルを作る必要があります。


例えば前回作ったnewプラグインを、多言語対応にしてみましょう。
ひとまずは英語と日本語に対応することにして、三つのファイルを作ります。
ファイル名はどれも揃える必要があります。

  • misc/plugin/new.rb
  • misc/plugin/en/new.rb
  • misc/plugin/ja/new.rb


misc/plugin/new.rb

def new
  %Q|<em class="new">#{new_label}</em>|
end

二つ、解説することがあります。
%Q|〜〜|は、文字列を作るRubyの記法で、中身をダブルクォート(")で括るのと同じ効果があります。
「%Q」はこのままでなければいけませんが、縦棒(|)の所は「!〜〜!」でも「[〜〜]」でも何でも構いません。今回はem要素のclass属性の所でダブルクォートを使いたいのでこっちの書き方を使ったのです。
ダブルクォートと同じなので、中では#{ }で括ってRubyの式が使えます。
new_labelというのはメソッド名で、状況に応じて「NEW!」とか「新規記事!」とかの文字列を返してくれるメソッドです。帰ってきた文字はnewメソッドの中でそのまま表示されます。
とは言っても今は存在しないので、エラーになります。


次に、このnew_labelメソッドを作成しましょう。
ファイルを変えます。


misc/plugin/en/new.rb

def new_label
  'NEW!'
end


misc/plugin/new.rbファイル中に存在しないメソッドがあった場合は、自動的にenやjaフォルダーなどの同じファイル(new.rb)に、そのメソッドを探すようになっています。
僕のブラウザーは日本語設定なのでmisc/plugin/ja/new.rbを探すことになります。
このファイルの中にはまだ何も書いていないので、エラーになります(ブラウザーが英語の設定だったら、英語で「NEW!」と表示されている筈です)。
作りましょう。


misc/plugin/ja/new.rb

def new_label
  '新規記事!'
end

これで表示される筈です……が、文字化けしているかも知れません。
英語以外の文字を表示する場合には、(Hiki 0.8.8.1では)必ず文字エンコーディングEUCにして保存してください。日本語であればEUC-JPです。でないと文字化けします。


これで晴れて、{{new}}と書いた所に「新規記事!」と表示されます。
まあここでは、「NEW!」の方が格好いいかも知れませんが……。


さて、misc/pluginフォルダーにはenやjaの他にもde、fr、itフォルダーが存在します。これらにはファイルを作らなくていいのでしょうか?
実はOKです。
この中にファイルがなければ、勝手にenやjaを探してファイルを読み込み、(ユーザーは読めないかも知れないけど)その言語の文字を表示します。
注意しなければならないのは、de/new.rbファイルはあるのにその中にnew_labelメソッドが無い、という場合で、この場合はエラーになります。ファイルを作らなくてはいけないなら、英語でもいいので取り敢えずメソッドを作っておきましょう。

他のやり方

misc/plugin/new.rbファイル中ではnew_labelメソッドを呼ぶようにしていますが、インスタンス変数(例えば@new_label)を使う人もいます。
この場合、言語ファイルの中ではメソッドではなくインスタンス変数を設定します。


misc/plugin/new.rb

def new
  %Q|<em class="new">#{@new_label}</em>|
end


misc/plugin/en/new.rb

@new_label = 'NEW!'


misc/plugin/ja/new.rb

@new_label = '新規記事!'

EUC-JPで)


どっちでもきちんと動くし、実際最初から付いてくるプラグインの中でもどっちの方法も見受けられます。
メソッドを使う方が多数派のようなので、何も無ければメソッドを使っておきましょう。