あれ、どうやったっけ

(たぶん)テキストサイト風blog。文が安定するまで書き直しあるからメンゴ。

(日本語しゃべれねぇんなら死ねよ (ドリフターズ風に (RDoc的な意味で)))

ジャップランド在住のジャップなので、白b(自主規制)の真似をしたところで本家 pzdb ほど英語書けるわけないだろ

RDocを日本語で書いておいて、後で翻訳必要ならアテ込む方法はないのか? です。

RDocのi18n対応として英語で書いて日本語でも一緒です。

何が悲しくて異人の言語を使わなければいけないのかという大東亜共栄圏満開の皆様もいらっしゃるかと思うのですが、僕はうそんこ英語しか書けないだけです。

一応世の中英語バベルの時代でございまして、バズるには英語、英語、英語。きっとヤハウェが言語をイジくりまた世界を混乱させてくださいますよ。軌道エレベータが完成するころに。どうでもいいですね。

まあパッパと母国語で説明書いて後で英語版付ける、でもいいんじゃないスかね。初めから日英併記とか辛すぎるわ。

必要なもの

  • ruby + rdoc(標準装備)

lib/ruby/x.x.x/rdoc ディレクトリ以下に i18n があるものならどれでも、ただしrdoc 5.0.0は日本語のRDoc吐かないバグありなので5.1.0以上か4.x系か。

  • gettext

窓OSの人は https://mlocati.github.io/articles/gettext-iconv-windows.html から入れてパス通す。

Linuxの人はaptかyumpacmanかなんか。macは自力ビルドの刑な(brew的な意味で)。BSDの人には何か言ったら殺されるから言えない……。

gem install gettext

どうやる

まずこんなゴミを用意します。名前はfuck.rbでいいです。まともな外人見たらドン引き

# テストクラス
# テストやで
class Fuck

  # AAAをする
  def aaa
  end
  
  # BBBをする
  def bbb(x, y)
  end

end

poのテンプレを作ります。

rdoc -f pot

で、doc/rdoc.poってのができるわけです。もしあなたが僕みたいにあたまおかしい人で日本語でコメント書いてる場合、doc/rdoc.potの

"Content-Type: text/plain; charset=CHARSET\n"

のcharsetにutf-8指定しないとPoEditとかEmacsのpo-modeとかが文字化けしたり、後でやるrmsginitあたりでコケるので注意。utfでもUTFでもよしなにしてくれるでしょうけれど。

後の個所は適宜お好みで直しやがってくださいっていうか、gettext触ったの初めてなのでもっとエライ人に説明してもらうとしてだ……。

# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSEION\n"
"Report-Msgid-Bugs-To:\n"
"PO-Revision-Date: YEAR-MO_DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language:\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

#. Fuck#aaa
msgid "AAAをする"
msgstr ""

#. Fuck#bbb
msgid "BBBをする"
msgstr ""

#. Fuck
msgid ""
"テストクラス\n"
"テストやで"
msgstr ""

まあとにかく直したッスね? じゃあ英語版ファイルを作りましょう。

New-Item -ItemType directory locale/en # mkdir -p でもOK
rmsginit --input doc/rdoc.pot --output locale/en/rdoc.po --locale en

# フルネームとかメルアド聞かれるから ashitano joe とか fuckme@invalid とか

で、できたlocale/en/rdoc.poの「msgstr(訳語を書くところ)」を編集して

# English translations for PACKAGE package.
# Copyright (C) 2017 THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# worker <a@a.invalid>, 2017.
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSEION\n"
"Report-Msgid-Bugs-To:\n"
"PO-Revision-Date: 2017-11-08 16:42+0900\n"
"Last-Translator: worker <a@a.invalid>\n"
"Language-Team: English\n"
"Language:\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"\n"

#. Fuck#bbb
msgid "BBBをする"
msgstr "I cannot do anything."

#. Fuck
msgid ""
"テストクラス\n"
"テストやで"
msgstr "What's wrong with you?\n"
"f**k!"

#. Fuck#aaa
msgid "AAAをする"
msgstr "I want to make love to you."

というような素晴らしい説明を世界中にばらまく準備をしましょう! ごめん、正直大人の対応したほうが良いと思う

なおpoをmoにする必要は(こちらでは)特にないというか、po_parser呼んで読んでるので大丈夫っぽいです。

で、最後はこれタイプしてね。

rdoc --locale en -o doc_en

これで英語になったRDocが沸いてくるかと思います。こんなの。

f:id:osaka_zumai:20171108170048j:plain

で、たぶんRDocの中にrdoc.poとかrdoc.potとか入ってると思うんですが --exclude="rdoc.po." みたいなのじゃ消えなかったのでどうしたもんかなぁ、と。そりゃまあ読まないと翻訳できんわけですし。

一応出来たっちゃ出来たからよしとする。意外にググってもないのですよね「コメント英語と日本語で書けとかウザいんでRDocをgettextで翻訳したいんですけどぉ」な奴。

なお https://ruby.github.io/rdoc/RDoc/Generator/POT.html にはupdateの仕方も書いてるから参照しておこう。