ジャンゴ·TransmetaのDjangoのモデルに翻訳可能なコンテンツのためのDjangoアプリです 各言語は保存され、データベース·レベルで異なる列に自動的に管理されている。
の使い方Transmetaのの
翻訳可能なモデルを作成する
このモデルを見てください:
クラス帳(models.Model):
 タイトル= models.CharField(max_lengthを= 200)
 説明= models.TextField()
 ボディ= models.TextField(デフォルト= '')
 価格= models.FloatField()
あなたが記述と体の翻訳可能にしたいとします。 Transmetaのを使用した後に得られるモデルは、次のとおりです。
Transmetaのインポートトランスメタから
クラス帳(models.Model):
  _ metaclass__ =トランスメタ
 タイトル= models.CharField(max_lengthを= 200)
 説明= models.TextField()
 ボディ= models.TextField(デフォルト= '')
 価格= models.FloatField()
 クラスのメタ:
  =変換する( '説明'、 '体'を)
あなたのsettings.pyにデフォルトと使用可能な言語が設定されていることを確認します。
LANGUAGE_CODEの=の「ESを」
Djangoのドキュメントが言うように、関数オブジェクトのugettext S#ダミー:オブジェクトのugettextは、ラムダ秒=
LANGUAGES =(
 (「ES」、オブジェクトのugettext)( 'スペイン語')、
 ( 'en'と、オブジェクトのugettext( '英語'))、
)
これは./manage.py sqlallコマンドで生成されたSQLです。
ベギン;
(TABLE "fooapp_book」を作成
  "ID"シリアルNOT NULL PRIMARY KEY、
  "タイトル" VARCHAR(200)NOT NULLと、
  "description_en」テキスト、
  "description_es」テキストNOT NULLを、
  "body_es」テキストNOT NULLを、
  "body_en」テキストNOT NULLを、
  "価格"倍精度、NOT NULL
)
。
COMMIT;
注:*トランスメタは、言語ごとに1列が作成されます。トランスメタはあなたのために、この問題を解決し、将来的に新しい言語を必要と心配しないでください。 * 1フィールドがFalse = nullで、デフォルト値がない場合は、Transmetaのデフォルト言語のために、一つだけNOT NULLフィールドを作成します。他の第2言語のためのフィールドがNULL値可能になります。他のフィールドはオプションになりますしながら、また、主要な言語は(空白で= TRUE)、管理アプリで必要とされます。コンテンツ変換のための通常のアプローチは、最初に持っている、後の主言語でコンテンツを追加しているため、翻訳者は他の言語に翻訳するように行われました。 *あなたがデータベーススキーマを作成するために./manage.py syncdbを使用することができます。
Pythonシェルで遊ぶ
Transmetaのは、モデルで定義されているすべての翻訳可能なフィールドごとに使用可能な言語のための一つのフィールドを作成します。ようにdescription_es、description_en、および:フィールド名は、言語のショートコード、例えば接尾辞されている。加えて、アクティブな言語でのフィールド値を取得するためのfield_nameゲッターを作成します。
のが一番、これがどのように機能するかを理解するためにはPythonシェルでビットを再生してみましょう:
>>> 8ここでfooapp.modelsから帳をインポート
>>> 8ここでB = Book.objects.create(description_es = u'mi descripcion '、description_en = u'my記述')
>>> 8ここでb.description
u'my説明 '
>>> 8ここでdjango.utils.translation輸入アクティブから
>>> 8ここで( 'ESを」)を活性化
>>> 8ここでb.description
u'mi descripcion」
>>> 8ここでb.description_en
u'my説明 '
新しい言語を追加する
あなたは既存のものに新しい言語を追加する必要がある場合は、あなたのsettings.pyを変更して再度DBを同期するトランスメタに依頼する必要があります。たとえば、私たちのプロジェクトにフランス語を追加するには、settings.pyでの言語にそれを追加する必要があります。
LANGUAGES =(
 (「ES」、オブジェクトのugettext)( 'スペイン語')、
 ( 'en'と、オブジェクトのugettext( '英語'))、
 (「FR」、オブジェクトのugettext( 'フランス語'))、
)
そして、特別なsync_transmeta_dbのコマンドを実行します。
  ./ manage.py sync_transmeta_db
「fooapp.book」モデルから「説明」フィールドにありません言語:FR
「fooapp.book「スキーマを同期するためのSQL:
&NBSPは、TABLE "fooapp_bookを「ALTER COLUMN」description_fr」テキストを追加
(Y / N)[N]:あなたは、以前のSQLを実行しますかY
SQLの実行...完了
「fooapp.book」モデルから「身体」フィールドにありません言語:FR
「fooapp.book「スキーマを同期するためのSQL:
&NBSPは、TABLE "fooapp_bookを「ALTER COLUMN」body_fr」テキストを追加
(Y / N)[N]:あなたは、以前のSQLを実行しますかY
SQLの実行...完了
そして、やった!
新しい翻訳可能なフィールドの追加
今(本の価格が通貨に依存するため、たとえば)(作成された多くの本との)このウェブアプリを使って、数ヶ月後、あなたが本の価格が翻訳可能にする必要があり、ことを想像してみてください。
これを実現するために、最初のモデルの翻訳可能なフィールドリストに価格を追加します。
クラス帳(models.Model):
  ...
 価格= models.FloatField()
 クラスのメタ:
  =( '説明'、 '体'、 '価格'、)に変換
今残っていることはすべて、DBスキーマを更新するためにsync_transmeta_dbコマンドを呼び出している。
  ./ manage.py sync_transmeta_db
利用可能な言語:
  1。スペイン語
とをタップ2。英語
現在翻訳されていないデータを配置する言語を選択してください。
現在のデータの言語は何ですか? (1-2):1
「fooapp.book」モデルから「価格」フィールドにありません言語:ES、EN
「fooapp.book「スキーマを同期するためのSQL:
&NBSPは、倍精度TABLE "fooapp_bookは「列」price_es」を追加、変更
  UPDATE」fooapp_book "SET" price_es "="価格 "
&NBSPは、TABLE "fooapp_book」を変更しないNULLをセット列" price_es」をALTER
&NBSPは、TABLE "fooapp_bookは"列を追加するALTER「price_en "倍精度
&NBSPは、TABLE "fooapp_bookの「DROP COLUMN「価格」ALTER
(Y / N)[N]:あなたは、以前のSQLを実行しますかY
SQLの実行...完了
地獄このコマンドは何をしますか?
sync_transmeta_dbコマンドだけでなく、それは言語の一つに、旧価格フィールドからデータをコピー...新しい翻訳可能なフィールドの新しいデータベース列を作成し、コマンドは実際のデータの宛先言語フィールドをお願い理由です。
管理の統合
トランスメタは、透過的に管理インタフェースにすべての翻訳可能なフィールドが表示されます。モデルは実際に多くの分野(各言語の1)を持っているので、これは簡単です。
adminにフォームフィールドを変更すると、非常に一般的な課題であり、Transmetaのは、一度にすべての言語のフィールドにこれらの変更を適用するcanonical_fieldnameユーティリティ機能が含まれています。これは、例を挙げて説明しましだ。
Transmetaのインポートcanonical_fieldnameから
クラスBookAdmin(admin.ModelAdmin):
 デフformfield_for_dbfield(自己、db_field、** kwargsから):
 フィールド=スーパー(BookAdmin、自己).formfield_for_dbfield(db_field、** kwargsから)
  db_fieldname = canonical_fieldname(db_field)
 もしdb_fieldname == '説明':
 #これは、すべてのDESCRIPTION_LISTは*フィールドに適用されます
  field.widget = MyCustomWidget()
 のelif field.name == 'body_es':
 #これはbody_esフィールドにのみ適用されます
  field.widget = MyCustomWidget()
 戻りフィールドます。
の特長の
- 翻訳可能なフィールドを持つ自動スキーマ作成します。
- 翻訳可能フィールドは、Djangoの管理インタフェースに統合されます。
- コマンドます。
新しい翻訳可能なフィールドと新しい言語を追加するために、データベーススキーマを同期する
のこのリリースのの新機能は次のとおりです。
- を追加しましたget_mandatory_fieldname機能します。
のバージョン0.6.9の新機能のは何ですかます:
- アンダースコアとフィールド名のための方法のget_field_languageでサポートします。
のバージョン0.6.8の新機能のは何ですかます:
- コマンドsync_transmeta_dbに小さなバグを修正しました。(UnboundLocalError:代入する前に参照されたローカル変数 'F')
のバージョン0.6.7の新機能のは何ですかます:
- Transmetaのラベルの表現(verbose_nameの)を変更します。
のバージョン0.6.6の新機能のは何ですかます:
- の改善や使い勝手ます。
- 修正いくつかのバグします。
- ドキュメント
コマンドsync_transmeta_dbの
のバージョン0.6.5の新機能のは何ですかます:
- の改善や使い勝手ます。
- は、最後のジャンゴ(コマンドsync_transmeta_db) で動作
- は、MySQL(コマンドsync_transmeta_db) で動作
コマンドsync_transmeta_dbの
のバージョン0.6.4の新機能のは何ですかます:
- モデルと、継承が修正エラーます。
のバージョン0.6.3の新機能のは何ですかます:
- TRANSMETA_LANGUAGES設定を使用できるようにします。
- sync_transmeta_dbする2つのオプションが追加されました:-y(すべてにイエスと仮定)と-d(デフォルトの言語コード)
のバージョン0.6.2の新機能のは何ですかます:
- は、デフォルトのロケールがES-ESとしてまたはEN-USスペルバリアントを持っているときに動作します。
の要件の
- ジャンゴます。
- のPythonます。
コメントが見つかりません