장고 국제화 튜토리얼-4

사용자 선택에 따라 언어를 동적으로 변경합니다.



지난 게시물에서 Django 템플릿과 JavaScript 코드를 번역하는 방법을 시연했습니다. 그러나 Django가 번역을 활용하는 방법을 제어하는 ​​방법에는 여러 가지가 있지만 지금까지 애플리케이션 전체 언어를 설정하기 위해 설정을 활용했습니다. 이 마지막 게시물에서는 사용자 정의 언어를 활용하도록 Django를 구성하는 방법을 알려드리겠습니다.

사용자 로컬에 따라 다른 언어 설정
Django에는 determining which language to use for translations에 대한 유연한 방법론이 있습니다. 이 부분에서는 브라우저에서 지원하는 언어를 기반으로 번역을 사용하는 방법을 알려드리겠습니다. 시작하려면 설정 파일(languages/settings.py)을 열고 영어가 기본 언어로 선택되어 있는지 확인합니다.

# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGE_CODE = 'en-us'


이제 번역에 사용할 수 있는 언어를 Django에 알려야 합니다. 설정 파일에 LANGUAGES 목록 추가

# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

from django.utils.translation import ugettext_lazy as _

LANGUAGES = (
    ('en-us', _('English')),
    ('pt-pt', _('Portuguese')),
)

LANGUAGE_CODE = 'en-us'


마지막으로 LocaleMiddleware를 미들웨어 클래스 목록에 추가해야 합니다.

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.locale.LocaleMiddleware',  # add this extra
    'django.middleware.common.CommonMiddleware',
    ...
    ...
]


서버를 시작하면 Django가 이제 번역을 반환할 수 있습니다. 메시지를 수정하는 경우 메시지를 컴파일해야 합니다.

웹 목록에서 사용자 언어 선택
Django는 사용자가 목록에서 선택할 수 있도록 합니다. set_language redirect view.을 사용합니다.
먼저, languages/urls.py를 열고 set_language 보기를 포함합니다.

from django.views.i18n import JavaScriptCatalog
from django.urls import path, include

from . import views

urlpatterns = [
    path('', views.index, name='index'),
    path('jsi18n/', JavaScriptCatalog.as_view(), name='javascript-catalog'),
    path('i18n/', include('django.conf.urls.i18n')),
]



이제 templates/languages/index.html에서 템플릿 파일을 열고 언어를 선택하는 양식을 포함합니다.

{% load i18n %}

<h1>{% trans 'Hello' %}</h1>
<p>{% trans 'Welcome to my site.' %}</p>

<form action="{% url 'set_language' %}" method="post">{% csrf_token %}
    <input name="next" type="hidden" value="{{ redirect_to }}">
    <select name="language">
        {% get_current_language as LANGUAGE_CODE %}
        {% get_available_languages as LANGUAGES %}
        {% get_language_info_list for LANGUAGES as languages %}
        {% for language in languages %}
            <option value="{{ language.code }}"{% if language.code == LANGUAGE_CODE %} selected{% endif %}>
                {{ language.name_local }} ({{ language.code }})
            </option>
        {% endfor %}
    </select>
    <input type="submit" value="Go">
</form>


언어가 선택된 언어 설정 보기에 POST 요청을 보내기 전에 양식에 언어 목록이 표시됩니다. 마지막으로, languages/views.py를 열고 응답에 대한 렌더링이 아닌 템플릿을 렌더링하는 데 렌더링이 사용되는지 확인합니다. 후자는 csrf 토큰을 포함하지 않기 때문입니다.

from django.shortcuts import render

def index(request):
    return render(request, 'languages/index.html')


마지막으로, 이 기술은 세션 변수를 사용하기 때문에 데이터베이스 테이블을 구성하기 위해 python3 manage.py 마이그레이션을 사용해야 할 수도 있습니다.



마지막으로 전체 웹 페이지는 사용자가 선택한 언어를 기반으로 데모를 번역합니다.



참조:
https://lokalise.com/blog/django-i18n-beginners-guide/
http://www.marinamele.com/taskbuster-django-tutorial/internationalization-localization-languages-time-zones
https://www.pycorners.com/
https://phrase.com/blog/posts/quick-guide-django-i18n/
https://www.pycorners.com/storie/6/2020/12/2/django-web-page-translation

면책 조항: 이것은 개인적인 [블로그, 게시물, 진술, 의견]입니다. 여기에 표현된 견해와 의견은 저자의 견해와 의견일 뿐이며 저자가 직업적으로나 개인적으로 연관될 수 있는 조직이나 개인의 견해와 의견을 대변하지 않습니다.

좋은 웹페이지 즐겨찾기