10

我使用 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 一起用于验证等。

提前非常感谢!

4

1 回答 1

5

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

对于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 验证,你能告诉我你想如何验证发布数据吗?如果您分享您的详细需求,我认为您将能够获得更好的答案。

于 2013-02-26T08:37:04.883 回答