azu*_*uax 0 python django multilingual django-templates
我看过许多使用多语言模型处理的解决方案。但是它们都不是很容易应用,包括不适用于南方。我观看的应用程序来自:
好吧,我考虑了 KISS(Keep It simple Stupid)为我自己尝试了一个解决方案,这是我的分析和解决方案,基于我的特定需求(只有两种语言,西班牙语作为默认语言):
我可以使用特定语言创建字段,因为我只会使用英语和西班牙语,而且非常简单
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
Run Code Online (Sandbox Code Playgroud)我可以创建一个自定义模板标签,为我提供所需的字段:
@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
Run Code Online (Sandbox Code Playgroud)我可以将所需的数据从视图传递到模板
response['country'] = Country.objects.get(pk=1)
Run Code Online (Sandbox Code Playgroud)我可以这样称呼它,假设我的请求上下文中有 LANGUAGE_CODE:
{% get_model_translate country name %}
Run Code Online (Sandbox Code Playgroud)所以,我的问题是:¿这是一个好方法吗?我认为我看到的唯一问题是性能问题,但我对此不太确定,正在寻找其他人已经完成的解决方案。
感谢您的任何建议
我曾参与过许多多语言项目,其中包括:https : //github.com/deschler/django-modeltranslation 非常适合模型翻译,无需修改模型即可使其正常工作,最终与 South 一起工作。