2012-04-23 1 views
1

私はDjangoの国際化を理解するための簡単な例をしようとしています。{%trans%}ブロックによる国際化

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

私は理解して期待していたものから、私の場合は、文字列、のために自動的に実行される翻訳のためだった。(それはで、その日の名前だ

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

とx.name内の文字列のために英語、すなわち「日曜日」)が翻訳され、翻訳された形式で表示されたテンプレートに戻されます。

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

UPDATE:

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

第2の更新:テンプレートから

HTMLコードは、上記のものであり、次のコードは、ビュー内の1つです。

bills.py:

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

私はDjangoに精通していませんが、自動的に翻訳されることはありません。これはおそらく翻訳のためにマークするだけです。 –

+1

私も同じことを考えました。 http://devdoodles.wordpress.com/2009/02/14/multi-language-support-in-a-django-project/ http://www.djangobook.com/jp/2.0/chapter19/ あなたは始まった。 – dm03514

答えて

5

国際化とローカライズは複雑であり、何の代替がreading the documentationのためにありません。ただし、必要な手順の概要は非常に大まかです。

  1. 翻訳が必要なすべての文字列をマークアップする必要があります。テンプレートでは、単純な場合は{% trans "text" %}、複雑な場合は{% blocktrans %} text {% endblocktrans %}を使用します。ソースコードでは、the ugettext function(またはその亜種の1つ)で文字列をラップします。 Django 1.4では、localize URL patternsも可能です。

  2. the makemessages administration commandを実行して、翻訳したい言語ごとにメッセージファイルを作成します。

  3. メッセージをターゲット言語に翻訳します。これはテキストエディタで行うことができますが、このステップではコンピュータ支援の翻訳ツールを使用して、GNUメッセージファイル(.po拡張子)で動作するツールの一部のリストをsee Wikipediaで手助けすることができます。翻訳者がいる場合は、話をして、どのソフトウェアを使用するのが好きかを調べてください。

  4. the compilemessages administration commandを実行してメッセージファイルをコンパイルします。

  5. Djangoのlanguage preference detection middlewareをオンにします。サイトにユーザーが登録されている場合は、ユーザーに言語設定を行います。ログインしていないユーザーの場合は、言語を切り替える方法(URLまたは言語設定のクッキー)を提供してください。

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

+0

'makemessages'コマンドで作成したはずの.poファイルがない場合はどうしたらいいですか? .poファイル用のテンプレートはありますか? –

+0

'.po'ファイルがない理由を理解する必要があります。おそらく 'makemessages'はメッセージを見つけることができませんでしたか?あなたは '-v 2'引数を渡すと何を言いますか? –

+0

私は、 'makemessages'コマンドが' .html'ファイルを暗黙的に検索して翻訳ブロックを探していることを読んだことがあります。私は私のルートフォルダの 'templates'フォルダに私のテンプレートを持っています。私はロケールを設定するアプリケーションフォルダでコマンドを実行し始めましたが、 '.po'ファイルは作成されませんでした。私はその後、上に移動し、ルートフォルダで 'makemessages'コマンドを実行しましたが、その後、私の仮想環境によって作成された特定の' build'フォルダに関連するいくつかのエラーが発生します。だから、それは今私の問題です。私はすべてを動かすために修正しなければならない問題だと思います。 –

1

を通じてthe docをお読みください。ドキュメントが言うようにtransタグはただ、翻訳のための文字列をマーク:

Once the string literals of an application have been tagged for later translation, the translation themselves need to be written (or obtained).... The first step is to create a message po. file for a new language ... then it's your responsibility to change the po files (by putting the language-specific translation in it)... finally you need to use tools to run over all available .po files and creates .mo files... (after that) your translations are ready for use.

+0

よろしくお願いいたします。私がこれをやろうとするとすぐに、あなたの答えを正しいものとしてマークします。 –

1

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

LLはあなたの翻訳を与えている名前です
django-admin.py makemessages -l LL --ignore=env/* (EDITED) 

このエラーはイライラする可能性があるので、誰かが役に立つと思ったら、IPythonパッケージのソースのフォーマットされていない文字列です。

乾杯!