我看過很多使用多語言模型的解決方案。但是他們都不容易申請,包括南方不適用。 從獲得我看着這些應用:模型和模板上的Django多語言
- http://goodcode.io/blog/django-multilanguage/
- http://and-other-things.blogspot.com/2009/04/list-of-django-multilingual-model.html
好吧,我嘗試我自己的KISS溶液(保持簡單愚蠢)記住,這是我的分析和解決方案,根據我的具體需求(只有兩種語言,西班牙語作爲默認語言):
我可以創建f從具體的語言ields因爲我將只用英語和西班牙語,這是非常簡單的
class Country(models.Model): name = models.CharField('Pais', max_length=80) name_en = models.CharField('Country', max_length=80, blank=True, null=True) class Meta: verbose_name = 'Pais' verbose_name_plural = 'Paises' def __unicode__(self): return self.name
我可以創建自定義模板標籤,給我希望的領域:
@register.tag(name='get_model_translate') def do_translation(parser, token): try: tag_name, o_model, field = token.split_contents() except ValueError: raise template.TemplateSintaxError(u'Los parámetros no son válidos') return Translate(tag_name, o_model, field) class Translate(template.Node): def __init__(self, tag_name, o_model, field): self.tag_name = tag_name self.o_model = template.Variable(o_model) self.field = field def render(self, context): lang_code = context.get('request').LANGUAGE_CODE o_model = self.o_model.resolve(context) try: data = o_model.__getattribute__('%s_%s' % (self.field, lang_code)) except Exception, e: try: data = o_model.__getattribute__('%s' % self.field) except Exception, e: data = '' return data
我可以從視圖傳遞所需的數據模板
response['country'] = Country.objects.get(pk=1)
我可以這樣調用,asumming,我有LANG UAGE_CODE在我的請求上下文:
{% get_model_translate country name %}
所以,我的問題是: ¿這是一個好辦法?我認爲我看到的唯一問題是性能之一,但我不太確定,尋找其他人已經完成的解決方案。
感謝您的任何建議
爲什麼你不使用django [翻譯](https://docs.djangoproject.com/en/1.5/topics/i18n/translation/)? – lalo
@lalo Django翻譯不支持模型,據我所知 – azuax