2011-07-26 4 views
1

내 장고 응용 프로그램 사용자는 일련의 웹 양식을 통해 상호 작용하고 로그가 생성됩니다. 로그는 예를 들어 다음과 같이 보일 수 있습니다.Django에서 다국어 "로그 메시지"를 갖는 가장 좋은 방법은 무엇입니까?

  1. 전투가 시작되었습니다!
  2. 공격자 (Elver)가 회오리 바람을 사용했습니다. 그것은 매우 효과적이었다!
  3. Defender (Angeleyes)가 해자를 만들었습니다. 국방 +5.
  4. 폭풍이 발생했습니다. 공격자 (Elver)가 차례를 놓친다.

문제는이 로그가 다른 언어로 표시되어야한다는 것입니다. 새 언어가 추가되면 이전 로그 메시지도 자동으로 새 언어로 표시되어야합니다.

당신은 (등 PARAMS없이 이벤트, PARAMS와 이벤트, 공격 이벤트, 건설 이벤트) 여러 메시지의 종류

그래서 그들은 것이라고 이러한 저장할 수있는 최선의 데이터 구조는 무엇인가가 볼 수 있듯이 간단한 템플릿을 기반으로 쉽게 번역 할 수 있습니까?

내 생각은 원래 각 이벤트에 대해 별도의 모델을 작성하는 것이 었습니다. 공격자, 철자, 결과 필드가있는 클래스 AttackEvent (models.Model)입니다. 그러나 이것들은 어떤 전투로 되돌아 가야 만 모든 것을 질의하고 그것들을 분류하는 것이 쉬울 것입니다. 그들은 모두 같은 related_name을 가진 ForeignKey를 사용하여 해당 전투를 다시 참조 할 수 있습니까? 아마도 그렇지 않습니다.

또 다른 옵션은 거대한 GenericLogEvent 클래스를 가지며 그 중 대부분은 param이 빈 = True, null = True 인 매개 변수를 갖습니다. eventType에 따라 전환합니다.

여기서 가장 좋은 방법은 무엇입니까?

+0

나는 큰 django 개발자가 아니지만, 나를 위해 django 메시지 contrib과 templatetag를 사용하여 멋지게 표현할 수 있습니다 ... json 데이터베이스 필드를 사용하여 모든 매개 변수를 가질 수 있습니다. 케이스가 관련성이없는 메시지가 될 수 있습니다. – christophe31

답변

3

로그 메시지 모델에 메시지와 매개 변수를 저장하고 (django-picklefield 참조) Django를 translation stuff에 내장하여 메시지를 다른 언어로 번역 할 수 있습니다.

+0

이것은 꽤 좋은 방법입니다. 감사! unpickling 및 렌더링 100 + 로그 메시지의 성능에 대해 걱정하지만 ... 나는 그들이 변하지 않기 때문에 쉽게 캐싱 될 수 있다고 생각합니다. –

관련 문제