

_V|/                 @   s  d  d l  Z d  d l Z d  d l Z d  d l Z d  d l m Z d  d l m Z d  d l	 m
 Z
 d  d l m Z d  d l m Z m Z d  d l m Z d  d l m Z d  d	 l m Z d  d
 l m Z m Z d  d l m Z d  d l m Z m Z m Z m Z d g Z  d Z! d d   Z" d d   Z# d Z$ d d d d  Z% d d   Z& d d   Z' d d   Z( d d d d  Z) d d d d   Z* d d d! d"  Z+ d S)#    N)http)apps)settings)translate_url)ContextEngine)six)upath)
smart_text)
get_formatget_format_modules)is_safe_url)LANGUAGE_SESSION_KEYcheck_for_languageget_language	to_localezdjango.conflanguagec          	   C   s;  |  j  j d |  j j d   } t d | d |  j    su |  j j d  } t d | d |  j    su d } qu n  t j |  } |  j d k r7|  j  j t	  } | r7t
 |  r7t | |  } | | k r t j |  } n  t |  d  r| |  j t <q4| j t j | d t j d	 t j d
 t j q7n  | S)a  
    Redirect to a given url while setting the chosen language in the
    session or cookie. The url and the language code need to be
    specified in the request parameters.

    Since this view changes how the user will see the rest of the site, it must
    only be accessed as a POST request. If called as a GET request, it will
    redirect to the page in the request (the 'next' parameter) without changing
    any state.
    nexturlhostZHTTP_REFERER/POSTsessionZmax_agepathdomain)r   getGETr   get_hostZMETAr   ZHttpResponseRedirectmethodLANGUAGE_QUERY_PARAMETERr   r   hasattrr   r   
set_cookier   ZLANGUAGE_COOKIE_NAMEZLANGUAGE_COOKIE_AGEZLANGUAGE_COOKIE_PATHZLANGUAGE_COOKIE_DOMAIN)requestr   responseZ	lang_codeZ
next_trans r$   3/tmp/pip-build-ghmbqnp_/Django/django/views/i18n.pyset_language   s&    !		r&   c              C   s   d }  i  } x? t  g t d d  D]' } x |  D] } t |  | | <q0 Wq# Wi  } xt | j   D]f \ } } t | t j t f  r t |  | | <qa t | t	 t
 f  ra d d   | D | | <qa qa W| S)z?
    Returns all formats strings required for i18n to work
    DATE_FORMATDATETIME_FORMATTIME_FORMATYEAR_MONTH_FORMATMONTH_DAY_FORMATSHORT_DATE_FORMATSHORT_DATETIME_FORMATFIRST_DAY_OF_WEEKDECIMAL_SEPARATORTHOUSAND_SEPARATORNUMBER_GROUPINGDATE_INPUT_FORMATSTIME_INPUT_FORMATSDATETIME_INPUT_FORMATSreverseTc             S   s   g  |  ] } t  |   q Sr$   )r
   ).0valuer$   r$   r%   
<listcomp>M   s   	 zget_formats.<locals>.<listcomp>)r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   )r   r   r   items
isinstancer   string_typesintr
   tuplelist)ZFORMAT_SETTINGSresultmoduleattrformatskvr$   r$   r%   get_formats9   s         rE   a
  
{% autoescape off %}
(function(globals) {

  var django = globals.django || (globals.django = {});

  {% if plural %}
  django.pluralidx = function(n) {
    var v={{ plural }};
    if (typeof(v) == 'boolean') {
      return v ? 1 : 0;
    } else {
      return v;
    }
  };
  {% else %}
  django.pluralidx = function(count) { return (count == 1) ? 0 : 1; };
  {% endif %}

  /* gettext library */

  django.catalog = django.catalog || {};
  {% if catalog_str %}
  var newcatalog = {{ catalog_str }};
  for (var key in newcatalog) {
    django.catalog[key] = newcatalog[key];
  }
  {% endif %}

  if (!django.jsi18n_initialized) {
    django.gettext = function(msgid) {
      var value = django.catalog[msgid];
      if (typeof(value) == 'undefined') {
        return msgid;
      } else {
        return (typeof(value) == 'string') ? value : value[0];
      }
    };

    django.ngettext = function(singular, plural, count) {
      var value = django.catalog[singular];
      if (typeof(value) == 'undefined') {
        return (count == 1) ? singular : plural;
      } else {
        return value[django.pluralidx(count)];
      }
    };

    django.gettext_noop = function(msgid) { return msgid; };

    django.pgettext = function(context, msgid) {
      var value = django.gettext(context + '\x04' + msgid);
      if (value.indexOf('\x04') != -1) {
        value = msgid;
      }
      return value;
    };

    django.npgettext = function(context, singular, plural, count) {
      var value = django.ngettext(context + '\x04' + singular, context + '\x04' + plural, count);
      if (value.indexOf('\x04') != -1) {
        value = django.ngettext(singular, plural, count);
      }
      return value;
    };

    django.interpolate = function(fmt, obj, named) {
      if (named) {
        return fmt.replace(/%\(\w+\)s/g, function(match){return String(obj[match.slice(2,-2)])});
      } else {
        return fmt.replace(/%s/g, function(match){return String(obj.shift())});
      }
    };


    /* formatting library */

    django.formats = {{ formats_str }};

    django.get_format = function(format_type) {
      var value = django.formats[format_type];
      if (typeof(value) == 'undefined') {
        return format_type;
      } else {
        return value;
      }
    };

    /* add to global namespace */
    globals.pluralidx = django.pluralidx;
    globals.gettext = django.gettext;
    globals.ngettext = django.ngettext;
    globals.gettext_noop = django.gettext_noop;
    globals.pgettext = django.pgettext;
    globals.npgettext = django.npgettext;
    globals.interpolate = django.interpolate;
    globals.get_format = django.get_format;

    django.jsi18n_initialized = true;
  }

}(this));
{% endautoescape %}
c          	   C   s   t    j t  } d d   } t i |  rK | t j |  d d d d  n d  d 6| t j t   d d d d  d 6| d	 6 } t j | j	 |  d
  S)Nc             S   s   |  j  d d  S)N
z
  )replace)sr$   r$   r%   <lambda>   s    z+render_javascript_catalog.<locals>.<lambda>	sort_keysTindent   Zcatalog_strZformats_strpluralztext/javascript)
r   Zfrom_stringjs_catalog_templater   jsondumpsrE   r   ZHttpResponserender)catalogrM   templaterK   contextr$   r$   r%   render_javascript_catalog   s    .	rU   c                s  t  t j  } t j   } t d d   | D      j t    f d d   | D } i  } g  } |  j d  } d } xT | D]L }	 t	 j
 |	  }
 t j j t j j t |
 j   d  } | j |  q W| j t t j   x^ | D]V } y, t j | | d g  } | j | j  Wn t k
 r5Yq X| r d } q q W| d k rxg | D]\ } y t j | | | g  } Wn t k
 rd  } Yn X| d  k	 r\| j | j  q\q\Wn  |  | k r_| r| ri  } q_i  } xd | D]\ } y t j | | |  g  } Wn t k
 r)d  } Yn X| d  k	 r| j | j  qqW| r_| } q_n  d  } d	 | k rxL | d	 j d
  D]4 } | j d  r| j d d  d j   } qqWn  | d  k	 rd d   | j d  D d j d d  d } n  i  } i  } i  } x | j   D] \ }  | d	 k r<qn  t | t j  r[ | | <qt | t  r| d } | d } t  | | j! | d   | | < | j" | i   | <qt# |   qWxE | j   D]7 \ }   f d d   t$ | | d  D | | <qW| | f S)Nc             s   s   |  ] } | j  Vq d  S)N)name)r6   Z
app_configr$   r$   r%   	<genexpr>   s    z)get_javascript_catalog.<locals>.<genexpr>c                s"   g  |  ] } |   k r |  q Sr$   r$   )r6   p)allowable_packagesr$   r%   r8      s   	 z*get_javascript_catalog.<locals>.<listcomp>enTlocaleF rF   zPlural-Forms::   c             S   s1   g  |  ]' } | j    j d   r | j     q S)zplural=)strip
startswith)r6   elr$   r$   r%   r8     s   	 ;r   =c                s"   g  |  ] }   j  | d    q S)r\   )r   )r6   i)rD   r$   r%   r8     s   	 )%r   r   ZLANGUAGE_CODEr   Zget_app_configssetupdateDEFAULT_PACKAGESr`   	importlibimport_moduleosr   joindirnamer	   __file__appendextendreversedZLOCALE_PATHSgettext_moduletranslation_catalogIOErrorsplitr_   r9   r:   r   r;   r=   maxr   
setdefault	TypeErrorrange)r[   r   packagesZdefault_localeZapp_configstpathsZen_selectedZen_catalog_missingpackagerX   r   rR   Zlocale_trM   lpdictZmaxcntsrC   msgidZcntr$   )rY   rD   r%   get_javascript_catalog   s    *	&3

/r   c             C   s:   |  j  j t  } | o! t |  s0 t   } n  t |  S)N)r   r   r   r   r   r   )r"   r   r$   r$   r%   _get_locale"  s    r   c             C   sC   |  d  k r t  t  }  n$ t |  t j  r? |  j d  }  n  |  S)N+)r>   rg   r:   r   r;   ru   )rz   r$   r$   r%   _parse_packages)  s
    r   c             C   s   t    S)z}
    Returns "identity" versions of the JavaScript i18n functions -- i.e.,
    versions that don't actually do anything.
    )rU   )r"   r   rz   r$   r$   r%   null_javascript_catalog1  s    r   Zdjangojsc             C   s=   t  |   } t |  } t | | |  \ } } t | |  S)a  
    Returns the selected language catalog as a javascript library.

    Receives the list of packages to check for translations in the
    packages parameter either from an infodict or as a +-delimited
    string from the request. Default is 'django.conf'.

    Additionally you can override the gettext domain for this view,
    but usually you don't want to do that, as JavaScript messages
    go to the djangojs domain. But this might be needed if you
    deliver your JavaScript source from Django templates.
    )r   r   r   rU   )r"   r   rz   r[   rR   rM   r$   r$   r%   javascript_catalog9  s    r   c             C   s[   t  |   } t |  } t | | |  \ } } i | d 6t   d 6| d 6} t j |  S)a  
    Return the selected language catalog as a JSON object.

    Receives the same parameters as javascript_catalog(), but returns
    a response with a JSON object of the following format:

        {
            "catalog": {
                # Translations catalog
            },
            "formats": {
                # Language formats for date, time, etc.
            },
            "plural": '...'  # Expression for plural forms, or null.
        }
    rR   rB   rM   )r   r   r   rE   r   ZJsonResponse)r"   r   rz   r[   rR   rM   datar$   r$   r%   json_catalogL  s    

r   ),gettextrq   rh   rO   rj   Zdjangor   Zdjango.appsr   Zdjango.confr   Zdjango.core.urlresolversr   Zdjango.templater   r   Zdjango.utilsr   Zdjango.utils._osr	   Zdjango.utils.encodingr
   Zdjango.utils.formatsr   r   Zdjango.utils.httpr   Zdjango.utils.translationr   r   r   r   rg   r   r&   rE   rN   rU   r   r   r   r   r   r   r$   r$   r$   r%   <module>   s4   "	!Y