我在Django中使用.mo
文件进行本地化。此外,在我的数据库中,我将一些翻译后的文本存储在不同的字段中,例如:
name_en, name_es, name_de
(它们都是每行中的列)。
在模板中选择正确字段的最佳方法是什么?
即:{{ name.some_method }}
将基于当前本地化生成正确的翻译。
谢谢,
Meit
发布于 2011-07-08 11:39:50
我可以看到两种方法,一种在你的视图中,另一种在模板中…
视图中的
你可能会把用户语言信息放在某个地方,
user_lang = 'es'
obj = Somemodel.objects.get(pk=123434)
obj.local_name = getattr(obj, 'name_%s'%user_lang)
因此,您可以将本地翻译保存在实例的特定变量中,并且在您的模板中可以使用:
{{obj.local_name}}
但是,如果您希望向模板传递一个查询集而不是单个实例,那么这样做的代价可能会很高。对于这样的用法,您必须计算查询集中每个对象的值。
模板中的
这是解决模板中问题的一种更复杂的方法...
定义一个template tag并传递object_id和本地语言信息,然后使用类似的getattr函数获取翻译后的文本。但在这一点上,如果您希望将其用于多个模型,则可能还需要为模板标记传递一个content type information,例如:
{% get_translation <object_id> <content_type_id> <local_language> %}
在您的模板标记函数中,执行如下操作:
from django.contrib.contenttypes.models import ContentType
....
cont_obj = Content_type.objects.get_for_id(<cotent_type_id>) #get the related model
obj = cont_obj.get_object_for_this_type(pk=<object_id>) # get your object
return getattr(obj, 'name_%s'%<local_language>)
发布于 2015-10-14 20:57:03
您应该看看http://goodcode.io/articles/django-multilanguage/,这是一个简单的解决方案,它可能适合您的用例,并且易于实现和理解。
发布于 2011-07-08 13:38:41
您应该看看Django Transmeta,它的工作方式与您所做的相同(使用语言代码的DB字段),但它是一个更完整的解决方案。它已经处理了模板之类的东西。
你可以在Model Internationalization和Django Packages上找到更多关于这个领域的信息和想法。
https://stackoverflow.com/questions/6623373
复制相似问题