1

モデルフィールドに「選択肢」のローカライズされたリストを使用する場合、管理者は翻訳された値をリストビューに表示しません。

簡単な例:

from django.utils.translation import ugettext_lazy as _

class OrderStates:
    STATES = (
        (STATE_NEW, _("New")),
        (STATE_CANCELLED, _("Cancelled")), )

class Order(models.Model):
    state = models.IntegerField(choices=OrderStates.STATES)
    # ..

class OrderAdmin(admin.ModelAdmin):
    list_display = [ 'id', 'state', 'address', 'user']
    # ..

admin.site.register(Order, OrderAdmin)

「新規」および「キャンセル済み」のローカライズされたバージョンは、注文を編集するときにフロントエンドおよび管理フォームに正しく表示されます。しかし、管理者リストビューでは、英語を含め、切り替えた言語に関係なく、空白のフィールドが表示されます。列名は問題ありません。

これはPython2.3でのみ発生します(ニッチな質問について話します)。Python 2.5では、選択肢はどこにでも正しく表示されます。どちらにもエラーや警告は表示されません。

オプションにugettext_lazyの代わりにugettextを使用しようとしましたが、機能しませんでした。ugettext_noopの一種の作品-少なくとも空白のフィールドの代わりに元の英語バージョンを表示します。

私は何か間違ったことをしていますか、それともこれはバグですか?

4

2 に答える 2

1

これはおそらくDjangoのどこかにあるバグであり、アイテムに対してforce_unicodeを正しく呼び出していません。貼り付けた元のコードは正しいです。使用しているDjangoのバージョンについては言及していないので、最新の1.0.3または1.1リリースを試して、それが修正されるかどうかを確認することをお勧めします。そうでない場合は、チケットトラッカーをチェックして、すでに報告されているかどうかを確認してください(注1.1は2.3をサポートする最後のバージョンであるため、まだ修正されていない場合は、おそらくまったく修正されないでしょう。

于 2009-07-29T19:15:43.687 に答える
0

使用してみてください:

import gettext as _

ただし、一部の翻訳で非ASCII値が使用されている場合は、これが機能しなくなる可能性があります。実際、これは少し前に修正されているはずです。チケット#5287を参照してください。

お役に立てれば。

于 2009-07-29T14:13:40.020 に答える