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からアプライしたってメッセージがキタ。