2011-03-20 133 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進行非常激烈的改變。

希望這有助於...