2

我希望我的应用程序能够以多种语言提供(比如说两种,一种是默认英语,另一种是)。

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

我正在阅读 Django官方 文档

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

还有一件事……在 settings.py 中给出了默认的 LANGUAGE_CODE = 'en-us',但是因为我希望我的应用程序使用一种以上的语言,所以我如何在这里指定该国家/地区代码。

像这样工作 LANGUAGE_CODE = 'en-us','es-MX (Spanish)' 或者我必须以某种方式做到这一点。

这个 .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',
)

语言.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 回答