2011-12-06 9 views
0

ここに私の遅延を表示するために使用する関数があります。遅延は正(遅延がある場合)または負であり得る。この関数は引数としてtimedeltaをとります。Django複数の日と時間の変換が動作しない

def delta_string(delta): 
     days = delta.days 
     hours = delta.seconds/3600 
     if days < 0 and hours > 0: 
      days = days + 1 
      hours = 24 - hours 
     days_string = ungettext("%(day)s day","%(day)s days", abs(days)) % {'day': days} 
     hours_string = ungettext("%(hour)s hour","%(hour)s hours", hours) % {'hour': hours} 
     return "%s, %s" % (days_string, hours_string) 

もちろん、すべての文字列はpoファイル(およびコンパイル済み)に翻訳されます。しかし、結果は奇妙です - 時には翻訳が正しい場合もあれば、正しくない場合もあります。例:

35日9時間; -4dni、1godzina; 0日、11時間; 19日、13 時間; 34日、9時間; -1dzień、6時間; -1dzień、2 godzin; -5 日、4ゴジイン; 3日、19時間

など。上記の出力はすべて同じページに表示されます。何が間違っているのでしょうか?私もungettext_lazyを試してみました.U文字列を試しました。結果はありません。

答えて

2

Djangoの組み込みのtimesince template filter(テンプレート内でこの機能が必要な場合)またはtimesinceの機能をdjango.utils.timesinceに設定してください。これらはあなたの翻訳を処理します。

+0

ニース、ありがとう!それは両方向ではうまくいきません(つまり、最初の引数が2番目の引数より後の日付である場合は、否定結果を返します)。 – alekwisnia

+1

他の方向については、 'timeuntil'フィルタを使うことができます[https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#timeuntil] –

+0

はい、私は知っていますが、最初の日付が2番目の日付より遅いかどうかを確認する必要があります。 – alekwisnia

関連する問題