2012-06-28 2 views
7

내 프로젝트에 다른 언어를 활성화하려고합니다. 지금 영어와 스페인어.Django i18n이 작동하지 않습니다.

내가 따라 모든 단계를 설명 할 것이다 : 모든

첫째, 내가 번역 할 디렉토리에 자신을 배치합니다.

$ cd media/templates/landing/ 
$ mkdir locale 
$ django-admin.py makemessages --locale=en 

마지막 명령은 디렉토리/파일 /locale/en/LC_MESSAGES/django.po

내가 django.po 열고 내가 진행을 작성 또는 더 나은 모든 {% 트랜스 %} 태그가 어디 말했다 모든 msgstr 필드를 영어로 완료하십시오. msgid 레이블은 스페인어입니다. 긴 메시지의 경우 팁을 존중합니다. 이 파일에 충전 한 후, 난합니다

$ django-admin.py compilemessages 

이 프로세스 django.po 및 django.mo을 만듭니다.

그래서 settings.py를 수정합니다. 중요 라인 : 마지막으로

TEMPLATE_CONTEXT_PROCESSORS = (
    'ism.context_processor.user_vars', 
    'django.contrib.auth.context_processors.auth', 
    'django.core.context_processors.debug', 
    'django.core.context_processors.i18n', 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    'django.contrib.messages.context_processors.messages', 
    'django.core.context_processors.request', 
) 

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware', 
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'pipeline.middleware.MinifyHTMLMiddleware', 
} 

TIME_ZONE = 'Atlantic/Canary' 

LANGUAGE_CODE = 'es' 

USE_I18N = True 

_ = lambda s: s 

LANGUAGES = (
    ('es', _('Espanol')), 
    ('en', _('English')), 
) 

USE_L10N = True 

USE_TZ = True 

, 난 URLS.py이 줄을 추가 :

(r'^i18n/', include('django.conf.urls.i18n')), 

나는 내 개발 서버를 다시 시작, 내가 첫 번째 주 언어로 영어를 선택하는 내 파이어 폭스 브라우저를 구성하고 그렇지 않습니다 작업. 모든 텍스트는 여전히 영어로 스페인어로 표시됩니다.

Django보기 기능 (.html을 렌더링 함)에서 "en"을 인쇄하는 request.LANGUAGE_CODE로 인쇄하기 때문에 Firefox가 영어로 구성되어 있는지 확인합니다.

무엇이 잘못 되었나요?

+0

는 django-admin.py makemessages이 = 말이지 --locale습니까? – Efazati

+0

사용자가 en과 es를 어떻게 전환합니까? – Efazati

+0

@Efazati 우리 프로젝트의 주요 언어는 EN이 아닌 ES입니다. 그래서 나는'django-admin.py makemessages --locale = en'을 만들어야한다는 것을 이해합니다. 그렇죠? 이렇게하면 django.po 파일에 msgid 필드가 spanish로 만들어지고 msgstr 필드를 영어로 작성해야합니다. –

답변

3

저는 모두 내가 번역하고 싶은 디렉토리에 있습니다.

$ CD 미디어/템플릿/방문/$에서 mkdir 로케일 $ django-admin.py makemessages --locale = EN

이 : 또는 더 나은 모든 {% 트랜스 %} 태그가 어디 말했다 어떻게 번역을 해야하는지 아닙니다.

당신은 당신이 당신이 기본 언어 인에서 를 번역 할 일하지에 번역 할 언어에 대한 메시지 파일을 만들 수 있습니다. 이 경우 영어입니다.

또한 comamnd는 프로젝트 디렉토리에서 실행해야합니다. 템플릿 디렉토리가 아닙니다.

그래서, 당신은해야합니다 명령 :

$ django-admin.py makemessages --locale=es

당신은 당신의 프로젝트하지 템플릿 디렉토리의 루트 디렉토리에서 실행해야합니다. locale 디렉토리도 만들지 않으면 명령이 만듭니다.

다음은 번역 스페인어로을 파일에 추가 한 것입니다. 파일에는 영어 레이블이 있습니다. django는 영어 버전에 해당하는 스페인어를로드합니다. 당신이이 있으면

, 당신은

$ django-admin.py compilemessages

지금 번역 응용 프로그램에 대한 준비 (루트에서 다시) 메시지 파일을 컴파일합니다. django에게 원하는 언어를 알려줘야합니다. 언어 전환을 위해 기본 제공보기를 사용하고 있으므로 원하는 언어로보기를 호출해야합니다. 그 장고가로드 할 번역 알 수 있도록

<form action="/i18n/setlang/" method="post"> 
{% csrf_token %} 
<input name="next" type="hidden" value="{{ redirect_to }}" /> 
<select name="language"> 
{% get_language_info_list for LANGUAGES as languages %} 
{% for language in languages %} 
<option value="{{ language.code }}">{{ language.name_local }} ({{ language.code }})</option> 
{% endfor %} 
</select> 
<input type="submit" value="Go" /> 
</form> 

이 양식에서 언어를 선택 :

당신이 사용할 수있는 문서에 제공되는 템플릿이있다.

보기 및 템플릿에 대해서도 how django discovers language preference을 읽어야합니다.

+1

나는 당신이 잘못 이해하고 있다고 생각합니다. 프로젝트의 제 모국어는 ES (스페인어)이므로 ES에서 EN (영어)로 번역하고 싶습니다. 이 링크 (http://www.djangobook.com/en/1.0/chapter18/)를 방문하면 그들의 예에서'django-admin.py는 DE가되는 메시지 -l de'를 사용한다고 알려주 듯이 볼 수 있습니다 그들이 번역하고자하는 언어. 이제는 프로젝트의 루트 디렉토리에서 모든 프로세스를 만들려고했습니다. 이론적으로, LocaleMiddleware는 사전 선택없이 사용자의 브라우저에서 자동으로 언어를 감지하는 변환을 수행해야합니다. 그러나 그렇지 않습니다. –

3

편집자 주 :이 답변은 편집에서 질문으로 마이그레이션되었습니다. 그것은 원래 포스터에 의해 작성되었습니다.

로캘 경로를 가져 오는 동안 문제가 발생했습니다. django.po/mo를 사용할 수 없으므로 Django는 루트 경로에서 내 로케일 디렉토리를 무시하고 있거나 찾지 못했습니다. 이 모든 것들은 settings.py에 LOCALE_PATHS를 추가하여 해결할 수 있습니다.

더 많은 정보를 원하시면 ->https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

관련 문제