0

Webサイトの翻訳版を実装しようとしたときに、次の問題が発生しました。

次のように定義されたモデルがあるとします。

class Model(models.model)
    name=models.CharField(max_length=10)
    ...

いくつかのデータ(後でWebページに表示される)を作成するために、次のような行を含む特別なビューを使用します。

Model.objects.create(name = "testName",...)

次のコードで翻訳を実装しようとしました。

Model.objects.create(name = _("testName"),...)

ugettextとしてインポートすると_、「testName」の変換された値がデータベースに配置されます。ugettext_lazyとしてインポートすると_InterfaceError(より正確にはError binding parameter X - probably unsupported type

そのような初期化が可能かどうか、またはいくつかの回避策を見つける必要があるかどうか疑問に思いました。

前もって感謝します。

4

3 に答える 3

2

英語版をデータベースに保存し、出力中にugettext/_lazyのみを呼び出します。これは明らかに、これらの文字列の翻訳が存在する場合にのみ機能します。存在しない場合は、どちらの方法でも英語版が表示されます…</ p>

于 2012-04-22T14:33:35.423 に答える
1

ugettextugettext_lazy静的I18N変換に使用されます。これらは、コード内の翻訳可能なテキストに適用され、テキストを.poファイルに収集し、最後に.moファイルに収集します。
通常、動的テキストの場合、Django ORMを介してDBに翻訳スキーマを作成し、DjangoAdminなどのビューで翻訳を編集する必要があります。次に、ビューで、要求された言語に従って正しいバージョンの翻訳を表示します。
あなたはそれをピクルスにすることによってDBに「保存」することができugettext_lazy __proxy__、そしてそれをアンピックして適用unicodeして翻訳を得ることができます。ただし、IMO、コードからDBにリテラルを格納することは無意味です。

Webインターフェイスを介して管理されるpoベースの翻訳ソリューションが必要な場合は、https://github.com/mbi/django-rosettaを参照してください。

于 2012-04-22T13:39:47.757 に答える
0

誰かがそれを必要とする場合に備えてそれを追加するだけです。

これは、Florianソリューションを実装し、_毎回関数を追加/削除する必要をなくすために私が見つけた最良の方法です。文字列を含むファイルにダミー関数を定義します。

def _(input):
     return input

このように、文字列は元の言語で保存されますが、makemessagesそれでも翻訳が必要な文字列のように処理されるため、.poファイルに入れられます。{% trans %}そして、htmlでブロックを使用する必要があります。

于 2012-08-12T16:53:15.920 に答える