erlang_gettextと(erlang)gettext

erlang_gettextはdeprecatedで、etnt/gettextが現行らしい。だが、そこでも同様の問題が残っていた。
そこでクイックハック。調べた所、file:read_file/1した後detsに格納する際に、そのままbinary_to_list/1して書き込んでいた。OTP13Bからはunicode対応してcharacter型が出来ているのだが、そのことが反映されていない訳だ。iso-8859-1な人たちはunicode対応とかいっても結局255以下のコードの人たちなので気がつかないという。
一応、このパッチは、etnt/gettextにプッシュリクエストしているので、そのうち反映されると良いなぁ。(たった一行だしね)

diff --git a/src/gettext.erl b/src/gettext.erl
index 9bc0031..e155f22 100644
--- a/src/gettext.erl
+++ b/src/gettext.erl
@@ -239,7 +239,8 @@ eat_more(T, Acc)       -> {lists:reverse(Acc), T}.
 
 to_list(A) when is_atom(A)    -> atom_to_list(A);
 to_list(I) when is_integer(I) -> integer_to_list(I);
-to_list(B) when is_binary(B)  -> binary_to_list(B);
+%%to_list(B) when is_binary(B)  -> binary_to_list(B);
+to_list(B) when is_binary(B)  -> unicode:characters_to_list(B);
 to_list(L) when is_list(L)    -> L.
[k-1@ametrine examples]$ 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().

=INFO REPORT==== 25-Jun-2010::23:25:12 ===
*elog gettext_server:388: TableFile = "/usr/local/lib/erlang/lib/gettext/priv/gettext_server_db.dets"
{ok,<0.39.0>}
3> put(gettext_language, "ja").
undefined
4> {_, Bin}=file:read_file("../japanese.po").
{ok,<<"# SOME DESCRIPTIVE TITLE.\n# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\n# This file is distributed und"...>>}
5> gettext:store_pofile("ja", Bin).
ok
6> example2:run().
こにちわせかい
ok
7> q().
ok
8> [k-1@ametrine examples]$ pwd

これでやっとわたし幸せだ。 #aira

追記

tobbeからアプライしたってメッセージがキタ。