2

アプリを複数の言語で利用できるようにしたい(たとえば、2つ、1つはデフォルトの英語、もう1つはもう1つ)。

そして、これらの両方のオプションは私のホームページで利用可能であり、ユーザーが言語の選択を選択できるようにするリンクが表示されている必要があります。

このため のDjangoの公式ドキュメントを読んでいます

ですから、私がそれをどのように行うことができるかについての一般的な考えを誰でも私に知らせることができます。

そしてもう1つ......settings.pyにデフォルトのLANGUAGE_CODE='en-us'が指定されていますが、アプリを複数の言語で表示したいので、ここでその国コードを指定する方法を説明します。

このように動作しますLANGUAGE_CODE='en-us'、'es-MX(スペイン語)'または私は何らかの方法でそれをしなければなりません。

そして、これにおけるこの.po拡張子の目的は何 ですか。

4

2 に答える 2

4

設定.py

LANGUAGE_CODE='en_us'
gettext = lambda s: s
LANGUAGES = (
    ('en', gettext('English')),
    ('de', gettext('German')),
)

MIDDLEWARE_CLASSES = (
    ...
    'lang.SessionBasedLocaleMiddleware',
)

lang.py

from django.conf import settings

from django.utils.cache import patch_vary_headers
from django.utils import translation

class SessionBasedLocaleMiddleware(object):
    """
    This Middleware saves the desired content language in the user session.
    The SessionMiddleware has to be activated.
    """
    def process_request(self, request):
        if request.method == 'GET' and 'lang' in request.GET:
                language = request.GET['lang']
                request.session['language'] = language
        elif 'language' in request.session:
                language = request.session['language']
        else:
                language = translation.get_language_from_request(request)

        for lang in settings.LANGUAGES:
            if lang[0] == language:
                translation.activate(language)

        request.LANGUAGE_CODE = translation.get_language()

    def process_response(self, request, response):
        patch_vary_headers(response, ('Accept-Language',))
        if 'Content-Language' not in response:
            response['Content-Language'] = translation.get_language()
        translation.deactivate()
        return response

さまざまな言語にアクセスhttp://example.com/?lang=de

最後に、django に.poファイルを作成させます。そのためのドキュメントはこちらです。

于 2012-10-12T06:32:58.317 に答える
0

ソフトウェアの国際化 (またはローカリゼーション) が必要です。C では、gettext.po (ファイルに関連する) を介して行われることがよくあります。おそらくdjangoこれらのものを使用します。

于 2012-10-12T05:35:41.047 に答える