1

Django の国際化を理解するために、簡単な例を作成しようとしています。

私がdjangoprojectのドキュメントで読んだことから、それを行う最も簡単な方法は、テンプレートから翻訳したいものを{% trans %}ブロックでラップすることです。

私が理解して期待していたことから、私の場合、文字列に対して翻訳が自動的に実行されることでした:

{% for x in found_bills %}
    <tr>
        <td>{% trans x.name %}
    </td>
    </tr>
{% endfor %}

そして、x.name の文字列 (英語での曜日の名前、つまり "sunday") が翻訳され、翻訳された形式で表示されたテンプレートに返されます。

私はそれが機能する方法を誤解しましたか?

アップデート:

エラー: _argparse.py ./build/ipython/IPython/external/argparse/_argparse.py:1113 で xgettext を実行中にエラーが発生しました: 警告: 名前のない引数を含む 'msgid' 形式の文字列を適切にローカライズできません: トランスレータは引数を並べ替えることができません. 名前付きの引数を持つフォーマット文字列と、引数のタプルの代わりにマッピングを使用することを検討してください。

2 番目の更新:

テンプレートからの HTML コードは上記のもので、次のコードはビュー内のものです。

bills.py:

def bills(request):
    bills = ps_bill.objects.all()
    return render_to_response('bills.html',"bills":bills,},context_instance=RequestContext(request))
4

3 に答える 3

5

国際化とローカリゼーションは複雑であり、ドキュメントを読むことに代わるものはありません。ただし、必要な手順の大まかな概要は次のとおりです。

  1. 翻訳が必要なすべての文字列をマークアップする必要があります。テンプレートでは{% trans "text" %}、単純なケースと{% blocktrans %} text {% endblocktrans %}複雑なケースに使用します。ソースコードでは、ugettext関数(またはそのバリアントの1つ)で文字列をラップします。Django 1.4では、URLパターンをローカライズすることもできます。

  2. 管理コマンドを実行して、makemessages翻訳する言語ごとにメッセージファイルを作成します。

  3. メッセージをターゲット言語に翻訳します。テキストエディタでこれを行うことができますが、このステップで役立つコンピュータ支援翻訳ツールを使用することをお勧めします。GNUメッセージファイル(拡張子)で動作するツールの部分的なリストについては、ウィキペディアを参照してください。.po翻訳者がいる場合は、翻訳者に相談して、どのソフトウェアを使用するのが好きかを調べてください。

  4. 管理コマンドを実行してcompilemessages、メッセージファイルをコンパイルします。

  5. Djangoの言語設定検出ミドルウェアをオンにします。サイトにユーザーを登録している場合は、ユーザーに言語設定を指定します。ログインしていないユーザーの場合は、言語を切り替える方法を提供します(URLまたは言語設定Cookieのいずれかによって)。

ああ、そしてドキュメントを読んでください。

于 2012-04-23T14:13:14.183 に答える
1

ドキュメントをよく読んでください。transタグは、ドキュメントが言うように、翻訳用の文字列をマークするだけです:

アプリケーションの文字列リテラルが後で翻訳するためにタグ付けされたら、翻訳自体を書き込む (または取得する) 必要があります。最初のステップは、メッセージ po を作成することです。新しい言語用のファイル...その後、poファイルを変更するのはあなたの責任です(言語固有の翻訳を入れることによって)...最後に、ツールを使用して、利用可能なすべての.poファイルを実行し、.moファイルを作成する必要があります... (その後) 翻訳を使用する準備が整いました。

于 2012-04-23T14:02:29.070 に答える
1

少し遅れましたが、ないよりはましです。同じエラーに遭遇しました。実際には、env/ という名前の virtualenv に Ipython がインストールされていました。env/ の下のパッケージではなく、プロジェクトを翻訳したかったので、私の解決策は次のことでした。

django-admin.py makemessages -l LL --ignore=env/* (EDITED)

ここで、LL は翻訳に付ける名前です。

このエラーはイライラする可能性があるため、誰かが役に立つことを願っています。これは、IPython パッケージのソースにある不適切な形式の文字列です。

乾杯 !

于 2012-10-09T21:50:28.363 に答える