1

サービスをさまざまなカテゴリにグループ化するサービス カタログをモデル化しています。各カテゴリは、ここでは関係のない他のフィールドの説明付きのモデルです。

class Category(models.Model):
    description = models.TextField()
    ...

アイデアは、プラットフォームが成長するにつれて、追加のサービス カテゴリ (またはサブ カテゴリ) が追加されるというものです。いくつかの言語での説明が必要です。

そのためにさまざまなアプローチを検討しましたが、どちらがよりクリーンかを判断する必要があります。

最初のアプローチ。説明と言語を含む db モデルとしてのモデルの説明

class CategoryDescription(models.Model):        
    description = models.TextField()
    lang = models.CharField(max_length=2)
    describes = models.ForeingKey(Category)

class Category(models.Model):        
    ...

2 番目のアプローチ。説明フィールドを削除し、カテゴリのタイトルをコンテキスト マーカーとして使用します。何かのようなもの

class Category(models.Model):        
    one_word_name = models.CharField(max_length=20)
    ...

そして、テンプレートで。

{% trans "category_description" context category.one_word_name %}

ただし、ここでの私の懸念は、翻訳としてマークされる ID を自動的に生成する方法はありますか? どうすればいいですか?

4

1 に答える 1

1

モデルを翻訳するには、非常に便利なパッケージがあります。チェックすることをお勧めします。

このパッケージを使用すると、モデルに翻訳用のマークを付けることができます。チュートリアルに従う必要があります。非常に簡単です。

とにかく、最も重要な手順は次のとおりです。

  1. 以下を使用してパッケージをインストールします。pip install django-modeltranslation
  2. modeltranslationあなたINSTALLED_APPSのあなたに追加settings.py
  3. settings.py で設定USE_I18N = Trueします。
  4. settings.py で LANGUAGES を設定します。
  5. アプリ ディレクトリに translation.py を作成し、翻訳するTranslationOptionsすべてのモデルを登録します。
  6. を使用してデータベースを同期しますpython manage.py syncdb

あなたのsettings.pyのLANGUAGES:

LANGUAGES = (
        ('de', gettext('German')),
        ('en', gettext('English')),
    )

translation.py例:

# -*- coding: utf-8 -*-
# Model Translation
from modeltranslation.translator import translator, TranslationOptions
from models import *


class MyModelTranslationOptions(TranslationOptions):
    fields = ('name', 'description')   # Select here the fields you want to translate  
translator.register(MyModel, MyModelTranslationOptions)

# You can add as many models as you want to translate here

すべてを定義してデータベースを同期すると、翻訳対象として選択したモデルのフィールドが翻訳されます。

というフィールドがあり、descriptionそれを翻訳としてマークすると、英語とドイツ語を使用している場合、django モデルの翻訳によってフィールドが作成され、翻訳description_endescription_de追加できる場所が作成されます。

于 2014-12-11T09:37:26.827 に答える