I am trying to build a database model for a multilingual website. This is models.py
:
class Language(models.Model):
name = models.CharField(max_length=2)
def __unicode__(self):
return self.name
class TranslationText(models.Model):
content = models.TextField()
language = models.ForeignKey(Language)
remark = models.CharField(max_length=40, blank=True, default='')
def __unicode__(self):
return '('+self.language.name+' : ' + self.remark + ') ' + self.content[:30]
class i18nText(models.Model):
translation = models.ManyToManyField(TranslationText, related_name='i18n_txt')
remark = models.CharField(max_length=40, blank=True, default='')
def __unicode__(self):
return self.remark
class Region(models.Model):
name = models.ForeignKey(i18nText, related_name='region_name')
remark = models.CharField(max_length=32, default='', blank=False)
def __unicode__(self):
return self.remark
When I want to retrieve regions in english I do this:
regs = TranslationText.objects.filter(language__name='en').exclude(i18n_txt__region_name=None).values_list('content', flat=True)
The same if I want to retrieve in German:
regs = TranslationText.objects.filter(language__name='de').exclude(i18n_txt__region_name=None).values_list('content', flat=True)
However, I would like to have english as a "fallback" language. So, in case there is no data in the database for a certain region for a certain language then my program should be able to pick literals in English.
I want it like this because most of the times literals are the same in all latin-based languages (especially regions). So I reduce data entry to the minimum.
Is that possible, at all? How?