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

Dim*_*ris 10 python google-app-engine wtforms webapp2

我使用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)
Run Code Online (Sandbox Code Playgroud)

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

非常感谢提前!

Tak*_*suo 5

我认为最佳实施可能会根据您的目标而改变,我的答案可能无法满足您的需求.

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

正如蒂姆在评论中所说,我更喜欢使用语言代码作为实体密钥.这是一个示例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()
Run Code Online (Sandbox Code Playgroud)

当新创建标签时,我将创建两个实体; 一个Slug具有独特urlsafe字符串(塞),该标记为关键,以及一个实体Tag与语言代码的主要实体,这个Slug实体是其父母.

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

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