장고 국제화 튜토리얼-3

템플릿 및 JavaScript 파일에서 번역



보기의 문자열 번역은 이 튜토리얼 시리즈의 이전 기사에서 구현되었습니다. 그러나 대부분의 상용 애플리케이션에서는 Django 템플릿 또는 JavaScript 코드를 다룰 것입니다.

이 세 번째 게시물의 목적은 Django 템플릿 및 JavaScript에 대한 번역을 설정하는 것입니다. 저번 포스팅에서 시작한 프로젝트를 이어가도록 하겠습니다.

템플릿 번역:
Django를 사용하면 어디에서나 템플릿을 만들 수 있지만 응용 프로그램 폴더 내에 템플릿을 만드는 것이 가장 좋습니다. 내부에 index.html 템플릿이 있는 languages/templates/languages/라는 템플릿 폴더를 만듭니다.

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


번역 기능을 가져오려면 첫 번째 줄이 필요합니다. 나머지 줄은 일부 html 요소를 정의하고 trans 함수를 사용합니다. 대부분의 경우 trans를 사용하여 문장 및 blocktrans to translate blocks of sentences을 번역합니다. 또한 템플릿을 렌더링하려면 보기를 변경해야 합니다.

from django.shortcuts import render_to_response

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


이제 번역 가능한 문자열을 검색하도록 Django에 지시해야 합니다. 언어 디렉토리 내에서 다음을 수행하십시오.

django-admin makemessages -l pt_pt


laguages/locale/pt_pt/LC_MESSAGES/django.po를 열고 메시지를 번역합니다. "내 사이트에 오신 것을 환영합니다."문자열이 이전에 이미 사용된 경우 makemessages 명령이 다시 사용합니다.

#: .\languages\templates\languages\index.html:3
msgid "Hello"
msgstr "Olá"

#: .\languages\templates\languages\index.html:4
msgid "Welcome to my site."
msgstr "Bem-vindo ao meu site"


마지막으로 다음을 사용하여 메시지를 컴파일합니다.

django-admin compilemessages


프로젝트 설정을 열고 언어 코드가 "pt-pt"로 설정되어 있는지 확인합니다(이전 게시물에서 했던 것처럼).

브라우저에서 http://localhost:8000/languages/을 가리키면 Django가 번역된 템플릿을 렌더링해야 합니다.



JavaScript 파일에서 번역

Django는 절차가 약간 다르지만 JavaScript 코드 번역도 지원합니다. 다음 코드를 포함하는 languages/static/hello.js라는 간단한 JavaScript 파일을 만듭니다.

document.write(gettext('Welcome to my site.'));


Python 버전과 마찬가지로 gettext 함수는 입력 문자열을 번역된 문자열과 일치시킵니다. 아직 할 일이 몇 가지 있지만 문자열을 번역하고 빌드해 보겠습니다. 언어 폴더로 이동하여 다음을 수행합니다.

django-admin makemessages -l pt_pt -d djangojs


Django는 locale/pt_pt/LC_MESSAGES/djangojs.po에 JavaScript 메시지가 포함된 새 파일을 생성합니다. 그것을 열고 메시지를 번역하십시오:


#: .\static\hello.js:1
msgid "Welcome to my site."
msgstr ""



아래와 같이 포르투갈어로 msgstr을 변경합니다.


#: .\static\hello.js:1
msgid "Welcome to my site."
msgstr "Bem-vindo ao meu site."



모든 것이 제대로 작동하면 locale/pt_pt/LC_MESSAGES/djangojs.mo에서 새로 컴파일된 파일을 찾을 수 있습니다.

보시다시피 짧은 스크립트에서 gettext 메서드를 사용하더라도 어디에도 구현되지 않습니다. 브라우저에서 짧은 양의 코드를 수동으로 실행하면 누락된 선언에 대해 불평합니다. javascript catalogue.으로 알려진 것을 만들어야 합니다.

자바스크립트 카탈로그
JavaScript 카탈로그는 Django가 모든 보조 기능과 번역 가능한 텍스트를 브라우저에 주입하기 위해 사용하는 짧은 스크립트입니다. Django는 Django에 정의된 JavaScript 카탈로그 뷰 방식을 사용합니다. 보다. i18n은 JavaScript 카탈로그를 브라우저로 내보냅니다. 이 보기를 활용하려면 languages/urls.py를 다음과 같이 변경하십시오.

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'),
]



서버를 다시 로드하고 브라우저에서 http://localhost:8000/languages/jsi18n/을 가리키면 JavaScript 카탈로그의 콘텐츠가 표시됩니다.



번역된 문자열과 정의 중인 다른 함수가 있는 django.catalog 변수를 찾을 수 있습니다. 마지막으로 작은 JavaScript 코드와 카탈로그가 템플릿에 로드되고 있는지 확인하기만 하면 됩니다.
아래 코드를 index.html에 다시 작성

<!--{% load i18n %}-->

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

<html>
<head>
    <script type="text/javascript"
            src="{% url 'javascript-catalog' %}"></script>
    <script type="text/javascript" src="/static/hello.js"></script>
</head>
</html>



브라우저에서 http://localhost:8000/languages/을 가리킵니다.



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

좋은 웹페이지 즐겨찾기