【问题标题】:Django model internationalizationDjango 模型国际化
【发布时间】:2019-08-06 09:24:05
【问题描述】:

在 Django 中翻译模型字段的最佳方式是什么?我考虑过向模型添加额外的字段(每种语言一个字段)或创建另一个包含每种语言的所有文本的模型,有推荐的方法来实现吗?

非常感谢

【问题讨论】:

  • 寻找为你做这件事的包:django-modeltranslation 和 django-vinaigrette。第一个使用额外的字段(隐藏在幕后),第二个使用带有 gettext 的 .po 文件。我个人更喜欢数据库字段。

标签: django django-models internationalization


【解决方案1】:

注意:我第一次投票结束这个主要是基于意见,但后来让我感到震惊的是,实际上有技术原因选择一种解决方案......

这两种方法都有效,事实上,您会发现基于其中任何一种方法的可重用 django 应用程序。

从技术上讲,每种设计都有利有弊。

使用不同的“翻译”对象意味着您将有一个额外的连接或查询(以获得“主”模型及其翻译),但您对主模型本身没有任何开销(没有翻译) .此外,它使创建/更新操作更加复杂。

使用额外的“隐藏”每个语言字段可以避免连接/额外的查询开销并保持创建/更新操作简单,但会使记录更大,因此它有一些开销 wrt/数据库本身(页面缓存管理等)和在 django 进程和数据库之间来回传输的数据量。

一般来说,如果您必须支持多种语言和/或必须为每个模型翻译大量文本字段,您可能希望使用不同的模型进行翻译,而如果您的翻译很少语言和每个模型只有几个“可翻译”字段,“隐藏字段”方法将更易于实现,并且将避免额外的查询/连接。

就我而言,我对这两种解决方案都有经验,并发现“隐藏字段”解决方案(使用 django-modeltranslations)可以很好地满足我们当前的需求(支持四种语言,我们应该不会得到太多更多,每个模型不超过 =~ 四个可翻译字段,并且这些模型很少更新,因此我们可以在需要时积极缓存),但您可能有完全不同的需求。

在所有情况下,甚至不要尝试从头开始实现,而是使用现有的 django 应用程序之一,它会为您节省大量时间和痛苦。

【讨论】:

  • 非常感谢您的回复。我一直在阅读 django-modeltranslations 文档,对此我有一个疑问。如果我已经创建了模型,我可以使用它吗?因为我读过 (django-modeltranslation.readthedocs.io/en/latest/…) makemigrations 不会自动与已经创建的模型一起工作,所以我不确定它是否会舒适使用。
  • 您没有正确阅读文档。 Makemigrations 在现有模型上运行良好,前提是这些模型存在于您自己的应用程序之一中。唯一的问题是当您想向第 3 部分应用程序添加翻译支持时,这只是一个问题,因为迁移将被添加到第 3 部分应用程序的源代码中(这意味着您必须分叉并维护分叉) - 然后您可以改用提供的sync_translation_fields 命令。 FWIW,据我所知,我只在现有模型上使用过模型翻译;-)
【解决方案2】:

【讨论】:

  • 用户询问模型的翻译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 2011-07-12
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多