【问题标题】:Building string base for Django application为 Django 应用程序构建字符串库
【发布时间】:2009-08-07 10:46:06
【问题描述】:

我正在 django 中构建一个应用程序,它已经使用了很多硬编码的字符串。它们大多在模板中,但也有一些在 js 文件中,还有一些可以在代码中找到。现在,每次需要更改某些字符串时,都会有人来找我们,我们不得不浪费时间寻找和更改。我怎样才能开始清理它并将所有这些字符串放在单独的文件中,非程序员可以编辑?

【问题讨论】:

    标签: django string


    【解决方案1】:

    我们将所有硬编码的字符串保存在一个单独的模块中。但是,由于您希望用户随意修改字符串,因此最好将它们保存在数据库中。我认为一个带有键(字符串的标识符)和值(字符串本身)字段的简单模型就可以了。然后,您可以开发一个简单的页面,用户可以通过其标识符选择一个字符串并根据需要对其进行更新。

    关于如何在您的应用中使用它们,您可以在应用启动时将它们全部提取到 dict 中(适当的位置可能是 init 模块)并相应地使用它们。

    【讨论】:

    • 这很酷,尤其是所有字符串的 Web 管理。但是,保留 gettext 而只是在数据库中保存翻译是否有任何意义?
    • 您必须将字符串的翻译存储在数据库中,因为提供它们的又是用户。所有其他不允许用户修改的字符串都必须是“gettext”。
    • 好的,那么通过gettext 编码特定的字符串(可以有什么样的编码器特定的字符串??我们为什么要翻译它们??)以及数据库中用户可见的所有内容。但是对于 javascript 的字符串库,可以保存在单独的文件中呢?
    • 不完全是。用户需要修改的字符串转到数据库。用户无法触摸的字符串会保留在代码中,即使它们是可见的。如果你真的有用户必须在 js 代码中更改的字符串,也许最好将它们取出到 db 并从 python 提供给 js 代码。我在 ajax 调用中做类似的事情,将翻译后的字符串放在响应中。
    • 我真的不喜欢混合 javascript 和 django 模板语言的想法,因为它很快就会变得一团糟。但也许这是唯一的方法。尽管如此,将所有脚本作为模板制作一个文件并通过视图提供它似乎有点奇怪;-) 感谢您的帮助:)
    【解决方案2】:

    使用i18n services (gettext) 怎么样?即使您不打算本地化您的应用程序,它们也提供了一种简单而标准的方法来将字符串与实际代码分开。

    另外,作为 PO 相当通用的标准,有很多tools 可以编辑资源文件;其中之一(在 Windows 上也可用)是 Poedit

    【讨论】:

    • 是的,我知道,Django 中有基于 gettext 的 I18N 系统。但是,它的工作原理是这样的:您在代码中以一种自然语言编写消息,并在其他地方提供翻译。我们还没有翻译,但我们不想在代码中硬编码任何字符串。而python代码只有一处。 javascript 或 html 的东西呢?
    • 模板可以使用 i18n 功能获取字符串:docs.djangoproject.com/en/dev/topics/i18n/#in-template-code
    猜你喜欢
    • 2014-01-20
    • 2021-12-25
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-26
    • 2020-01-04
    相关资源
    最近更新 更多