diff --git a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js index 0c6eff0fa9..016de90f28 100644 --- a/django/contrib/admin/media/js/admin/DateTimeShortcuts.js +++ b/django/contrib/admin/media/js/admin/DateTimeShortcuts.js @@ -44,7 +44,7 @@ var DateTimeShortcuts = { var shortcuts_span = document.createElement('span'); inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); var now_link = document.createElement('a'); - now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + gettext('TIME_INPUT_FORMATS') + "'));"); + now_link.setAttribute('href', "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + get_format('TIME_INPUT_FORMATS')[0] + "'));"); now_link.appendChild(document.createTextNode(gettext('Now'))); var clock_link = document.createElement('a'); clock_link.setAttribute('href', 'javascript:DateTimeShortcuts.openClock(' + num + ');'); @@ -80,10 +80,11 @@ var DateTimeShortcuts = { quickElement('h2', clock_box, gettext('Choose a time')); time_list = quickElement('ul', clock_box, ''); time_list.className = 'timelist'; - quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + gettext('TIME_INPUT_FORMATS') + "'));"); - quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,0,0,0,0).strftime('" + gettext('TIME_INPUT_FORMATS') + "'));"); - quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,6,0,0,0).strftime('" + gettext('TIME_INPUT_FORMATS') + "'));"); - quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,12,0,0,0).strftime('" + gettext('TIME_INPUT_FORMATS') + "'));"); + time_format = get_format('TIME_INPUT_FORMATS')[0]; + quickElement("a", quickElement("li", time_list, ""), gettext("Now"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date().strftime('" + time_format + "'));"); + quickElement("a", quickElement("li", time_list, ""), gettext("Midnight"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,0,0,0,0).strftime('" + time_format + "'));"); + quickElement("a", quickElement("li", time_list, ""), gettext("6 a.m."), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,6,0,0,0).strftime('" + time_format + "'));"); + quickElement("a", quickElement("li", time_list, ""), gettext("Noon"), "href", "javascript:DateTimeShortcuts.handleClockQuicklink(" + num + ", new Date(1970,1,1,12,0,0,0).strftime('" + time_format + "'));"); cancel_p = quickElement('p', clock_box, ''); cancel_p.className = 'calendar-cancel'; @@ -236,7 +237,7 @@ var DateTimeShortcuts = { DateTimeShortcuts.calendars[num].drawNextMonth(); }, handleCalendarCallback: function(num) { - format = gettext('DATE_INPUT_FORMATS'); + format = get_format('DATE_INPUT_FORMATS')[0]; // the format needs to be escaped a little format = format.replace('\\', '\\\\'); format = format.replace('\r', '\\r'); @@ -248,7 +249,7 @@ var DateTimeShortcuts = { handleCalendarQuickLink: function(num, offset) { var d = new Date(); d.setDate(d.getDate() + offset) - DateTimeShortcuts.calendarInputs[num].value = d.strftime(gettext('DATE_INPUT_FORMATS')); + DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); DateTimeShortcuts.dismissCalendar(num); }, cancelEventPropagation: function(e) { diff --git a/django/contrib/admin/media/js/calendar.js b/django/contrib/admin/media/js/calendar.js index 3f57145041..9804339e1d 100644 --- a/django/contrib/admin/media/js/calendar.js +++ b/django/contrib/admin/media/js/calendar.js @@ -25,7 +25,7 @@ function quickElement() { var CalendarNamespace = { monthsOfYear: gettext('January February March April May June July August September October November December').split(' '), daysOfWeek: gettext('S M T W T F S').split(' '), - firstDayOfWeek: parseInt(gettext('FIRST_DAY_OF_WEEK')), + firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), isLeapYear: function(year) { return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0)); }, diff --git a/django/views/i18n.py b/django/views/i18n.py index 6a1ee514cd..dc0adf356e 100644 --- a/django/views/i18n.py +++ b/django/views/i18n.py @@ -53,7 +53,14 @@ def get_formats(): result[attr] = getattr(module, attr) except AttributeError: pass - return result + src = [] + for k, v in result.items(): + if isinstance(v, (basestring, int)): + src.append("formats['%s'] = '%s';\n" % (javascript_quote(k), javascript_quote(smart_unicode(v)))) + elif isinstance(v, (tuple, list)): + v = [javascript_quote(smart_unicode(value)) for value in v] + src.append("formats['%s'] = ['%s'];\n" % (javascript_quote(k), "', '".join(v))) + return ''.join(src) NullSource = """ /* gettext identity library */ @@ -90,6 +97,25 @@ function ngettext(singular, plural, count) { } function gettext_noop(msgid) { return msgid; } + +""" + +LibFormatHead = """ +/* formatting library */ + +var formats = new Array(); + +""" + +LibFormatFoot = """ +function get_format(format_type) { + var value = formats[format_type]; + if (typeof(value) == 'undefined') { + return msgid; + } else { + return value; + } +} """ SimplePlural = """ @@ -122,7 +148,8 @@ def null_javascript_catalog(request, domain=None, packages=None): Returns "identity" versions of the JavaScript i18n functions -- i.e., versions that don't actually do anything. """ - return http.HttpResponse(NullSource + InterPolate, 'text/javascript') + src = [NullSource, InterPolate, LibFormatHead, get_formats(), LibFormatFoot] + return http.HttpResponse(''.join(src), 'text/javascript') def javascript_catalog(request, domain='djangojs', packages=None): """ @@ -210,15 +237,12 @@ def javascript_catalog(request, domain='djangojs', packages=None): csrc.sort() for k, v in pdict.items(): src.append("catalog['%s'] = [%s];\n" % (javascript_quote(k), ','.join(["''"]*(v+1)))) - for k, v in get_formats().items(): - if isinstance(v, (basestring, int)): - src.append("catalog['%s'] = '%s';\n" % (javascript_quote(k), javascript_quote(smart_unicode(v)))) - elif isinstance(v, (tuple, list)): - v = [javascript_quote(smart_unicode(value)) for value in v] - src.append("catalog['%s'] = ['%s'];\n" % (javascript_quote(k), "', '".join(v))) src.extend(csrc) src.append(LibFoot) src.append(InterPolate) + src.append(LibFormatHead) + src.append(get_formats()) + src.append(LibFormatFoot) src = ''.join(src) return http.HttpResponse(src, 'text/javascript')