14

L10N の Django への実装を理解しようとしています。これが私の設定です

LANGUAGE_CODE = 'fr-FR'
USE_L10N = True

私が試したら

>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M')
      .strftime('%c')

ENロケールであること'Wed May 30 15:30:00 2012'がわかります。ただし、ドキュメントは次のように言っています。

[...] 異なる言語で同じコンテンツにアクセスする 2 人のユーザーは、現在のロケールの形式に応じて、異なる方法で書式設定された日付フィールドと数値フィールドを表示します [...]

彼らはそれぞれのブラウザに設定されたロケールについて話しているのですか?
そうでない場合、たとえばデフォルトでフランス語に設定するにはどうすればよいですか?

4

1 に答える 1

25

Django のローカリゼーションは、Django のテンプレートとフォームのコンテキストで機能し、Python の内部日時表現までチェーンをたどることはできません。

When using Django's formatting system, dates and numbers on templates 
will be displayed using the format specified for the current locale. 
...Django will also use localized formats when parsing data in forms. 

そのUSE_L10N = Trueため、その地域を持つユーザーがフォームにFR入力すると、それは英語の 10 進法である10,45と解釈されます。10.45同様に、 のようなテンプレート タグの出力は{{ value|date:"SHORT_DATE_FORMAT" }}、ユーザーのロケールによって異なります。

ただし、Python 内部strftime('%c')は Django の設定にアクセスせず、代わりに Django がインストールされているマシンに設定されているロケールを参照します。Python が指すロケール設定を取得して変更するには、次のようにします。

>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M').strftime('%c')
'Wed May 30 15:30:00 2012'
>>> import locale
>>> locale.getlocale()
(None, None)
>>> locale.getdefaultlocale()
('en_US', 'UTF-8')
>>> locale.setlocale(locale.LC_ALL, "fr_FR.UTF-8")
'fr_FR.UTF-8'
>>> datetime.datetime.strptime('2012-05-30 15:30', '%Y-%m-%d %H:%M').strftime('%c')
'Mer 30 mai 15:30:00 2012'

または、環境変数を設定します$LANG

于 2012-05-29T15:11:52.403 に答える