2011-04-28 2 views
7

私はオランダ語で書かれたウェブサイトを持っています。今私はフランス語であるそのウェブサイトのための第二言語を提供しなければならない。Django:default language i18n

翻訳する必要があるすべてのテキストをgettext関数で囲み、poファイルを作成し、moファイルにコンパイルしました。また、django_languageセッションを適切な言語コードに設定するビューを作成しました。だから今フランス語版は動作していますが、私はオランダ語版に戻すことはできません。

だから、オランダ版のpo/moファイルも作成する必要がありますか? gettextを過ぎているテキストはすでにdutchに入っています。 'デフォルトのテキスト'を使用する方法はありますか?

これは私が私のセッションに言語コードを追加するために使用する図である。

私は、次のURLを使用私のテンプレートで
class LanguagePickerView(RedirectView): 
    url = '/' 

    def get(self,request,*args, **kwargs): 
     request.session['django_language'] = self.kwargs.get('language') 
     return super(LanguagePickerView, self).get(request, args, kwargs) 

<a href='{% url web-language 'nl-nl' %}'>NL</a> 
<a href='{% url web-language 'fr' %}'>fr</a> 
+0

オランダ語に戻すことはできませんが、ロケールファイルとは関係ありませんが、言語(ビュー、ミドルウェア)を変更する方法はありますか?それについてもう少し詳細を教えてもらえますか?あなたの質問について:いいえ、翻訳可能な文字列を書いた言語のロケールファイルを提供する必要はありません。 –

+0

私はdjango.middleware.locale.LocaleMiddlewareを使用しています。セッションを私の質問に変更するビューを追加します。 – Pickels

答えて

13

デフォルト言語の文字列は、POに格納されていません/ moファイルの場合、コードとテンプレートに直接入ります。この権利があるようです。

セッション変数django_languageをオランダに戻して、セッション変数に戻すことができます。

あなたの設定が正しい方法を設定していることを、確認してください:

LANGUAGE_CODE = 'nl' #default language 

LANGUAGES = (
    ('nl', _('Dutch')), 
    ('fr', _('French')), 
) 

はあなた自身によって言語を切り替えるためのコードを記述する必要はありませんことを、忘れないでください。より良い特殊なDjangoのビュー(django bookからの引用)を使用する:

便宜上、Djangoはユーザーの言語設定を設定し、前のページに戻ってリダイレクトビュー、django.views.i18n.set_language、付属しています。

は、あなたのURLconfに以下の行を追加することで、このビューをアクティブ:

(r'^i18n/', include('django.conf.urls.i18n')), 
+0

これは私のために働いた、ありがとう。私はURLconfの部分が欠けていた。 – DrKaoliN

2

この質問と回答が役に立つことができ - set language within a django view

が、これは本当に重要であり、translation.activate(lang_code)を使用することを忘れないでください。

標準的な方法でpostメソッドを使用して言語を変更したり、独自のミドルウェアを作成して、たとえばURLに変更することができます。あなたはこの'nl-nl'よう{% url web-language 'nl-nl' %}を使用する場合は

乾杯、 Ignas

1

はあなたargsargs[0])ではなく、あなたのkwargsです。 kwargsの場合は、{% url web-language language='nl-nl' %}のような構文を使用する必要があります。その後、あなたのビューは動作するはずです。うまくいけば、あなたのurlconfはビューがそれを扱っている方法にマッチします。

+0

このバグを見つけてくれてありがとう。 – Pickels