Django 분석의 국제화 처리

10755 단어 django
최근에 회사에서 드디어 웹 개발을 시작했습니다. 간단한 첫 페이지와 같은 소규모 프로젝트가 될 줄 알았는데 결과적으로 빅데이터 분석을 처리하는 프로젝트, 유제품 분석에 관한 시스템입니다. 하지만 제가 받은 첫 번째 임무는 이 사이트의 국제화 처리를 하는 것입니다. 프로젝트가 아직 출시되지 않았고 아직 많이 부족하지만 국제화라는 것은 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 디렉터리를 만들고 이 형식으로 /LCMESSAGES/지원하고자 하는 언어 디렉터리를 만들고 app 디렉터리로django-admin을 실행합니다.py makemessages --all 명령, 모든 표시된 번역 기호를 po 파일로 내보내고 각각 /LC 열기MESSAGES/django.po 파일, 기호를 대응하는 로컬 언어로 번역하고django-admin을 실행합니다.py compilemessages는 포 파일을 모 파일로 컴파일합니다. 이 두 명령은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 다국어 처리에 대한 부분을 소개했습니다. 이렇게 해서 다국어 처리를 성공적으로 실현했습니다.

좋은 웹페이지 즐겨찾기