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表示名の決定に使用します。

ティムがコメントで言ったように、私はエンティティキーとして言語コードを使用することを好みます。これは、すべてがurlsafeスラッグを必要とするTagと仮定した実装例です。Tag

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()

タグを新しく作成するときに、2つのエンティティを作成します。Slugそのタグの一意のurlsafe文字列(スラッグ)をキーとして持つエンティティTag、および言語コードをキーとして、このSlugエンティティをその親として持つエンティティ。

この例では、available_translationsという名前のプロパティがあります。これにより、ユーザーの言語の選択とネゴシエートでき、指定した言語の翻訳を含むSlugsを返すクエリを実行することもできます(たとえば、日本語の翻訳を含むSlugsを一覧表示します)。

WTForm検証の場合、投稿データを検証する方法を教えてください。詳細なニーズを共有すれば、より良い答えが得られると思います。

于 2013-02-26T08:37:04.883 に答える