OTP-R14Aとerlang_gettext
ここのところ #prfm やら #aira やらの記事ばかりだったので、ちょっとerlangの話題も。
erlang OTP-R14A
しばらく見ていない間にerlangでOTP-R14Aがリリースされていたのでアップグレードしてみた。なお、OTPでは末尾がAとなっているのはベータ扱いなので、普通の使い方をする人はBになるまで待った方がいいが、いまのところ、普通に使えてる。偏向箇所は大杉なのでREADMEを見るべし。なお、erlang-shellはついに5.8になった。
erlang_gettext
OTP-13Aでunicode対応したerlang OTPだが、i18nやl12nはしていなかった。あくまで、これまで文字がバイト扱い(8bitのリスト)が、文字のリストに変わっただけ。それでも十分嬉しいが、gettextしてくれると嬉しいなぁと思っていたら、そんなナイスなモジュールを、GitHub - noss/erlang-gettext: Deprecated mirror of erlang gettext lib, use http://github.com/etnt/gettextで発見。速攻でgit cloneしてインスコ。
GNUのpoファイルをほぼそんな感じで使えるとってもナイスなモジュールなのだが、どうもおかしい。
japanese.poはこんな感じ。
# 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, YEAR.
#
# NB: Consider using poEdit http://poedit.sourceforge.net
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2003-10-21 16:45+0200\n"
"PO-Revision-Date: 2010-06-23 22:07+0900\n"
"Last-Translator: FULL NAME\n"
"Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"#: esmb_gettext.erl:13
msgid ""
"Hello World"
msgstr ""
"こにちわせかい"
で、サンプルのプログラムはこんな感じ。
-module(example2). -export([run/0]). -include("../include/gettext.hrl"). run() -> io:format("~ts~n", [?TXT("Hello World")]).
で、こんなセッション。
$ erl Erlang R14A (erts-5.8) [source] [64-bit] [smp:4:4] [rq:4] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.8 (abort with ^G) 1> c(example2). {ok,example2} 2> gettext_server:start(). {ok,<0.39.0>} 3> example2:run(). Hello World ok 4> put(gettext_language, "ja"). undefined 5> example2:run(). ã??ã?«ã?¡ã?ã??ã??ã?? ok 6>
gettext_serverがトランスレートしてくれるのだが、日本語文字列が化けるようにしか見えない。READMEのサンプルセッションではスウェーデン語でうまくいくでしょほらとかなっていて、スウェーデン語のアルファベットも知らんのにどうしろとww
うーむ。まだ調べないとよくわからにゃい。