RDoc i18n$B2=%Q%C%A(B

黒田 拓 と言います。

個人的な必要にかられて、RDocをi18n化してみました。パッチは1.8.6-p36に対
するものです。

Rubyã®ã‚½ãƒ¼ã‚¹ã«æ¬¡ã®è¦é ˜ã§è¤‡æ•°ã®è¨€èªžã§è¨˜è¿°ã—ãŸã‚³ãƒ¡ãƒ³ãƒˆã‚’æ›¸ã„ã¦ãŠã„ã¦ã€


Print out `hoge’

lang: ja

「ほげ」を出力

def hoge
puts “hoge”
end

これからドキュメントを生成するときに

*日本語のみ
*英語のみ
*日本語と英語両方

から選べるようになります。

詳細は http://www.hinet.mydns.jp/~hiraku/hiki/hiki.cgi?RDoci18n に書いて
おきました。

ã‚‚ã—å–ã‚Šè¾¼ã‚“ã§ã„ãŸã ã‘ã‚Œã°å…‰æ „ã§ã™ã€‚

e$B$J$+$@$G$9!#e(B

At Sat, 4 Aug 2007 19:09:46 +0900,
KURODA Hiraku wrote in [ruby-dev:31345]:

e$B8D?ME*$JI,MW$K$+$i$l$F!"e(BRDoce$B$re(Bi18ne$B2=$7$F$_$^$7$?!#%Q%C%A$Oe(B1.8.6-p36e$B$KBPe(B
e$B$9$k$b$N$G$9!#e(B

e$B4pK\E*$K$O!"$3$&$$$C$?5!G=DI2C$Oe(B1.8e$B$G$O$J$/e(B1.9e$B$G$7$g$&!#e(B

e$B$3$l$+$i%I%-%e%a%s%H$r@8@.$9$k$H$-$Ke(B

*e$BF|K\8l$N$_e(B
*e$B1Q8l$N$_e(B
*e$BF|K\8l$H1Q8lN>J}e(B

e$B$+$iA*$Y$k$h$&$K$J$j$^$9!#e(B

e$B8D?ME*$J46A[$H$7$F$Oe(B

  • lang: e$B$,;k3PE*$J6h@Z$j$H$7$FG’<1$7$E$i$$e(B
  • e$B=PNO$5$l$?e(BHTMLe$B$Ne(Bcharsete$B$,e(Biso8859-1e$B$N$^$^e(B
  • e$B0[$J$k%(%s%3!<%G%#%s%0$O$I$&07$&$Y$-$+e(B
    e$B$H$$$C$?$"$?$j$,5?Ld$G$9!#e(B

e$B:Y$+$$$3$H$r$$$&$H!"e(Bremove_unwanted_lange$B$,$A$g$C$H$^$I$m$C$3$7$$e(B
e$B$+$J!#e(B

def remove_unwanted_lang(comment)
  dl = @options.lang        # Document Language
  strict = @options.lang_strict
  sl = nil                  # Section Language
  r = []
  comment.each_line do |l|
    if l.sub!(/^(\s*\#?)\s*lang:\s*([a-z]{2})(?=\s|$)/n, '\1')
      sl = $2
      r << l
    elsif sl == dl or !(strict || (dl && sl))
      r << l
    end
  end
  comment.replace(r.join)
end

黒田拓です。
なかださん、お返事ありがとうございました。

Nobuyoshi N. さんは書きました:

åŸºæœ¬çš„ã«ã¯ã€ã“ã†ã„ã£ãŸæ©Ÿèƒ½è¿½åŠ ã¯1.8ではなく1.9でしょう。

言われてみればそうでした。
é ‚ã„ãŸåŠ©è¨€ã‚’å…ƒã«ãƒ‘ãƒƒãƒã‚’ä½œã‚Šç›´ã—ãŸã®ã§ã™ãŒã€ä»Šå›žã€ãƒ‘ãƒƒãƒå…ƒã¯1.9にしました。

細かいことをいうと、remove_unwanted_langがちょっとまどろっこしい
かな。

修正、ありがとうございました。自分の書いたコードがえらくスッキリと変わっ
ていて驚きました。

  • lang: が視覚的な区切りとして認識しづらい

とりあえず:section:とかと同様に、:lang: を区切りにするようにしたのです
が、あまり変わらないですね。悩ましいところです。

他に、

    if l.sub!(/^(\s*\#?).*\s*lang:\s*([a-z]{2})/n, '\1')
      sl = $2

などとして「`:lang: ja’の前後に任意の文字を入れられる」とかも考えてみた
のですが、条件がゆるすぎるような気がして今回提出のパッチには入れていない
です。

後は使い方の問題にして、ドキュメントを書く際に言語指定の前に空行だけのコ
メント行を入れて目立たせるとかでしょうか。

  • 出力されたHTMLのcharsetがiso8859-1のまま
  • 異なるエンコーディングはどう扱うべきか
    といったあたりが疑問です。

まず、デフォルトのcharset指定をUTF-8に変更してみました。

そして、出力するcharsetに応じて、Kconvã‚’ä½¿ã£ã¦å¤‰æ›ã™ã‚‹ã‚ªãƒ—ã‚·ãƒ§ãƒ³ã‚’è¿½åŠ ã—
てみました。
起動時に

  • -K オプションが指定されていたらKconvを使って変換する
  • `-k euc’ などとして変換元の文字コードを指定出来る
  • -kã«ã‚ˆã‚‹æŒ‡å®šãŒãªã„å ´åˆã¯ã€å¤‰æ›å…ƒæ–‡å­—ã‚³ãƒ¼ãƒ‰ã«ã¯Kconv::AUTOを使う
    という動作です。

~/$ rdoc -l ja -K -k euc -c Shift_jis
といった具合です。

他の言語がどう記述されるか見当がつかなかったので(本当に多言語なドキュメ
ントをソースに入れるならUTF-8を使うことになるのでしょうか)、僕の方ではと
ã‚Šã‚ãˆãšæ—¥æœ¬èªžã®ã¿ã‚’å¿µé ­ã«è€ƒãˆã¦ã„ã¾ã™ã€‚