多种语言的问题

时间:2012-10-12 05:27:48

标签: django django-multilingual

我希望我的应用程序可以使用多种语言(比如两个,一个是默认的英语和一个)。

这两个选项在我的主页上都有,并且必须显示一个链接,使用户能够选择他选择的语言。

我正在为此阅读Django官方documentation

所以任何人都可以让我知道如何做到这一点。

还有一件事......在settings.py中,默认 LANGUAGE_CODE ='en-us'给出,但我希望我的应用程序使用多种语言,所以我怎么样可以在这里指定国家代码。

像这样工作LANGUAGE_CODE ='en-us','es-MX(西班牙语)'或者我必须以某种方式这样做。

这个 .po 扩展的目的是什么。

2 个答案:

答案 0 :(得分:3)

<强> settings.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文件。继续documentation为此。

答案 1 :(得分:0)

您希望软件internationalization(或本地化)。使用C,它通常通过gettext(与.po文件相关)完成。可能django使用这些东西。