Skip to content

Commit 25f4798

Browse files
int-y1kiritofeng
authored andcommitted
Improve i18n for formatting memory size
1 parent 7d8b78d commit 25f4798

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

judge/jinja2/filesize.py

+16-10
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
from django.template.defaultfilters import floatformat
12
from django.utils.html import avoid_wrapping
3+
from django.utils.translation import gettext_lazy as _
24

35
from . import registry
46

57

6-
def _format_size(bytes, callback):
8+
def _format_size(bytes, formats, decimals):
79
bytes = float(bytes)
810

911
KB = 1 << 10
@@ -13,24 +15,28 @@ def _format_size(bytes, callback):
1315
PB = 1 << 50
1416

1517
if bytes < KB:
16-
return callback('', bytes)
18+
return formats[0] % floatformat(bytes, decimals[0])
1719
elif bytes < MB:
18-
return callback('K', bytes / KB)
20+
return formats[1] % floatformat(bytes / KB, decimals[1])
1921
elif bytes < GB:
20-
return callback('M', bytes / MB)
22+
return formats[2] % floatformat(bytes / MB, decimals[2])
2123
elif bytes < TB:
22-
return callback('G', bytes / GB)
24+
return formats[3] % floatformat(bytes / GB, decimals[3])
2325
elif bytes < PB:
24-
return callback('T', bytes / TB)
26+
return formats[4] % floatformat(bytes / TB, decimals[4])
2527
else:
26-
return callback('P', bytes / PB)
28+
return formats[5] % floatformat(bytes / PB, decimals[5])
2729

2830

2931
@registry.filter
30-
def kbdetailformat(bytes):
31-
return avoid_wrapping(_format_size(bytes * 1024, lambda x, y: ['%d %sB', '%.2f %sB'][bool(x)] % (y, x)))
32+
def kbdetailformat(kb):
33+
formats = [_('%s B'), _('%s KB'), _('%s MB'), _('%s GB'), _('%s TB'), _('%s PB')]
34+
decimals = [0, 2, 2, 2, 2, 2]
35+
return avoid_wrapping(_format_size(kb * 1024, formats, decimals))
3236

3337

3438
@registry.filter
3539
def kbsimpleformat(kb):
36-
return _format_size(kb * 1024, lambda x, y: '%.0f%s' % (y, x or 'B'))
40+
formats = [_('%sB'), _('%sK'), _('%sM'), _('%sG'), _('%sT'), _('%sP')]
41+
decimals = [0, 0, 0, 0, 0, 0]
42+
return _format_size(kb * 1024, formats, decimals)

templates/submission/row.html

+1-2
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,6 @@
8787
{% else %}
8888
<div class="time">---</div>
8989
{% endif %}
90-
{# No one actually likes IEC prefixes, Jinja2. #}
91-
<div class="memory">{{ (submission.memory_bytes|filesizeformat(True)).replace('i', '') }}</div>
90+
<div class="memory">{{ submission.memory|kbdetailformat }}</div>
9291
{% endif %}
9392
</div>

0 commit comments

Comments
 (0)