
 X<                 @   s  d  d l  Z  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 m 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 d  d l m Z d  d l m Z m Z d  d l m Z m Z m  Z  m! Z! d  d l" m# Z# d  d l$ 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#  Z0 d! d d$ d%  Z1 Gd& d'   d' e%  Z2 Gd( d)   d) e2  Z3 d S)*    N)http)apps)settings)ContextEngine)translate_url)six)upath)RemovedInDjango20Warning)
smart_text)
get_format)is_safe_url
urlunquote)LANGUAGE_SESSION_KEYcheck_for_languageget_language	to_locale)DjangoTranslation)Viewzdjango.conflanguagec          	   C   s  |  j  j d |  j j d   } | s4 |  j   r t d | d |  j    r |  j j d  } | rw t |  } n  t d | d |  j    s d } q n  | r t j	 |  n t j
 d d  } |  j d k r|  j  j t  } | rt |  r| r.t | |  } | | k r.t j	 |  } q.n  t |  d	  rM| |  j t <q~| j t j | d
 t j d t j d t j q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/status   POSTsessionZmax_agepathdomain)r   getGETZis_ajaxr   get_hostZMETAr   r   ZHttpResponseRedirectHttpResponse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*   ?/home/ubuntu/projects/ifolica/build/django/django/views/i18n.pyset_language   s.    !/'		r,   c              C   s   d }  i  } x |  D] } t  |  | | <q Wi  } xt | j   D]f \ } } t | t j t f  rw t |  | | <q@ t | t t f  r@ d d   | D | | <q@ q@ 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_FORMATSc             S   s   g  |  ] } t  |   q Sr*   )r   ).0valuer*   r*   r+   
<listcomp>U   s   	 zget_formats.<locals>.<listcomp>)r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   )	r   items
isinstancer   string_typesintr   tuplelist)ZFORMAT_SETTINGSresultattrformatskvr*   r*   r+   get_formatsB   s        rI   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+   indent   s    z)render_javascript_catalog.<locals>.indent	sort_keysTrM      catalog_strformats_strpluralztext/javascript)
r   from_stringjs_catalog_templater   jsondumpsrI   r   r#   render)catalogrR   templaterM   contextr*   r*   r+   render_javascript_catalog   s    .	r[   c                s  t  j   } t d d   | D      j t    f d d   | D } g  } xT | D]L } t j |  } t j j	 t j j
 t | j   d  } | j |  qX Wt |  d | d | } | j }	 d  }
 d |	 k r*xL |	 d j d	  D]4 } | j d
  r | j d d  d j   }
 q q Wn  |
 d  k	 rid d   |
 j d  D d j d d  d }
 n  i  } i  } i  } | j r| j j n i  } x t j t j |	  t j |   D] \ } } | d k s| | 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)r;   
app_configr*   r*   r+   	<genexpr>   s    z)get_javascript_catalog.<locals>.<genexpr>c                s"   g  |  ] } |   k r |  q Sr*   r*   )r;   p)allowable_packagesr*   r+   r=      s   	 z*get_javascript_catalog.<locals>.<listcomp>localer   
localedirs rJ   zPlural-Forms::   c             S   s1   g  |  ]' } | j    j d   r | j     q S)zplural=)strip
startswith)r;   elr*   r*   r+   r=      s   	 ;r   =c                s"   g  |  ] }   j  | d    q S)rc   )r    )r;   i)rH   r*   r+   r=      s   	 )!r   get_app_configssetupdateDEFAULT_PACKAGES	importlibimport_moduleosr   joindirnamer	   __file__appendr   _catalogsplitrg   rf   	_fallback	itertoolschainr   	iteritemsr?   r@   rB   maxr    
setdefault	TypeErrorr>   range)ra   r   packagesapp_configspathspackager_   r   trans	trans_catrR   linepdictmaxcntsrX   trans_fallback_catkeyr<   msgidcntrG   r*   )r`   rH   r+   get_javascript_catalog   sH    *	&31

/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+)rC   ro   r?   r   r@   rx   )r   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.
    )r[   )r(   r   r   r*   r*   r+   null_javascript_catalog  s    r   djangojsc             C   sS   t  j d t d d 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.
    zSThe javascript_catalog() view is deprecated in favor of the JavaScriptCatalog view.
stacklevelrO   )warningswarnr
   r   r   r   r[   )r(   r   r   ra   rX   rR   r*   r*   r+   javascript_catalog  s    r   c             C   sq   t  j d t d d 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.
        }
    zGThe json_catalog() view is deprecated in favor of the JSONCatalog view.r   rO   rX   rF   rR   )	r   r   r
   r   r   r   rI   r   JsonResponse)r(   r   r   ra   rX   rR   datar*   r*   r+   json_catalog2  s    

r   c               @   sj   e  Z d  Z d Z d Z d Z d d   Z d d   Z d d	   Z d
 d   Z	 d d   Z
 d d   Z d S)JavaScriptCataloga  
    Return the selected language catalog as a JavaScript library.

    Receives the list of packages to check for translations in the `packages`
    kwarg either from the extra dictionary passed to the url() function or as a
    plus-sign delimited string from the request. Default is 'django.conf'.

    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. This
    might be needed if you deliver your JavaScript source from Django templates.
    r   Nc       	      O   s   t    } | j d |  j  } | j d d  j d  p? |  j } | rW |  j |  n d  } t | d | d | |  _ |  j |   } |  j	 |  S)Nr   r   rc   r   rb   )
r   r    r   rx   r   	get_pathsr   translationget_context_datarender_to_response)	selfr(   argskwargsra   r   r   r   rZ   r*   r*   r+   r    a  s    	$zJavaScriptCatalog.getc                sI   t  d d   t j   D      f d d   | D } d d   | D S)Nc             s   s   |  ] } | j  | f Vq d  S)N)r\   )r;   r]   r*   r*   r+   r^   m  s    z.JavaScriptCatalog.get_paths.<locals>.<genexpr>c                s&   g  |  ] } |   k r   |  q Sr*   r*   )r;   r_   )r`   r*   r+   r=   n  s   	 z/JavaScriptCatalog.get_paths.<locals>.<listcomp>c             S   s(   g  |  ] } t  j j | j d    q S)ra   )rr   r   rs   )r;   Zappr*   r*   r+   r=   p  s   	 )dictr   rl   )r   r   r   r*   )r`   r+   r   l  s    zJavaScriptCatalog.get_pathsc             C   s   d  } d |  j  j k rm xR |  j  j d j d  D]4 } | j d  r2 | j d d  d j   } q2 q2 Wn  | d  k	 r d d   | j d  D d	 j d
 d  d } n  | S)Nrc   rJ   zPlural-Forms:rd   re   c             S   s1   g  |  ]' } | j    j d   r | j     q S)zplural=)rf   rg   )r;   rh   r*   r*   r+   r=   |  s   	 z0JavaScriptCatalog.get_plural.<locals>.<listcomp>ri   r   rj   )r   rw   rx   rg   rf   )r   rR   r   r*   r*   r+   
get_pluralr  s     &3zJavaScriptCatalog.get_pluralc                sd  i  } i  } i  } |  j  j } |  j  j r9 |  j  j j n i  } x t j t j |  t j |   D] \ } } | d k sd | | k r qd n  t | t j  r | | | <qd t | t	  r| d } | d }	 t
 |	 | j | d   | | <| | j | i   |	 <qd t |   qd WxE | j   D]7 \ }
     f d d   t | | d  D | |
 <q%W| S)Nrc   r   re   c                s"   g  |  ] }   j  | d    q S)rc   )r    )r;   rk   )rH   r*   r+   r=     s   	 z1JavaScriptCatalog.get_catalog.<locals>.<listcomp>)r   rw   ry   rz   r{   r   r|   r?   r@   rB   r}   r    r~   r   r>   r   )r   r   r   rX   r   r   r   r<   r   r   rG   r*   )rH   r+   get_catalog  s&    !1

/zJavaScriptCatalog.get_catalogc             K   s(   i |  j    d 6t   d 6|  j   d 6S)NrX   rF   rR   )r   rI   r   )r   r   r*   r*   r+   r     s    
z"JavaScriptCatalog.get_context_datac             K   s   d d   } t    j t  } | d rM | t j | d d d d d  n d  | d <| t j | d	 d d d d  | d
 <t j | j t |   d  S)Nc             S   s   |  j  d d  S)NrJ   z
  )rK   )rL   r*   r*   r+   rM     s    z4JavaScriptCatalog.render_to_response.<locals>.indentrX   rN   TrM   rO   rP   rF   rQ   ztext/javascript)	r   rS   rT   rU   rV   r   r#   rW   r   )r   rZ   response_kwargsrM   rY   r*   r*   r+   r     s
    9)z$JavaScriptCatalog.render_to_response)__name__
__module____qualname____doc__r   r   r    r   r   r   r   r   r*   r*   r*   r+   r   R  s   r   c               @   s"   e  Z d  Z d Z d d   Z d S)JSONCataloga  
    Return the selected language catalog as a JSON object.

    Receives the same parameters as JavaScriptCatalog and 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.
        }
    c             K   s   t  j |  S)N)r   r   )r   rZ   r   r*   r*   r+   r     s    zJSONCatalog.render_to_responseN)r   r   r   r   r   r*   r*   r*   r+   r     s   r   )4rp   rz   rU   rr   r   Zdjangor   Zdjango.appsr   Zdjango.confr   Zdjango.templater   r   Zdjango.urlsr   Zdjango.utilsr   Zdjango.utils._osr	   Zdjango.utils.deprecationr
   Zdjango.utils.encodingr   Zdjango.utils.formatsr   Zdjango.utils.httpr   r   Zdjango.utils.translationr   r   r   r   Z#django.utils.translation.trans_realr   Zdjango.views.genericr   ro   r%   r,   rI   rT   r[   r   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   s@   "	&~0 W