【问题标题】:How to model multilingual objects in Python using webapp2如何使用 webapp2 在 Python 中建模多语言对象
【发布时间】:2012-12-12 00:05:59
【问题描述】:

我使用 Python 和 webapp2 构建了一个多语言 Web 应用程序。

我有一个名为 Tag 的对象,它可以翻译成多种语言。为此,我创建了以下模型:

class Language(ndb.Model):
    code = ndb.StringProperty()
    name = ndb.StringProperty(indexed=False)


class MultilingualText(ndb.Model):
    language = ndb.KeyProperty(kind=Language)
    text = ndb.TextProperty(indexed=False)


class Tag(ndb.Model):
    translations = ndb.StructuredProperty(MultilingualText, repeated=True, indexed=False)

我想问一下这是否是执行此类任务的正确方法,以及如何将此结构与 WTForms 一起用于验证等。

提前非常感谢!

【问题讨论】:

  • WtForms 和 Jinja2 支持本地化 (I18n) 和 Babel。我建议你研究这些工具,看看它们是否符合你的项目目标。通常这是要走的路。
  • 一些问题 - 每次获得标签时,您是否可能想要给定标签的所有翻译?一段文字可以有多大?如果您并不总是需要所有翻译,最好将每个翻译保留为标签的子项,键是语言,然后仅根据用户语言获取给定的翻译。只是一些想法;-)
  • @DimitrisMarkis 请查看答案并制作任何 cmets!

标签: python google-app-engine webapp2 wtforms


【解决方案1】:

我认为最佳实施可能会根据您的目标而改变,而我在这里的回答可能无法满足您的需求。

对于Language 类,我宁愿不为此目的使用数据存储。我会使用babel.Locale 来确定显示名称。

正如 Tim 在评论中所说,我更喜欢使用语言代码作为实体键。这是一个 Tag 实现示例,假设每个 Tag 都需要一个 urlsafe slug。

def get_urlsafe_slug_from_tag(tag_text):
    # ...
    # ...

class Slug(ndb.Model):
    # use urlsafe slug as the key_name
    # You can optionally use the property bellow.
    available_translations = ndb.StringProperty(repeated=True)

class Tag(ndb.Model):
    # use language code as the key_name
    text = ndb.TextProperty()

当新创建一个标签时,我将创建两个实体;一个 Slug 实体,以该标签的唯一 urlsafe 字符串 (slug) 作为键,以及一个 Tag 实体,以语言代码作为键,此 Slug 实体作为其父实体。

在此示例中,有一个名为 available_translations 的属性,它允许您与用户的语言选择进行协商,甚至执行一个查询,该查询将返回带有指定语言翻译的 Slugs(例如,列出带有日语翻译的 Slugs) .

对于 WTForm 验证,你能告诉我你想如何验证发布数据吗?如果您分享您的详细需求,我认为您将能够得到更好的答案。

【讨论】:

  • WTForm 验证的可能性是什么?
猜你喜欢
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-08
  • 2022-12-29
相关资源
最近更新 更多