Django 분석의 국제화 처리
10755 단어 django
여러분은 Django Doctment에서 공식적인 설명을 보실 수 있습니다. 저는 여기서 공식 문서를 복제하지 않겠습니다.django 프레임워크는 완벽한 I18N과 L10N 지원을 가지고 있으며 그 실현은 GNU gettext를 바탕으로 합니다.최근에 문서를 보면서 연구를 했는데 여기서 django 국제화의 처리 절차를 개요적으로 정리했습니다.
고전적인 용법은 ugettext 를lazy 가이드를 사용하여 번역할 기호를 표시하고 해당 기호를 출력할 때 번역하여 유니버설 객체를 반환합니다.
1 from django.utils.translation import ugettext as _
2 from django.utils.translation import ugettext_lazy
3
4 label=ugettext_lazy(u" ")
5 ......
6 opt = {"data": [], "name": _(u' ({first},{last})')
label과opt를 출력해야 하는 곳은 자동으로 대응하는 국제화 언어로 바뀌는데, 지금은 코드에서 바뀌었으니 다음은 어떻게 사용해야 하나요?
다음 app 디렉터리에locale 디렉터리를 만들고 이 형식으로
그러면 settings 파일에서 국제화에 대한 설정을 설정해야 합니다. settings 파일에서 다음과 같이 설정해야 합니다.
1 USE_I18N = True
2
3 USE_L10N = True
4
5 LANGUAGE_CODE = 'zh-cn'
6
7 TIME_ZONE = 'Asia/Shanghai'
8
9 LANGUAGES = (
10 ('en', ugettext_lazy(u" ")),
11 ('zh-cn',ugettext_lazy(u" ")),
12 )
13
14 # Accept-Language
15 LOCALEURL_USE_ACCEPT_LANGUAGE=False
16
17 #
18 PREFIX_DEFAULT_LOCALE = True
19
20 # session
21 LOCALEURL_USE_SESSION=True
22
23 MIDDLEWARE_CLASSES = (
24 'django.middleware.gzip.GZipMiddleware',
25 'django.middleware.common.CommonMiddleware',
26 'django.contrib.sessions.middleware.SessionMiddleware',
27 'django.middleware.locale.LocaleMiddleware',
28 'django.middleware.csrf.CsrfViewMiddleware',
29 'django.contrib.auth.middleware.AuthenticationMiddleware',
30 'django.contrib.messages.middleware.MessageMiddleware',
31 )
32
33 TEMPLATE_CONTEXT_PROCESSORS = ("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.core.context_processors.tz",
"django.contrib.messages.context_processors.messages")
참고: MIDDLEWARECLASSES에'django'를 추가합니다.middleware.locale.Locale Middleware',Session Middleware와Cache Middleware 이후 다른 모든 중간부품 앞에 나타나는 것을 보십시오.TEMPLATECONTEXT_PROCESSORS에'django'를 추가합니다.core.context_processors.i18n'.
위와 같은 조작을 마치면 프로젝트를 다국어로 성공적으로 표시할 수 있다. 그 다음은?너는 실제 프로젝트 중 일부는 번역할 수 없는 것이 있다는 것을 알게 될 것이다. 그것은 왜 그런가?왜냐하면 그들은 모두 외부 js를 통해 템플릿에 과장되기 때문이다. 그러면 위에서 언급한 방법을 다시 사용하면 안 된다. 그러면 어떻게 해야 합니까?다음은 외부 js에서 어떻게 다국어 번역을 하는지 소개합니다.
우선, 우리는 urls에 있어야 한다.py 파일에서 다음과 같이 구성됩니다.
url(r'^jsi18n/(?P<packages>\S+?)/$', 'django.views.i18n.javascript_catalog'),
그리고 국제화가 필요한 템플릿 페이지에 다음과 같이 도입한다.
<script type="text/javascript" src="/jsi18n/userauth"></script>
그러면 이 페이지에서 자바스크립트로 gettext 방법을 호출하여 국제화를 실현할 수 있습니다./userauth는locale 파일이 있는 경로입니다. (app 경로일 수 있습니다. 이 app는 settings.py의INSTALL APP에 설정되어야 합니다.)다음은userauth의locale 경로 아래, 예를 들어/zhCN 경로에서 새 djangojs.po 파일, msgid와 msgstr의 대응 관계를 기록합니다.django-admin을 재사용합니다.py compile 메시지는 자바스크립트에서 gettext ('bug. 관리자 ') 를 이용하여 그에 대응하는 국제화 값을 얻을 수 있습니다.
Djangojs에 대해.py 파일의 생성은 다음과 같은 명령을 사용합니다.
django-admin.py makemessage -d djangojs -l en
이렇게 하면 그 전에 우리가django를 생성할 것이다.py 파일의 디렉터리에djangojs가 생성됩니다.py 파일입니다. 이렇게 하면 바로 번역할 수 있습니다.js 파일의 문자열에 대해 우리는 어떤 방식을 사용합니까?
var name = String.format("xxxxxx{0}",gettext('xxx'))
이쯤에서 거의 문제가 생기지 않을 것이다. 그렇다면 자고는 어떤 순서에 따라 어떤 언어를 사용해야 할지 정할 것인가?
1, 사용자session에서django 찾기language key
2, 세션이 없으면 django 찾기language cookie
3, http 헤드 Accept-Language 찾기
4, 이후 설정되지 않음,settings를 사용합니다.LANGUAGE_CODE
어떤 언어를 사용할지 결정한 후 다음과 같은 순서로 모 파일을 찾습니다.
1,settings LOCALE_PATHS 변수에 지정된 경로
2, 각 app 디렉토리의 locale 디렉토리
3, 프로젝트 디렉토리의 locale 디렉토리
4, 마지막은django/conf/locale 디렉터리
중복된 모 파일이 있을 때, 모의 우선순위는 검색 순서와 일치합니다. 즉, 먼저 찾은 것은 뒤의 모 항목을 차단합니다.
OK!!기본적으로 Django 다국어 처리에 대한 부분을 소개했습니다. 이렇게 해서 다국어 처리를 성공적으로 실현했습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django의 질문 및 답변 웹사이트환영 친구, 이것은 우리의 새로운 블로그입니다. 이 블로그에서는 , 과 같은 Question-n-Answer 웹사이트를 만들고 있습니다. 이 웹사이트는 회원가입 및 로그인이 가능합니다. 로그인 후 사용자는 사용자의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.