2017-11-02 6 views
0

저는 Django 1.9/python3.5 응용 프로그램에서 일하고 있으며 Django의 번역 유틸리티를 사용하려고합니다. 스페인어로 된 번역을위한 'es'디렉토리가있는 로케일 디렉토리가 있는데,이 디렉토리는 .po 파일을 생성 한 것입니다. 몇 개의 번역본을 테스트 해보기 위해이 디렉토리를 설정했습니다.Django 번역이 작동하지 않습니다.

msgid "Sign In" 
msgstr "Registrarse" 

msgid "Create an Account" 
msgstr "Crea una cuenta" 

는 내 설정 파일이 제대로 나는 단어가 로그인 한 계정을 생성하기위한 장고 '트랜스'템플릿 태그를 사용하여 내 템플릿에서뿐만 아니라

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'webapp.middleware.LanguageSwitchMiddleware', 
) 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'APP_DIRS': True, 
     'DIRS': [os.path.join(BASE_DIR, 'templates'), ], 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
       'webapp.context_processors.detail_context', 
       'django.template.context_processors.i18n' 
      ], 
     }, 
    }, 
] 

# Internationalization 
# https://docs.djangoproject.com/en/dev/topics/i18n/ 
LOCALE_PATHS = (
    os.path.join(PROJECT_ROOT, 'locale/'), 
) 

from django.utils.translation import ugettext_lazy as _ 

LANGUAGES = (
    ('en', _('English')), # first language is the default used by modeltranslations 
    ('es', _('Spanish')), 
) 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'America/Chicago' 

USE_I18N = True 

구성했습니다. 선택 상자는 테스트 한 애플리케이션의 Content-Language http 응답 헤더를 편집하며 성공적으로 수행합니다. 그러나 헤더가 서명하고 작성하고 계정을 스페인어로 번역하지 마십시오. 내가 누락 된 단계가 있습니까?

HTML ^^^ 라인은 수동으로 번역 파일을 작성하는 제안 그건

{% load i18n %} 

<ul class="list-inline-xxs"> 

    {% if customer %} 
     <li> 
      Welcome, 
      <a href='{% url "customer:dashboard" %}'> 
       {{ customer.first_name }} 
      </a> 
     </li> 
     <li> 
      <a href='{% url "customer:logout" %}'> 
       {% trans 'Logout' %} 
      </a> 
     </li> 
    {% else %} 
     <li> 
      <a href='{% url "customer:login" %}'> 
       {% trans 'Sign In' %} 
      </a> 
     </li> 
     <li> 
      <a href='{% url "subscription:customer-subscribe" %}'> 
       {% trans 'Create an Account' %} 
      </a> 
     </li> 
    {% endif %} 

</ul> 
+0

모두 괜찮아 보이는군요. webapp.middleware.LanguageSwitchMiddleware에서 무엇을 가지고 있습니까? –

답변

1

I have a locale directory which has an 'es' directory for spanish translations that I created a .po file in.

.

그런 다음 번역에 넣어
django-admin makemessages -a 

이 파일을 저장하고 응용 프로그램을 다시 시작

django-admin compilemessages 
로 컴파일하고 작동합니다 : 당신을 위해 Django create translation files하자.

내가 장고와 번역 작업을 수행하는 방법을 함께 간단한 예제를 넣어했습니다 https://github.com/DusanMadar/Django-multilang-demo

편집

장고 django-admin makemessages -h--ignore PATTERN, -i PATTERN는 타사 디렉토리를 무시 사용할 필요가 무엇인가 알 수 있듯이. 그래서 뭔가가 django-admin makemessages -a -i 3rdparty_dir

+0

그럴 필요는 없지만 방금 템플릿 구성에 추가했지만 여전히 작동하지 않습니다. (템플릿과 미들웨어 구성으로 질문을 업데이트합니다.) – JBT

+0

내 대답을 편집했습니다 – dm295

+0

아하겠습니다. 나는 .mo 파일을 얻기 위해 그들을 컴파일하지 않았기 때문일 수 있습니다 .django admin 명령을 실행하여 메시지를 컴파일하면이 오류가 발생합니다 : msgfmt를 찾을 수 없습니다. GNU gettext 도구 0.15 이상이 설치되어 있는지 확인하십시오 – JBT