From 85e6a1c634fed55c43090e37b802c721d9e7eaaa Mon Sep 17 00:00:00 2001 From: Tzu-ping Chung Date: Wed, 6 Dec 2017 01:31:08 +0800 Subject: [PATCH] Fixed #28877 -- Made ordinal template filter results more localizable. Marked the whole pattern (e.g. "{value}th") as translatable, instead of just this suffix, so that languages not using suffixes for ordinals can use this tag. --- .../humanize/locale/fr/LC_MESSAGES/django.mo | Bin 4174 -> 4609 bytes .../humanize/locale/fr/LC_MESSAGES/django.po | 52 ++++++++++++++---- .../contrib/humanize/templatetags/humanize.py | 32 +++++++++-- 3 files changed, 70 insertions(+), 14 deletions(-) diff --git a/django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo b/django/contrib/humanize/locale/fr/LC_MESSAGES/django.mo index 68073222945b8cea9ebd01621800ed60d43505d1..fdafcad70898e31e5be58d648ab433d0f35923ac 100644 GIT binary patch literal 4609 zcmc(hON$9Zv-inb$4NV9?P;Uv+TxztfC+UR}*7AG&40by_u=r?W*1f z8xoIdVk8D*6c60ggYjab7*7x%iAQ6CL`gK>G=^Y|7Y_cv>6(7b)W)Ngsrk+K?|*+? zU0-+AT;0_7HbWan--7Uc|c%U2q8To8Y711(5Rm3~mS4-4f{oAnDH-Dv+*o&hQ(M^897E_10)yPlEWc z7QQI|0!Y_?&&1!F_z#dn-+UWmJHZJMLuNG)x5}D^^WcMs7r=+XGe-Xeq$&E;@N@7E z#9tbI2i}kPiixiquE|BdjfUF{^M;d#M+{#AX^8`2qo&o8+FF*{1{Q^?G{{#oX%^Ra}9018bZ+H&u zNBk8?b^G1$8i+@V{SD&7Zr}?;U>oj=d|SXA;_cu~;4nzX3m`7ZrcC^-;md|i!xh8V z4c|5V(C{C^hXb$Lpw^Lvm%?FKXFZ$i+^nB4fK#gkDY1{ClWCD6O zsBJ~x-2N5KJN+!8--lkH0L?+Cdw&3(?)e^csx>_?RLdRc)G!5X6FNQ5^bFAZ{17_5 zSF~19%cFDpfrh1^J;zi>)<3x5HbXI#FV*--ui5l``JY-#o(Vat`? zDZyM!nhdqzZr#T#RPjTpht$RMk*eBq?5PEQ3)8n~GseeUjHcqtYInv+?PN5b_^i~W zJI45!D|y2YgYJZ+nRLbwpOMNIx#AOc?*Koa6Xf+4gR}m+{^5g8(RJ3!r>bxKV zg~hwftFx}G`?(Wh&JVP6RMowzb0DlMXT~q{-0@>G&cQ&q8eZoKSBo+qDVFv+r4gq% z#*3x$=;*HEc(Dkhb3!b5lr!xs?sH1}cxkLWTHIAc%N=o*c4h)ss-~;`pv<3krSud( zB0Lm~@5g8mKHhAHc~92-DV!tgp<5TujBs0JJ{<^IY4E{@)^p`TVR3OWuPLEd6HEDu z-zr46)IrmnU8n_xp*UBW*Mi*9!$%J#Gf~PHa|eB?g~SM#=WweUuVP`Y>3VX4R~l}h zgr0nUX4)A~e01TO2%JN*;^Vogm-+ZfPv?#|=}B~^{h+1FT+X#aH90cDqo0$5l27r{ z&_pi1*U_trJ=Mh%liFw#Ri$NKz4VcFV~ypky>8iAvDaoy=2F>BJr*-o%hF4K3gQJh zYwlft$sDU$vuz0`drI#XLFP^vjGm6E;+FqHv z%AL|uMq8<|(^?8mTWk6cl!;Th;%dgvQsV8{;CTjIowBrplMHrqrxC zE?vePt7&smx0E*#v(`?{GS*%(E?DA=CB>pWSGCtg<~8{;cX=p<*?>DrYU?t4Fsov{ zNIToH#h2u~cs|-hg(a&wqLQ>7Z+G6cOw64@Flx*eneihD5iTwpa90pzS{~Xc-745Wv?vCKljeGe27ecs}9^T zN}8xA9&87cUqmotQtV8uTqULLI?d`5T?o6tm^=-dy zup61%`cV@eM}Bsa%WaP3EXJw-2%2?bO@&zt9z#9AB~<@i=POK6UvWl5rE#a7GdQh* zPq}HwMN~boMXBK&aW4*{`X`+aFi!oA^CxOt^VZUloI;J8LZ-C)7{kZdhM%z$t&;qA zV6w6_@Eqz4Z=jCgk@E?1>^6^Ke1XhiZ&3?;LH++b25|{>1ixJWs_QRjureD$_H5xW z`PT#uH0TIoNVY7ETCfi_@lodq``sn)$RQ>PnBf@mU?=Cvh4Mel^t{jXGUqlZ$ad4-A(NbUkkY&BA zo^RRFDa+<8cd?KSUJf5jq|%9WS0tV8Np;0i>B4ewt}t71J~WW=NAj5wuO~7*@hntd xHrSiZkN11MNnyU1AGRx*Q9tMT89!%v-~Q{*dgHm`N~P8bH*D>H3SX;Q{sODNgKPi* diff --git a/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po b/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po index 142c6adbfa..74b863b4ce 100644 --- a/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po +++ b/django/contrib/humanize/locale/fr/LC_MESSAGES/django.po @@ -10,8 +10,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2017-09-19 16:40+0000\n" -"Last-Translator: Jannis Leidel \n" +"PO-Revision-Date: 2017-12-06 01:44+0800\n" +"Last-Translator: Tzu-ping Chung \n" "Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,17 +22,49 @@ msgstr "" msgid "Humanize" msgstr "Humanisation" -msgid "th" -msgstr "e" +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}e" -msgid "st" -msgstr "er" +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}e" -msgid "nd" -msgstr "e" +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}er" -msgid "rd" -msgstr "e" +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}e" + +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}e" + +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}e" + +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}e" + +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}e" + +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}e" + +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}e" + +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{}e" #, python-format msgid "%(value).1f million" diff --git a/django/contrib/humanize/templatetags/humanize.py b/django/contrib/humanize/templatetags/humanize.py index fa644fd3a1..7b99d78f1e 100644 --- a/django/contrib/humanize/templatetags/humanize.py +++ b/django/contrib/humanize/templatetags/humanize.py @@ -23,11 +23,35 @@ def ordinal(value): value = int(value) except (TypeError, ValueError): return value - suffixes = (_('th'), _('st'), _('nd'), _('rd'), _('th'), _('th'), _('th'), _('th'), _('th'), _('th')) - if value % 100 in (11, 12, 13): # special case - return mark_safe("%d%s" % (value, suffixes[0])) + if value % 100 in (11, 12, 13): + # Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). + value = pgettext('ordinal 11, 12, 13', '{}th').format(value) + else: + templates = ( + # Translators: Ordinal format when value ends with 0, e.g. 80th. + pgettext('ordinal 0', '{}th'), + # Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. + pgettext('ordinal 1', '{}st'), + # Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. + pgettext('ordinal 2', '{}nd'), + # Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. + pgettext('ordinal 3', '{}rd'), + # Translators: Ordinal format when value ends with 4, e.g. 84th. + pgettext('ordinal 4', '{}th'), + # Translators: Ordinal format when value ends with 5, e.g. 85th. + pgettext('ordinal 5', '{}th'), + # Translators: Ordinal format when value ends with 6, e.g. 86th. + pgettext('ordinal 6', '{}th'), + # Translators: Ordinal format when value ends with 7, e.g. 87th. + pgettext('ordinal 7', '{}th'), + # Translators: Ordinal format when value ends with 8, e.g. 88th. + pgettext('ordinal 8', '{}th'), + # Translators: Ordinal format when value ends with 9, e.g. 89th. + pgettext('ordinal 9', '{}th'), + ) + value = templates[value % 10].format(value) # Mark value safe so i18n does not break with or see #19988 - return mark_safe("%d%s" % (value, suffixes[value % 10])) + return mark_safe(value) @register.filter(is_safe=True)