このサイトについて

ああ,これこれ

ああ,これこれ

http://groups.yahoo.com/group/zope/message/145449

このひととまったく同じ問題でZMILocalizerが動かないの。

手っ取り早く言うと,New Style Classではクラス自体の__dict__を勝手に書き換えると怒られる,ということね。ZODB 3.3でNew Style Classが使えるようになり,ExtentionClassがNew Style Classベースになった影響ですな。

こんなコードを書いて実験すると分かる。

New Style Classを使った場合

>>> class nsc(object):
...         pass
...
>>>
>>> nsc.__dict__['foo'] = 'foo'
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
TypeError: object does not support item assignment

というようにエラーになります。

New Style Classでない場合

>>> class non_nsc:
...         pass
... 
>>>
>>> non_nsc.__dict__['foo'] = 'foo'

さて,どうしたものか。

しかしPythonは奥深いなあ。


追記。

__dict__をむりやり変えようとしないで,setattrするとOKだよとIRCの#zope-jaで教えてもらった(ありがとう!)。で,早速やってみると,なんということでしょう。今まで日本語化されていなかったZMIのタブが...!

その後MLにも同種の指摘があった。ということで,ZMILocalizerの2.8対応ということでCommit。2.7で動くことも確認済み。 http://sourceforge.jp/projects/zope-j10n/ からダウンロードして試してみてください。

2010-08-27 04:35