Ruby言語やLinuxのネタが多いです。
June 23, 2008 [おもひで]
■ [Misc] Gettextのpgettextとmsgctxt
Ruby-GetText-Packageでmsgctxtをサポートして欲しいという要望があった。パッチもついてたけど、msgctxtを使わなくするだけのパッチなのでそのまま取り込むのはよろしくなさそう。ってか、そもそも、msgctxtって何だろう。ということでちょっと調べてみた。
で、結論から言うと、GNU Gettextの最新マニュアルを細かく読むとすべて書いてあった。
msgctxt自体は2006/7のGNU Gettext 0.15からサポートされた比較的新しい機能で、pgettext(msgctxt, msgid)という関数で使われ、同じ名称のmsgidであっても使う場所によっては違う訳をつけたい場合に使用する(コンテクストごとにmsgidの訳をつけることができる。名前空間を分けるような感じ)。つまり、sgettext(), s_()を置き換えるものだと言える。
#実はsgettext()自体はGNU gettextの(古いバージョンの)マニュアル上でソースが記述されているサンプル的な関数にすぎなかった。
例えば、以下の2つはほぼ同じ意味で使用される(Rubyっぽく書いてみる)。
sgettext("File|Open")
pgettext("File", "Open")
これらは英語の場合、どちらも"Open"となり、翻訳時は"File" + "Open"に該当する翻訳文字列が使用される。pgettextでは"|"のような文字列ではなく関数の引数自体でコンテクストを分ける、というものだ。sgettextだと"|"を文字列として使いたい場合とかにちょっと困るしpgettextに比べ、多少曖昧さが残るもんね。
では、poファイル中ではどのようになるのか。
#: test2.c:3
msgid "File|Open"
msgstr "開く"
#: test2.c:4
msgctxt "File"
msgid "Open"
msgstr "開く"
msgctxt行というのが増えている。この行は翻訳対象では無いので、翻訳者はmsgctxt行とmsgstrを読んでOpenの適切な訳をつける。sgettextの"File|Open"形式だと不慣れな翻訳者は"ファイル|開く"と訳してしまう、なんてちょっと笑えない笑い話があったのだけど、そういった間違いは少なくなりそう。 ちなみに、現状のRuby-GetText-Packageではこのmsgctxt行でparse時にエラーとなってしまうので、今回のレポートが来たというわけだ。
■ では、実際、これはどのようにmoファイルの中で表現されているのだろう。答えは簡単で、sgettextのときに"File|Open"として表現されていた部分が"File\004Open"として区切り文字が"\004"(<EOT>)に変わっただけだ。なるほど、これなら比較的簡単にRuby-GetText-Packageにも適用できそうだ。
■ 余談。Ruby-GetText-Packageがsgettextを実装したのが2004/8で、GNU gettextでmsgctxtが実装されたのが2006/7だ。どおりで気づかなかったわけだ。他にも便利な機能がいくつか追加されているみたいだし見直さないといけないのかな。
June 28, 2008 [おもひで]
■ [Misc] 東京の人口
この前ロラン夫妻を六本木ヒルズに案内したときに、東京って何人くらいいるんだっけ?という話になった。
そういや、そういうのって全然知らないなぁと思って調べてみたら、そのものずばりの情報がWikipediaにあった。すばらしい。
これを読むと、定義の違いはあるものの、ざっくり3,500万人くらいで世界一位なのね。こりゃ電車が混雑するわけだ。
2位のニューヨークは2,100万〜2,700万人くらい。東京はニューヨークよりさらに1,000万人多い計算だ。
3位は韓国のソウルで2,000万〜2,300万人くらい。
大阪(阪神=京都、姫路含む)は1,500万〜1,800万の10位でだいぶ健闘している。ロサンゼルスよりも多いとは驚き。
パリは900万〜1,100万なので、東京の1/3くらいの規模、大阪よりちょっと少なめ、という感じだ。
日本の総人口は1億2,800万人とのことなので、日本人の27%が東京にいることになる。東京と大阪で41%くらい。首都圏への集中っぷりったらすごいなー。
Wikipediaには世界の国の人口順リストもあった。これを見ると東京の3,500万という人口は、タンザニアとほぼ同じくらい、カナダ、モロッコ、サウジアラビア、オランダ、カメルーンなどの国よりもだいぶ多い。
さきほど1位の東京は2位のニューヨークよりも1,000万人多い、と書いたが、1,000万人ってどれくらいの数なんだろうと思って調べてみたら、1,000万人はギリシャ、ベルギー、ポルトガルなどの総人口と同じくらいだ。Wikipediaの194の国の中で、総人口が1,000万人以下の国は123もある。3,500万以下となると160もある・・・・って3,500万だと国別でも上から34位に位置するのね。
こうやって数字にしてみると東京ってホントでかいなぁ。
