DJANGO翻译 - 使用django-datatrans翻译包含“slug”的模型
我正在审查django-datatrans,打算和django-localeurl一起使用。
我想做的是翻译网址中的“slug”,这样我的翻译对象可以通过以下方式访问:
- www.mysite.com/fr/bonjour(法语)
- www.mysite.com/en/hello(英语)
为此,我需要让“获取”操作依赖于“当前语言”。
举个例子来说明:
如果我这样写:
object = MyObject.objects.get(slug=slug_from_url)
那么“获取”操作应该能找到对象,条件是:
- 当前语言是法语(FR),并且slug_from_url是bonjour
- 当前语言是英语(EN),并且slug_from_url是hello
但我无法实现这个效果,结果是“获取”操作只会根据默认语言的“slug_from_url”来工作……无论执行时的“当前语言”是什么。
也许我方法不对,所以任何解决方案都欢迎!谢谢!
1 个回答
3
在这种情况下,最简单的解决办法就是查询KeyValue模型。
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的查询集API造成很大的改变。
希望这对你有帮助……