2

OK、2時間試した後、私は尋ねるつもりです...

私はアプリを持っていて、いくつかの言語でそれを持っています。アプリのデフォルト言語がブラウザ言語である場合は適切ですが、ユーザーがその言語を上書きできる場合も同様です。

つまり、ブラウザは英語ですが、あなたはドイツ語であり、ドイツ語の旗をクリックしてWeb言語を変更し、それを覚えています。

django-localeurlで試してみました

それは問題なく動作し、URLに言語が表示され、デフォルトの言語がブラウザの言語になるように設定することもできます。

問題は、django-locateurlが言うように言語を変更するための選択ボックスを作成するときに発生します。選択は機能しますが、別のページに移動すると、言語がデフォルトの言語に変わります。新しく選択した言語を保存しません。

私はそれを修正すると主張するいくつかのフォーク、元のパッチのパッチを試しました..何もありません。

localeURLMiddlewareの前にSessionMiddlewareを配置することについて読みました...

何もない。

だから、誰かがこれを機能させたのですか、それともこれに別のライブラリを使用したことがありますか?

ありがとう。

4

4 に答える 4

2

Django-dev(1.4)の使用を終了しました。これには、i18n URLが組み込まれているため、localeurlは必要ありません。

于 2011-11-23T01:09:36.030 に答える
2

次の記事を読んでください。

http://barseghyanartur.blogspot.nl/2013/09/make-django-localeurl-rembember-your.html

要するに、それはdjango-localeurlメインブランチへの最後のコミットの1つといくつかのトリックで可能です。

手順1.ソース(bitbucket)からdjango-localeurlをインストールするか、同じ場所から後でコミットを選択します。

$ pip install hg + https://bitbucket.org/carljm/django-localeurl@764caf7a412d77aca8cc929988f333ee808719e6#egg=django-localeurl

ステップ2.djangosettings.pyを次のように更新します。

ミドルウェアクラスは次のようになります(順序が重要です)。

djangoSessionMiddlewareが最初に来ることに注意してください!そしてLocaleURLMiddleware、djangoの前に来る必要がありますCommonMiddleware

LOCALEURL_USE_SESSIONそれは新しいことに注意してください。

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'localeurl.middleware.LocaleURLMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ... the rest
)

LOCALEURL_USE_SESSION = True

手順3.言語スイッチャー(POST)を{%url'localeurl_change_locale'%}ビューに移動し、パラメーターとして選択した言語を指定しlocaleます。

それはほとんどそれです。テンプレートに含めるためのヒントについては、記事を参照してください。

于 2013-09-17T22:58:25.580 に答える
0

django-cmsはミドルウェアを使用してこれを行います。インスピレーションについては、こちらのクラスMultilingualURLMiddlewareをご覧ください。

https://github.com/divio/django-cms/blob/develop/cms/middleware/multilingual.py

次のことを行います。

  1. URLの最初の部分を見てください。サポートされている言語(つまり、settings.LANGUAGES)と一致する場合は、その言語コードを使用してtranslation.activate(language)を呼び出します。
  2. そうでない場合は、request.session.get( "django_language"、 "")が設定されているかどうかを確認してください。
  3. そうでない場合は、request.COOKIES.get( "django_language"、 "")が設定されているかどうかを確認してください。

しかし、私が実際にお勧めするのは、django-cmsを使い始めることです;)

于 2011-11-22T19:12:34.687 に答える
0

登録ユーザーが選択した優先言語を使用したDjangoアプリの翻訳は、ミドルウェアdjango-user-language-middlewareを使用して実行できます。これにより、フィールドで選択した言語を確認することで、Djangoアプリを簡単にローカライズできますuser.language

使用法:

  1. ユーザーモデルに言語フィールドを追加します。

    class User(auth_base.AbstractBaseUser, auth.PermissionsMixin):
        # ...
        language = models.CharField(max_length=10,
                                    choices=settings.LANGUAGES,
                                    default=settings.LANGUAGE_CODE)
    
  2. pipからミドルウェアをインストールします。

    pip install django-user-language-middleware

  3. リクエストをリッスンする設定でミドルウェアクラスリストに追加します。

    MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
        ...
        'user_language_middleware.UserLanguageMiddleware',
        ...
    ]
    

これが将来、人々がこの質問に着手するのに役立つことを願っています。

于 2018-04-10T15:45:37.510 に答える