Форум сайта python.su
Задача: Хочу сделать модель новостей. (атрибуты модели: title, body, timestamp, …). Но, хочу еще сделать с i18n.
Как лучше решать эту задачу? Где лучше хранить перевод: в БД или в файлах перевода? Кто сталкивался или есть какие-то идеи - подскажите. Спасибо.
Я бы хранил все в файлах (*.mo), но как тогда это реализовать.
Чтобы, когда в админке добавил новую новость (заглавие, тело …), чтобы при сборке этот текст попадал в файл перевода?.. что-то не могу понять.
Отредактировано (Окт. 8, 2009 15:22:34)
Офлайн
И вопрос в догонку: почему ugettext_lazy() не работает с кириллицей?.. ugettext_lazy('Украина') - дает ошибку..
Офлайн
google django_multilingual
i18n - http://docs.djangoproject.com/en/dev/topics/i18n/#topics-i18n
И почитай про юникод в питоне.
ugettext_lazy(u'Украина')
Отредактировано (Окт. 8, 2009 15:50:49)
Офлайн
Доки читал. Просто я спросил, как именно лучше сделать?
Почему не google “ i18n в модели” и все?!
А про юникод я забыл… это в тройке все строки уже = юникод.
Офлайн
Какого ответа ты ждёшь? В гугле полно информации, да и на форуме тоже.
Для статичных надписей - использовать стандартный функционал джанги
Тут подробно на аглийском:
http://www.djangobook.com/en/1.0/chapter18/
Тут - на русском:
http://www.djbook.ru/ch18.html
Для записей, которые будут добавятся пользователем и сохранятся в базе я использую django-multilingual http://code.google.com/p/django-multilingual/
Офлайн
Спасибо, понял. Буду читать.
Офлайн
а можно на кусочек модели посмотреть ?
Офлайн
# -*- coding: utf-8 -*-
import multilingual
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
from django.contrib.sites.models import Site
class NewsPost(models.Model):
class Translation(multilingual.Translation):
title = models.CharField(_(u'Заглавие'), max_length=150)
body = models.TextField(_(u'Текст'))
timestamp = models.DateTimeField(_(u'Дата'))
class Meta:
verbose_name = _(u'новость')
verbose_name_plural = _(u'новости')
ordering = ('-timestamp',)
def get_absolute_url(self):
return '/info/news/#news'+str(self.id)
Офлайн