Is there a standard way to deal with multi-language models?
We've got models/ classes that have some information in several
languages, and we'd like to return an appropriate language, but
currently there's no easy way for the model to access the "current
language". What would be a good way? Again, is anyone working on
this?
http://www.djangoproject.com/documentation/i18n/#the-set-language-redirect-view
The chosen language is stored in request.LANGUAGE_CODE, so you can
access it in your view function and pass it along to model code that
needs to know it.
bye, Georg
my model:
from django.core import meta
from django.conf.settings import LANGUAGES
class Publication(meta.Model):
pub_name = meta.CharField(maxlength=16,verbose_name='publication
name')
class META:
admin = meta.Admin()
class Site(meta.Model):
language = meta.CharField(maxlength=16,choices=LANGUAGES)
pub_conteiner= meta.ForeignKey(Publication,
edit_inline=meta.STACKED)
title = meta.CharField(maxlength=64,core=True)
site = meta.TextField(core=True)
pub_date = meta.DateTimeField()
class META:
admin = meta.Admin()
def __repr(self):
return self.title
in django admin i have a conteiner and OneTo Many Sites.
in template i'll use (this is not django code :)
for p in publication_list:
for site in site_list:
if s.lanuage == current_request.LANGUAGE
{{s.title}}<br>{{s.site}}...
this solution is ugly :)
django need a new meta.Model class with suport for i18n.
i need it so (backward-incompatibile change)
#------
from django.core import meta
from django.conf.settings import LANGUAGES
class Publication(meta.Model):
title = meta.CharField(maxlength=30,verbose_name=_('Title'))
conntent = meta.TextField(verbose_name=_('Content'))
class META:
admin = meta.Admin()
i18n_support = True
i18n_lang_list = LANGUAGES
i18n_default_lang = 'en'
and now in admin interface it shuld be one pos.on list and in detail
view it shuld
show LANGUAGES.count() forms to enter title and content
end in template like so
for pub in pub_list:
{{pub.title|request.LANGUAGE_CODE}}
or
for pub in pub_list:
{{pub.titel|i18n}}
sorry for my poor english :P
2005/11/22, Krzysztof Drozd <krzy...@asi.pwr.wroc.pl>:
> class Publication(meta.Model):
> title = meta.CharField(maxlength=30,verbose_name=_('Title'))
> conntent = meta.TextField(verbose_name=_('Content'))
> class META:
> admin = meta.Admin()
> i18n_support = True
> i18n_lang_list = LANGUAGES
> i18n_default_lang = 'en'
>
How does the i18n_support, i18n_lang_list, i18n_default_lang works ?
now i make my code so:
http://groups.google.com/group/django-developers/browse_thread/thread/37c0346fb9ba1cf7
#-*- coding: utf-8 -*-
from django.core import meta
from django.conf.settings import LANGUAGES
from django.conf.settings import GRUPY_ARTYKULOW
class Artykul(meta.Model):
publikowalny =
meta.BooleanField(default=True,verbose_name=_('Publikowalny'))
grupa = meta.CharField(
maxlength=36,
choices=GRUPY_ARTYKULOW,
verbose_name=_('Grupa artykulów'),
verbose_name_plural=_('Grupy artykulów'),
help_text=_('Wybierz grupe/kategorie artykulów')
)
nazwa = meta.CharField(
maxlength=64,
verbose_name=_('Nazwa artykulu'),
verbose_name_plural=_('Nazwy artykulów'),
help_text=_('Ten tytul bedzie pokazywac sie tylko w panelu
administracyjnym')
)
data_publikacji =
meta.DateTimeField(auto_now_add=True,verbose_name=_('Data publikacji'))
adres =
meta.SlugField(prepopulate_from=("nazwa",""),verbose_name=_('Adres URL
artykulu'))
class META:
admin = meta.Admin(
list_display =
('publikowalny','grupa','data_publikacji','nazwa'),
save_on_top=True,
search_fields = ('nazwa','grupa'),
)
get_lastest_by = "data_publikacji"
verbose_name = 'Artykul'
verbose_name_plural = 'Artykuly'
def __repr__(self):
return self.nazwa
def get_absolute_url(self):
return "/artykuly/%i" % (self.id)
class WersjaJezykowa(meta.Model):
artykul = meta.ForeignKey(
Artykul,
edit_inline=meta.STACKED,
num_in_admin=len(LANGUAGES),
num_extra_on_change=0
)
jezyk = meta.CharField(
maxlength=16,
choices=LANGUAGES,
radio_admin=True,
verbose_name=_('Jezyk'),
help_text=_('W tym polu mozesz wybrac jezyk strony')
)
tytul = meta.CharField(
maxlength=64,
core=True,
verbose_name=_('Tytul artykulu'),
help_text=_('Tytul artykulu, wpisz go we wlasciwym
jezyku')
)
tresc = meta.TextField(
core=True,
verbose_name=_('Tresc artykulu'),
help_text=_('Tresc artykulu, wpisz ja we wlasciwym
jezyku')
)
class META:
admin = meta.Admin()
verbose_name = 'Wersja jezykowa'
verbose_name_plural = 'Wersje jezykowe'
def __repr__(self):
return self.tytul
this is a simple multilang Article model class,
one site with multi languages, that will mayby work bu it is wery ugly
:)