2011-09-01 8 views
0

に翻訳し、私は私のDjangoのプロジェクト内でアプリ名を変換しようとしています、私はウェブ上でこのコードを見つけました:は、モジュール(アプリ)名前はジャンゴ

from django.utils.translation import gettext_noop 
gettext_noop("AppName") 

テンプレートinit.py

{% trans app.name %} 

は、しかし、ジャンゴの現在のバージョンでは、このコードが存在しているので、私はtheresのこの私を行う方法を推測しますnは(上記のコードは2008年からである)、すでに1.3ジャンゴ..翻訳ファイルに名前を取得する方法をアドバイスしてください

{% for app in app_list %} 
{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %} 

また、これはこれは、既に何らかの形で可能であることを私に語った:/

ジャンゴblocktransに関してのcontrib /管理/ sites.pyライン356+

  if app_label in app_dict: 
       app_dict[app_label]['models'].append(model_dict) 
      else: 
       app_dict[app_label] = { 
        'name': app_label.title(), 
        'app_url': app_label + '/', 
        'has_module_perms': has_module_perms, 
        'models': [model_dict], 
       } 
+0

https://code.djangoproject.com/ticket/3591でこれについてたくさん見つけましたが、なぜそれがまだできていないのであれば、なぜ現在はブロックトランが存在するのでしょうか? – AKjsd89

答えて

0

、あなたはそれがに渡される値でどのように機能するかを誤解しているあなたは、このような何かを持っている場合:。

{% blocktrans with foo=bar %}-- {{ foo }} --{% endblocktrans %} 

これは、Pythonで、次のいずれかとほぼ同等です:

gettext('-- %(foo)s --') % {'foo': bar} 
gettext('-- {foo} --').format(foo=bar) 

ここで重要なのはapp.nameが翻訳されないことです。それは翻訳後、そのまま受け継がれます。翻訳カタログのmsgidは、"-- %(foo)s --"になります(変換ルックアップのためにPython形式に変換されるため)。

{% trans app.name %}が有効ですが、この後者はコードをスキャンして静的に調べるため、manage.py makemessagesという名前の翻訳カタログにはアプリ名が表示されません。あなたのPythonコードでgettext(app.name)のようなことをすると、コードを評価していないので静的に解析したので、カタログに入れなければならないものは解決できません。

最後に、gettext_noopを使用すると、メッセージを翻訳カタログに表示する正しい方法が得られます。 makemessagesは、それ自身の利益のためにあまりにも巧妙であるようには試みず、これをあなたに任せます。

チケットに関連する3591はticket 1668ですが、期限切れではありませんが、あなたがまだ読んでいない場合はおそらく価値があります(あなたが3591に出会った時にうまくいくかもしれません)。

+0

はい私は両方を読んだこと.. django 1.4がインストールされたアプリケーションの設定にapp_dictを渡すことができるのを待っているようです。ブロックトゥンを置き換える私のアプローチが私に感謝するでしょう! – AKjsd89

関連する問題