2011-03-20 129 views
1

我在评论django-datatrans使用它与django-localeurl并行。DJANGO翻译 - 翻译模型,包括“slugs”与django-datatrans

我想要做的就是让自己的翻译对象访问如下翻译蛞蝓:

  • www.mysite.com/fr/bonjour(法语)
  • www.mysite.com/ en/hello(英语)

为此,我需要'get'来依赖'当前语言'。

要与为例澄清:

如果我做的: 对象= MyObject.objects.get(塞= slug_from_url)

那么 '得到' 应该找对象既可以当:

  • CURRENT_LANGUAGE是FR和slug_from_url ==卓悦
  • CURRENT_LANGUAGE是EN和slug_from_url ==你好

我无法得到这种行为,相反,“get”只能在默认语言中使用“slug_from_url”......在执行过程中无论“当前语言”是什么。

也许我正在接近它的方式,所以任何解决方案是值得欢迎的! 在此先感谢

回答

3

在这种情况下,最简单的方法是查询键值模型

from datatrans.models import KeyValue 
from datatrans.utils import get_current_language, get_default_language 

digest = KeyValue.objects.get(value=slug_from_url, language=get_current_language()).digest 
value = KeyValue.objects.get(digest=digest, language=get_default_language()).value 

# value now contains 'hello' 
myobject = MyObject.objects.get(slug=value) 

此代码基本上会将您的字符串返回到原来的语言,所以你可以执行你的查询。我知道这些是额外的查询,但如果你有一些缓存,这不会损害你的表现。

你可以把它放在一些效用函数中以获得更好的可重用性。

顺便说一下,Datatrans仅用于翻译模型的可显示内容,而不是查找字段,因为这将对Django QuerySet API进行非常激烈的改变。

希望这有助于...