1

Django 1.3/Google App Engine を使用してプログラムを作成しましたが、サポートの欠如と奇妙な動作を発見しました。

Prapration - ポーランド語の翻訳 (重要な場合があります)

まず第一に、ungettext はポーランド語を直接サポートしていませんが、django 1.3 は PO ファイルタグの Plural-Forms をサポートしています (英語ではない多くの言語には複数の複数形があります) - 私はポーランド語でそうしています - おそらくロシア語でも同じでしょう:

複数形: nplurals=3; multiple=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);

ポーランド語には英語よりも複数形が多いため、 ungettext が役に立たない前に述べたように、いくつかの例を挙げました。これを使用して msgId を抽出しました。

# should be 0 kóz
ungettext(u'%s kóz', u'%s kozy', 0) % 0
# should be 1 koza
ungettext(u'%s kóz', u'%s kozy', 1) % 1
# should be 2 kozy
ungettext(u'%s kóz', u'%s kozy', 2) % 2
# should be 5 kóz
ungettext(u'%s kóz', u'%s kozy', 5) % 5

私はmakemessages.pyを使用し、これをトリックで翻訳して、英語のように2つではなく3つの複数形を取得しました(ポーランド語には2〜3つのフォームが必要です):

msgid "%s kóz"
msgid_plural "%s kozy"
msgstr[0] "%s 1 koza"
msgstr[1] "%s 2 kozy"
msgstr[2] "%s 5 kóz"

Django の奇妙な動作 (主要な質問)

今私がやっているが動作を理解していないより多くのトリック:

私はDJANGOのすべての変数を正しく設定しました(そう願っています)と:

LANGUAGE_CODE = 'pl' - すべての翻訳は機能しますが、ポーランド語の翻訳は機能しません 3 以外の 2 つの形式があります。 kozy" msgstr[2] "%s 5 kóz"

LANGUAGE_CODE = 'en' - すべての翻訳作品 (pl、en-us、en-gb、de-de、...)

LANGUAGE_CODE = 'xx' - すべての翻訳作品 (pl、en-us、en-gb、de-de、...)

LANGUAGE_CODE = 'en-us' - すべての翻訳 (pl、en-us、en-gb、de-de、...) は機能しますが、en-us の翻訳は機能しません

Djangoで動作させるために言語をINVALID 'xx'またはその他の既存の翻訳に設定する必要があるのはなぜですか? それを正しく行う方法を教えていただけますか?

4

1 に答える 1

1

それは些細な間違いでした:

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'pl'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# Valid languages
LANGUAGES = (
  (u'pl', _('Polski')),
  (u'en-us', _('angielski - Stany Zjednoczone')),
  (u'en-gb', _('angielski - Wielka Brytania')),
  (u'de-de', _('niemiecki - Niemcy')),
)

LOCALE_PATHS = (
  os.path.join(__ROOT_PATH, 'conf', 'locale'),
)

パスは最初の使用後に定義されたため、django はデフォルトの翻訳を構築できません。ここでは非常に簡単な修正を行います。

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'pl'

LOCALE_PATHS = (
  os.path.join(__ROOT_PATH, 'conf', 'locale'),
)

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as not
# to load the internationalization machinery.
USE_I18N = True

# Valid languages
LANGUAGES = (
  (u'pl', _('Polski')),
  (u'en-us', _('angielski - Stany Zjednoczone')),
  (u'en-gb', _('angielski - Wielka Brytania')),
  (u'de-de', _('niemiecki - Niemcy')),
)

LANGUAGE_CODE = 'xx' は決して使用されない無効な翻訳コンテナを作成しており、pl のような他の言語で有効な設定を最初に使用すると、このような素晴らしい副作用が得られます :)

于 2013-02-28T15:09:44.250 に答える