장고 국제화 튜토리얼-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
면책 조항: 이것은 개인적인 [블로그, 게시물, 진술, 의견]입니다. 여기에 표현된 견해와 의견은 저자의 견해와 의견일 뿐이며 저자가 직업적으로나 개인적으로 연관될 수 있는 조직이나 개인의 견해와 의견을 대변하지 않습니다.
Reference
이 문제에 관하여(장고 국제화 튜토리얼-4), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/epam_india_python/django-internationalization-tutorial-4-1ode텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)