1. Maximbo

    08.09.2008

    0 ↑
    0 ↓
    Здравствуйте.

    На сайт нужно добавить возможность "прозрачного" перевода динамических данный, наподобии того, как это сделано в django-multilingual.

    Возможно ли как-нибудь передать значение request.LANGUAGE в менеджер модели, чтобы при выборке он возвращал перевод на активный язык, либо ничего, если перевод отсутствует?

    Код моделей примерно следующий:
    class Category(models.Model):
    slug = models.SlugField(_(u"slug"), unique=True)
    ...

    class CategoryTranslation(models.Model):
    translation_of = models.ForeignKey(Category, related_name='translations')
    name = models.CharField(_(u"name"), max_length=200, unique=True)
    ...
    lang_code = models.CharField(_(u"language"), choices=settings.LANGUAGES,
    max_length=2)
    Хочется чтобы при
    def category_detail(request, slug):
    category = get_object_or_404(Category, slug=slug)
    print category.name
    на экран выводилось имя категории на языке из request.LANGUAGE, либо ошибка 404. Кошерно ли это, или не в ту сторону смотрю?
  2. Ivan Sagalaev

    08.09.2008

    0 ↑
    0 ↓

    У меня все пример так же, но я выставляю язык явно во вьюхе:

    obj = get_object_or_404(Program, slug=slug)
    if language:
      try:
        obj.translate(language)
      except ProgramTranslation.DoesNotExist:
        raise Http404
    

    obj.translate просто назначает в атрибут нужную модель с переводом:

    def translate(self, language):
      self.translation = self.translation_set.get(language=language)
    
  3. Ivan Sagalaev

    08.09.2008

    0 ↑
    0 ↓

    А, и наверное полезно еще будет привести метод объекта, который подставляет нужные строчки из translation'а:

    def __getattribute__(self, name):
      try:
        return models.Model.__getattribute__(self, name)
      except AttributeError:
        if name in [f.name for f in ProgramTranslation._meta.fields]:
          if self.translation:
            return getattr(self.translation, name)
          else:
            return u'<no translated value>'
        else:
          raise
    
  4. На сайт нужно добавить возможность "прозрачного" перевода динамических данный, наподобии того, как это сделано в django-multilingual.

    А почему бы его не использовать просто?

  5. Maximbo

    08.09.2008

    0 ↑
    0 ↓

    А почему бы его не использовать просто?

    Он на текущем транке нормально работает? У меня с пол-пинка не завелось. Да как-то тяжко верить автоматике, зависящей от потрохов постоянно обновляющегося фреймворка.

  6. Правильно, лучше изобрести свою «автоматику» :-)
  7. Boo

    08.09.2008

    0 ↑
    0 ↓
    А почему бы его не использовать просто?
    Насколько я помню, в django-multilingual нужно изначально задавать нужные языки для переводов, а если позже понадобятся новые?
    Я решил задачу самостоятельно, более гибко и динамично.
  8. Насколько я помню, в django-multilingual нужно изначально задавать нужные языки для переводов, а если позже понадобятся новые?

    Просто добавите новую строчку в settings.py. Там нет жесткой привязки к списку языков.

  9. Ferroman

    10.11.2008

    0 ↑
    0 ↓
    Я решил задачу самостоятельно, более гибко и динамично.
    Поделитесь?
  10. sfelde

    11.11.2008

    0 ↑
    0 ↓
  11. maybe?

    нет. transdb ужасен

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.