国際化とローカリゼーションを行う Django の方法を学んでいます。そうするために、私はこのチュートリアルに従っています:
私が遭遇した問題は、チュートリアルが提案するテストが機能していないことです。さらに、それがどのように機能したのかわかりません。
関連するテンプレートビットは次のとおりです
<div class="row">
<div class="col-md-4">
<h2 id="local-date">{{today}}</h2>
<p>This is the time using your local information. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
<div class="col-md-4">
<h2 id="non-local-date">{{today|unlocalize}}</h2>
<p>This is the default time format. </p>
<p><a class="btn btn-default" href="#" role="button">View details »</a></p>
</div>
ビューは次のとおりです。
from django.shortcuts import render
import datetime
def home(request):
today = datetime.date.today()
return render(request, "taskbuster/index.html", {'today': today})
テストは以下
def test_localization(self):
today = date.today()
for lang in ['en', 'ca']:
activate(lang)
self.browser.get(self.get_full_url("home"))
local_date = self.browser.find_element_by_id("local-date")
non_local_date = self.browser.find_element_by_id("non-local-date")
self.assertEqual(formats.date_format(today, use_l10n=True),
local_date.text)
self.assertEqual(today.strftime('%Y-%m-%d'), non_local_date.text)
私が見ている失敗は
self.assertEqual(today.strftime('%B %d, %Y'), non_local_date.text)
AssertionError: 'June 22, 2019' != 'jun. 22, 2019'
- June 22, 2019
? ^ ^
+ jun. 22, 2019
? ^ ^
ご覧のとおり、カタロニア語のバージョンは、デフォルトのローカライズされていないバージョンと同じではありません。ここで明らかな何かが欠けていますか?この失敗を引き起こす Django でのこれらのビットの動作方法に何か変更がありましたか? チュートリアルの作成者は、チュートリアルのこの時点でこのテストに合格する必要があると主張しています。
PS 日付を表示するためのより論理的な日 - >月 - >年の形式がある他のより興味深い言語を追加すると、その失敗も観察できます。次の場合を考えてみましょうru
。
AssertionError: '22 June, 2019' != 'Июнь 22, 2019'
- 22 June, 2019
+ Июнь 22, 2019