2005年7月16日 (土曜日)

05:45:58 # Life lindaの翻訳について出力がutf-8で出されるということについて調査してみました. 翻訳を作成しても,localeの値を無視してutf-8でしか出力されません. なんとなく,python2.3のgettextの実装がutf-8で出力しているような 気がするので小さなテストプログラムを作ってみました. しかし,これでもeuc-jpで出力されてほしいところで, utf-8が出力されてしまう. おかしいので,pythonで国際化しているプログラムであるapt-listchangesを確認してみる. すると,apt-listchangesにいくつかバグがあることがわかったので,それをまず修正.

import locale
import gettext
locale.setlocale(locale.LC_ALL, "");
_ = gettext.translation('linda').gettext
print _("Linda, version %s")
print locale.setlocale(locale.LC_ALL);
print locale.setlocale(locale.LC_CTYPE);
	

しかし,pythonのgettextはどうも,gettextのpoファイルが 作成されたcharsetを返すようになっているみたいな気がする. それは間違っているのだが...

と,調べていたら,python 2.4 で lgettextという関数が導入されたらしく, その関数が,一般的なgettext互換で,gettext関数はpoファイルのエンコーディング で文字列を返してくれる関数だ,ということになっているらしいです. ugettextでutf-8文字列を取得して,それを LC_CTYPEに変換すればよいかな?

Keysigningをしていたら,さまざまな人にblogのタイトルと本文が短すぎる, ということについて苦情を言われました. だめかねぇ.

15:06:53 # Life localeのCODESETで文字列をかえしてくれないという問題について python 2.3 でlgettextを実装しようとしばらくいじってみたけれども, もうすぐpython2.4に移行するだろうし,あまりにも後向きなので萎える. とかいいながらも簡単に実装できてしまったのでパッチとして投げてみる.

#!/usr/bin/python
import locale, gettext

# This is for python 2.3 compatibility.
# Replace with "_ = gettext.translation('linda').lgettext" line for python2.4
#
gettext_encoding=locale.getpreferredencoding()
my_ugettext = gettext.translation('linda').ugettext
def lgettext(msgid):
	return my_ugettext(msgid).encode(gettext_encoding)
_ = lgettext

print _("Linda, version %s")
	

16:28:38 # Life Jeff Garzikが git の howtoをアップデートしたらしい. コアなgitの部分の利用方法を解説したなかなかよい文書. HOWTO

Junichi Uekawa

$Id: dancer-diary.el,v 1.89 2005/05/12 11:19:14 dancer Exp $