2

特定の種類のイベントを管理するために、単一のDjangoプロジェクトをデプロイしています。1つのデータベースで2つの展開があり、サイトはスロバキア語です。これらは、「AkadémiaTrojstenu」および「KlubTrojstenu」と呼ばれるイベント用です。簡単なのは、sitesフレームワークを使用し、それに応じて各サイトの表示名を設定し、イベントの名前を参照する必要があるテンプレートでそれを使用できることです。

これは、スロバキア語が文法的な格を使用していることに気付くまでは問題ありません。つまり、場所によっては、たとえば「ProgramAkadémieTrojstenu」/「ProgramKlubuTrojstenu」または「StaréAkadémie」/「StaréKluby」を書く必要があります。

たとえば、次のテンプレートコードについて考えてみます。

<link rel="alternate" type="application/atom+xml" title="Novinky pre {{ site.name }}" href="{% url "news_feed" %}" />

site.name「AkadémiaTrojstenu」が含まれていますが、この場合、「NovinkypreAkadémiuTrojstenu」、つまり4番目の文法的な場合の変数の内容を出力するために必要です。

現時点で私が見ている唯一の方法は、テンプレート内のそのようなすべての出現を特殊なケースに分け、現在のサイトのドメインを調べて、名前の正しい文法上の大文字小文字を出力することです。この解決策は明らかに非常に抗乾燥性で恐ろしいものであり、小さな子供を食べます。

誰かがより良い提案がありますか?ある種の標準的な解決策はありますか?文法の格を使った言語はたくさんあると思いますが、確かに私の前でこの問題に遭遇した人がいます。

4

2 に答える 2

2

翻訳文字列で変数を使用するだけです:

output = _('Today is %(month)s %(day)s.') % {'month': m, 'day': d}

これはテンプレートでも機能します:

{% blocktrans with site.name as site_name %}Novinky pre {{ site_name }}.{% endblocktrans %}

最後に、翻訳コンテキストを使用すると便利な場合があります。

そこでは、「小さな子供を食べる」必要はありません(本当にお腹が空いていない限り)。

于 2012-10-25T11:11:47.327 に答える
1

@jpicが言うように、コンテキストマーカーを使用してそれを行うことができます。実際には、テンプレートにサイト名が埋め込まれている方が簡単です。これは、djangoのによって取得されるためmakemessagesです。

<link rel="alternate" type="application/atom+xml" 
      title="Novinky pre {% trans 'Akadémia Trojstenu' context '4th' %}" 
      href="{% url "news_feed" %}" />

複数のサイトではおそらく簡単ではないため、代わりに追加の.poファイルを作成し、すべてのサイト名とその翻訳およびコンテキスト名を手動で入力することができます。

翻訳ファイルと一部のデータベース値を手動で同期しているため、これはエラーが発生しやすいものですが、少なくともすべてが1つの場所にあり、テンプレートの外部にあります。

msgctxt "1st"
msgid "Akadémia Trojstenu"
msgstr "Akadémia Trojstenu"

msgctxt "2nd"
msgid "Akadémia Trojstenu"
msgstr "????? Trojstenu"

msgctxt "3rd"
msgid "Akadémia Trojstenu"
msgstr "Akadémie Trojstenu"

msgctxt "4th"
msgid "Akadémia Trojstenu"
msgstr "Akadémiu Trojstenu"

...

msgctxt "3rd"
msgid "Klub Trojstenu"
msgstr "Klubu Trojstenu"

...

余分な.poを別のディレクトリに貼り付け、そのディレクトリをLOCALE_PATHS設定に登録します。これを行ったことを忘れないでください。誰かが新しいサイトを追加したり、サイトの名前を変更したりして、なぜ翻訳が壊れているのか疑問に思い始めたときに、どこを見ればよいかがわかります。

これが完了すると、次のようなサイト名を使用できるようになります。

<link rel="alternate" type="application/atom+xml" 
      title="Novinky pre {% trans site.name context '4th' %}" 
      href="{% url "news_feed" %}" />

もちろん、問題がサイト名だけに限定されている場合は、代わりに、他のケースを保持するためにサイトモデルにさらにいくつかのフィールドを貼り付けることができます(サブクラス化)。サイトオブジェクトは実際には変更されないので、このような非正規化によって問題が発生することはないと思います。

于 2012-10-28T04:00:23.130 に答える