首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django中的数据库本地化

Django中的数据库本地化
EN

Stack Overflow用户
提问于 2011-07-08 18:45:43
回答 3查看 2.4K关注 0票数 3

我在Django中使用.mo文件进行本地化。此外,在我的数据库中,我将一些翻译后的文本存储在不同的字段中,例如:

name_en, name_es, name_de (它们都是每行中的列)。

在模板中选择正确字段的最佳方法是什么?

即:{{ name.some_method }}将基于当前本地化生成正确的翻译。

谢谢,

Meit

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-07-08 19:39:50

我可以看到两种方法,一种在你的视图中,另一种在模板中…

视图中的

你可能会把用户语言信息放在某个地方,

代码语言:javascript
复制
user_lang = 'es'
obj = Somemodel.objects.get(pk=123434)
obj.local_name = getattr(obj, 'name_%s'%user_lang)

因此,您可以将本地翻译保存在实例的特定变量中,并且在您的模板中可以使用:

代码语言:javascript
复制
{{obj.local_name}}

但是,如果您希望向模板传递一个查询集而不是单个实例,那么这样做的代价可能会很高。对于这样的用法,您必须计算查询集中每个对象的值。

模板中的

这是解决模板中问题的一种更复杂的方法...

定义一个template tag并传递object_id和本地语言信息,然后使用类似的getattr函数获取翻译后的文本。但在这一点上,如果您希望将其用于多个模型,则可能还需要为模板标记传递一个content type information,例如:

代码语言:javascript
复制
{% get_translation <object_id> <content_type_id> <local_language> %}

在您的模板标记函数中,执行如下操作:

代码语言:javascript
复制
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>)
票数 0
EN

Stack Overflow用户

发布于 2015-10-15 04:57:03

您应该看看http://goodcode.io/articles/django-multilanguage/,这是一个简单的解决方案,它可能适合您的用例,并且易于实现和理解。

票数 3
EN

Stack Overflow用户

发布于 2011-07-08 21:38:41

您应该看看Django Transmeta,它的工作方式与您所做的相同(使用语言代码的DB字段),但它是一个更完整的解决方案。它已经处理了模板之类的东西。

你可以在Model InternationalizationDjango Packages上找到更多关于这个领域的信息和想法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6623373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档