DJANGO翻译 - 使用django-datatrans翻译包含“slug”的模型

1 投票
1 回答
943 浏览
提问于 2025-04-16 14:04

我正在审查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造成很大的改变。

希望这对你有帮助……

撰写回答