2012-04-22 73 views
0

雖然試圖執行一個網站的翻譯版本,我碰到下面的問題就來了(這是後顯示在網頁上),我用的就是包括像行特殊的視圖:Django的存儲懶翻譯

Model.objects.create(name = "testName",...) 

我試圖實現與下面的代碼翻譯:

Model.objects.create(name = _("testName"),...) 

如果我輸入ugettext_,它只是把「測試名」的翻譯值在數據庫中。 如果我輸入ugettext_lazy_,我有一個InterfaceError(更準確地說Error binding parameter X - probably unsupported type

我在想,如果這樣的初始化是可能的,如果我必須找到某種解決方法。

在此先感謝。

回答

2

只存儲英文版本的數據庫,並僅在輸出時調用ugettext/_lazy。這顯然只是只要那些字符串翻譯存在的作品,否則會顯示英文版本兩種方式...

+0

同意,輸出過程中調用它。也許是一個有用的補充:根本原因是它是一個數據庫限制。數據庫只包含常規字符串,而不是python可以稍後自動轉換的python對象。 – 2012-04-22 16:14:28

+0

我第一次嘗試時就是這樣開始的。看到似乎沒有其他簡單的選擇,我最終會這樣做。 – 2012-04-22 19:39:04

1

ugettextugettext_lazy用於靜態I18N翻譯,它們應用於代碼中的可翻譯文本以收集文本到文件,最後在.mo文件中。
通常對於動態文本,您需要通過Django ORM在數據庫中創建翻譯模式,並在諸如Django Admin的視圖中編輯翻譯。然後在您的視圖中,根據所需語言顯示正確版本的翻譯。
你可以「商店」一個ugettext_lazy__proxy__通過酸洗,以分貝,可以unpickle並把它應用unicode得到翻譯。然而,國際海事組織(IMO)將代碼中的文字存儲到數據庫中毫無意義。

如果你想它是通過Web界面管理寶基於翻譯解決方案,參考https://github.com/mbi/django-rosetta

+0

thanx的頭,你的解決方案似乎爲我的項目壽有點大材小用(這是一個很小的項目,我只是探索Django的可能性) – 2012-04-22 19:41:22

0

只是補充說,萬一有人需要它。

這是我發現的實現弗洛裏安解決方案,以避免需要添加/每次取出_功能的最佳途徑。 你會在文件中定義的虛擬函數包含字符串:

def _(input): 
    return input 

這樣,你的字符串將被存儲在原始語言,但makemessages仍然會對其進行處理一樣,需要一個字符串翻譯,因此把它們放在.po文件中。你只需要在html中使用{% trans %}塊。