如何使用webapp2在Python中建模多语言对象

如何使用webapp2在Python中建模多语言对象,python,google-app-engine,webapp2,wtforms,Python,Google App Engine,Webapp2,Wtforms,我使用Python和webapp2构建了一个多语言web应用程序 我有一个名为Tag的对象,它可以翻译成多种语言。因此,我创建了以下模型: class Language(ndb.Model): code = ndb.StringProperty() name = ndb.StringProperty(indexed=False) class MultilingualText(ndb.Model): language = ndb.KeyProperty(kind=Lan

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


提前多谢

我认为最佳实施方案可能会因您的目标而有所变化,我在这里的回答可能无法满足您的需求

对于
Language
类,我不希望为此使用数据存储。我将使用
babel.Locale
来确定显示名称

正如Tim在评论中所说,我更喜欢使用语言代码作为实体键。下面是一个示例
标记
实现,假设每个
标记
都需要一个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
实体,该标记具有唯一的URL安全字符串(Slug)作为键,以及一个
tag
实体,该
Slug
实体具有语言代码作为键,该
Slug
实体作为其父项

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


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

WtForms和Jinja2支持本地化(I18n)和Babel。我建议你研究一下这些工具,看看它们是否适合你的项目目标。通常情况下,这是一种方式。有些问题-每次你得到一个标签时,你是否可能想要一个给定标签的所有翻译?一段文字能有多大?如果您不总是需要所有的翻译,那么最好将每个翻译保留为标记的子项,键为langauge,然后根据用户语言只获取给定的翻译。只是一些想法;-)@DimitrisMarkis请查看答案并发表评论!WTForm验证的可能性是什么?