2014-01-21 33 views
0

我看過很多使用多語言模型的解決方案。但是他們都不容易申請,包括南方不適用。 從獲得我看着這些應用:模型和模板上的Django多語言

好吧,我嘗試我自己的KISS溶液(保持簡單愚蠢)記住,這是我的分析和解決方案,根據我的具體需求(只有兩種語言,西班牙語作爲默認語言):

  1. 我可以創建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 
    
  2. 我可以創建自定義模板標籤,給我希望的領域:

    @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 
    
  3. 我可以從視圖傳遞所需的數據模板

    response['country'] = Country.objects.get(pk=1) 
    
  4. 我可以這樣調用,asumming,我有LANG UAGE_CODE在我的請求上下文:

    {% get_model_translate country name %} 
    

所以,我的問題是: ¿這是一個好辦法?我認爲我看到的唯一問題是性能之一,但我不太確定,尋找其他人已經完成的解決方案。

感謝您的任何建議

+0

爲什麼你不使用django [翻譯](https://docs.djangoproject.com/en/1.5/topics/i18n/translation/)? – lalo

+1

@lalo Django翻譯不支持模型,據我所知 – azuax

回答