2009-08-07 68 views
0

我在django中構建了一個應用程序,它已經使用了大量的硬編碼字符串。他們主要在模板中,但也有一些在js文件中,還有一些可以在代碼中找到。現在每一次都需要改變一些字符串,人們來找我們,我們不得不浪費時間找到它並改變。我怎麼能開始清理這些,並將所有這些字符串放在單獨的文件中,這可以由非程序員編輯?構建Django應用程序的字符串基礎

回答

1

我們將所有硬編碼的字符串保存在一個單獨的模塊中。但是,由於您希望用戶按自己的喜好修改字符串,因此最好將它們保存在數據庫中。我認爲一個簡單的模型帶有一個鍵(一個字符串的標識符)和一個值(字符串本身)字段。然後,您可以開發一個簡單的頁面,用戶通過其標識符選擇一個字符串,然後根據需要更新它。

關於如何在應用程序中使用它們,您可以在應用程序啓動時(適當的位置可能是init模塊)將它們全部轉換爲字典並相應地使用它們。

+0

這很酷,特別是所有字符串的網絡管理。然而,在保持gettext方面還有什麼意義,只需要在數據庫中進行翻譯? – gruszczy 2009-08-07 15:16:14

+0

您必須將字符串的翻譯存儲在數據庫中,因爲它將再次提供這些字符串的用戶。用戶不允許修改的所有其他字符串都必須爲「gettext」。 – shanyu 2009-08-07 15:25:39

+0

好吧,所以編碼器通過gettext指定特定的字符串(哪種編碼器特定的字符串可以存在?我們爲什麼要轉換它們?)以及數據庫中用戶可見的所有字符串。但是,JavaScript的字符串基數呢,可以保存在單獨的文件中呢? – gruszczy 2009-08-07 15:45:39

1

如何使用i18n services(gettext)?即使您不打算本地化您的應用程序,它們也提供了一種簡單而標準的方式將字符串與實際代碼分開。

此外,作爲PO相當普遍的標準,有大量的tools來編輯資源文件;其中一個(也可在Windows上)是Poedit

+0

是的,我知道,基於gettext的Django中有I18N系統。但是,它的工作原理是這樣的:您在代碼中使用自然語言編寫消息,並在其他地方提供翻譯。我們還沒有翻譯,但是我們不想在代碼中硬編碼任何字符串。而Python代碼只有一個地方。那麼javascript或html的東西呢? – gruszczy 2009-08-07 11:02:26

+0

這些模板可以使用國際化的功能獲取字符串:http://docs.djangoproject.com/en/dev/topics/i18n/#in-template-code – 2009-08-07 11:56:02