2012-10-25 2 views
1

특정 종류의 이벤트를 관리하기 위해 단일 Django 프로젝트를 배포하고 있습니다. 단일 데이터베이스에는 두 가지 배포가 있으며 사이트는 슬로바키아어로되어 있습니다. 그들은 "Akadémia Trojstenu"및 "Klub Trojstenu"라고 불리는 행사를위한 것입니다. 간단한 부분은 sites 프레임 워크를 사용할 수 있으므로 적절하게 각 사이트의 표시 이름을 설정하고 내 템플릿에서 이벤트의 이름을 참조해야하는 위치를 사용하십시오.다중 사이트 장고 배포시 문법적 사례

슬로바키아어가 문법적 인 경우를 사용한다는 것을 알기 전까지는이 모든 것이 올바르게 보입니다. 즉, 어떤 곳에서는 예를 들어 "프로그램 Akadémie Trojstenu"/ "Klubu Trojstenu"또는 "Staré Akadémie"/ "Staré Kluby"를 써야합니다.

예를 들어, 템플릿 코드의 다음 조각을 고려하십시오

<link rel="alternate" type="application/atom+xml" title="Novinky pre {{ site.name }}" href="{% url "news_feed" %}" /> 

site.name는 "사 아카데미 Trojstenu"를 포함,하지만이 경우에 나는의 내용, 즉 출력 "Novinky 사전 Akadémiu Trojstenu"에 필요 변수는 네 번째 문법의 경우이다.

이 순간에 내가 볼 수있는 유일한 방법은 템플릿의 이러한 모든 경우를 특수하게 처리하는 것입니다. 현재 사이트의 도메인을보고 올바른 이름의 문법을 출력 할 수 있습니다. 이 솔루션은 명백히 무거 우므로 반 건조하고 끔찍하며 어린 아이를 먹을 것입니다.

누구에게 더 좋은 제안이 있습니까? 어떤 종류의 표준 솔루션이 있습니까? 나는 문법적 인 경우를 사용하는 언어가 많이 있다는 것을 상상하고 있습니다. 그리고 확실히 저에게이 문제가 발생한 사람이 있습니다.

답변

1

@jpic이 말한 것처럼, 상황에 맞는 마커로 할 수 있습니다. 실제로 django의 makemessages에 의해 선택 될 것이므로 사이트 이름이 템플릿에 포함되어 있으면 더 간단합니다.

<link rel="alternate" type="application/atom+xml" 
     title="Novinky pre {% trans 'Akadémia Trojstenu' context '4th' %}" 
     href="{% url "news_feed" %}" /> 

이 아마 여러 사이트를 간단하지 않기 때문에, 대신 추가와 .po 파일을 수동으로 모든 사이트의 이름과 자신의 번역과 상황에 맞는 이름을 입력 할 수 있습니다.

이것은 번역 파일과 일부 데이터베이스 값을 수동으로 동기화하기 때문에 오류가 발생하기 쉽지만 적어도 한 곳에서나 템플릿 외부에 있습니다.

msgctxt "1st" 
msgid "Akadémia Trojstenu" 
msgstr "Akadémia Trojstenu" 

msgctxt "2nd" 
msgid "Akadémia Trojstenu" 
msgstr "????? Trojstenu" 

msgctxt "3rd" 
msgid "Akadémia Trojstenu" 
msgstr "Akadémie Trojstenu" 

msgctxt "4th" 
msgid "Akadémia Trojstenu" 
msgstr "Akadémiu Trojstenu" 

... 

msgctxt "3rd" 
msgid "Klub Trojstenu" 
msgstr "Klubu Trojstenu" 

... 

스틱

다른 디렉토리에 추가와 .po과 LOCALE_PATHS 설정에서 디렉토리를 등록합니다. 이렇게했는지 기억하십시오. 누군가가 새 사이트를 추가하거나 이름을 변경하고 번역이 왜 잘못되었는지 궁금해지기 시작하는 경우를 알 수 있습니다.

이 작업을 수행으로,이 같은 사이트 이름을 사용할 수 있어야합니다 :

물론
<link rel="alternate" type="application/atom+xml" 
     title="Novinky pre {% trans site.name context '4th' %}" 
     href="{% url "news_feed" %}" /> 

이 문제가 단지 사이트 이름으로 제한하는 경우, 대신 몇 가지 더 필드에 붙어 있습니다 귀하의 사이트 모델은 다른 케이스 (하위 클래스)를 보유합니다. 사이트 객체는 절대로 변하지 않기 때문에 이러한 종류의 비정규 화가 문제를 일으킬 것이라고 저는 생각하지 않습니다.

1

그냥 variables in your translation strings를 사용 또한 templates에서 작동

output = _('Today is %(month)s %(day)s.') % {'month': m, 'day': d} 

을 :

{% blocktrans with site.name as site_name %}Novinky pre {{ site_name }}.{% endblocktrans %} 

Finnaly, 당신은 translation contexts을 사용하는 것이 유용 할 수 있습니다.

거기에 "작은 아이들을 먹지 않아도됩니다."(배가 고픈 것이 아니라면).

+0

어쩌면 저는 너무 느리지 만 번역 문자열에서 자리 표시자를 사용하는 방법을 보지 못합니다 (어쨌든 거기에 있지 않습니다) 제가 템플릿에 포함하고있는 변수에 특정 문자열을 만들 수 있습니다. 문법 케이스 인식 ... – koniiiik

+0

당신을 괴롭히는 예제 코드를 붙여 넣으십시오. – jpic

+0

예제를 추가했습니다. – koniiiik