
v^&*                 @   s  d  Z  d d l Z d d l Z d d l m Z d d l m Z m Z d d l m	 Z	 m
 Z
 d d l m Z d d l m Z d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! d" g Z d# Z Gd$ d%   d% e  Z Gd& d'   d'  Z e   Z [ d( d   Z d) d   Z d* d   Z d+ d   Z d, d   Z d- d   Z d. d   Z d/ d    Z e e e  Z e e e  Z d0 d   Z  d d1 d2  Z! d3 d4   Z" d d5 d  Z# d d6 d  Z$ d d7 d!  Z% d8 d   Z& d9 d	   Z' Gd: d
   d
 e  Z( d; d   Z) d< d   Z* d= d   Z+ d> d   Z, d? d   Z- d@ dA d  Z. dB dC   Z/ dD d@ dE dF  Z0 dG d   Z1 dH d   Z2 dI d   Z3 e j4 dJ  Z5 dK dL   Z6 dM dN   Z7 d S)Oz
Internationalization support.
    N)ContextDecorator)ROUND_UPDecimal)autoreload_startedfile_changed)RemovedInDjango40Warning)lazyactivate
deactivateoverridedeactivate_allget_languageget_language_from_requestget_language_infoget_language_bidicheck_for_languageto_language	to_locale
templatizegettextgettext_lazygettext_noopugettextugettext_lazyugettext_noopngettextngettext_lazy	ungettextungettext_lazypgettextpgettext_lazy	npgettextnpgettext_lazyLANGUAGE_SESSION_KEYZ	_languagec               @   s   e  Z d  Z d S)TranslatorCommentWarningN)__name__
__module____qualname__ r(   r(   C/tmp/pip-build-8lau8j11/django/django/utils/translation/__init__.pyr$      s   r$   c               @   s"   e  Z d  Z d Z d d   Z d S)Transa  
    The purpose of this class is to store the actual translation function upon
    receiving the first call to that function. After this is done, changes to
    USE_I18N will have no effect to which function is served upon request. If
    your tests rely on changing USE_I18N, you can delete all the functions
    from _trans.__dict__.

    Note that storing the function with setattr will have a noticeable
    performance effect, as access to the function goes the normal path,
    instead of using __getattr__.
    c             C   s   d d l  m } | j rh d d l m } d d l m } m } t j	 | d d t
 j	 | d d n d d l m } t |  | t | |   t | |  S)Nr   )settings)
trans_real)watch_for_translation_changestranslation_file_changedZdispatch_uidr.   )
trans_null)Zdjango.confr+   ZUSE_I18NZdjango.utils.translationr,   Z!django.utils.translation.reloaderr-   r.   r   connectr   r/   setattrgetattr)selfZ	real_namer+   Ztransr-   r.   r(   r(   r)   __getattr__7   s    	zTrans.__getattr__N)r%   r&   r'   __doc__r4   r(   r(   r(   r)   r*   *   s   r*   c             C   s   t  j |   S)N)_transr   )messager(   r(   r)   r   J   s    c             C   s    t  j d t d d t |   S)zx
    A legacy compatibility wrapper for Unicode handling on Python 2.
    Alias of gettext_noop() since Django 2.0.
    zkdjango.utils.translation.ugettext_noop() is deprecated in favor of django.utils.translation.gettext_noop().
stacklevel   )warningswarnr   r   )r7   r(   r(   r)   r   N   s    c             C   s   t  j |   S)N)r6   r   )r7   r(   r(   r)   r   [   s    c             C   s    t  j d t d d t |   S)zs
    A legacy compatibility wrapper for Unicode handling on Python 2.
    Alias of gettext() since Django 2.0.
    zadjango.utils.translation.ugettext() is deprecated in favor of django.utils.translation.gettext().r8   r9   )r:   r;   r   r   )r7   r(   r(   r)   r   _   s    c             C   s   t  j |  | |  S)N)r6   r   )singularpluralnumberr(   r(   r)   r   l   s    c             C   s&   t  j d t d d t |  | |  S)zt
    A legacy compatibility wrapper for Unicode handling on Python 2.
    Alias of ngettext() since Django 2.0.
    zcdjango.utils.translation.ungettext() is deprecated in favor of django.utils.translation.ngettext().r8   r9   )r:   r;   r   r   )r<   r=   r>   r(   r(   r)   r   p   s    c             C   s   t  j |  |  S)N)r6   r   )contextr7   r(   r(   r)   r   }   s    c             C   s   t  j |  | | |  S)N)r6   r!   )r?   r<   r=   r>   r(   r(   r)   r!      s    c             C   s    t  j d t d d t |   S)z
    A legacy compatibility wrapper for Unicode handling on Python 2. Has been
    Alias of gettext_lazy since Django 2.0.
    zkdjango.utils.translation.ugettext_lazy() is deprecated in favor of django.utils.translation.gettext_lazy().r8   r9   )r:   r;   r   r   )r7   r(   r(   r)   r      s    c                s   t   t  r1   d <t       } nm  j    G   f d d   d     t   f d d         }     f d d   | _ | S)Nr>   c                   sm   e  Z d  Z  f d d   Z  f d d   Z    f d d   Z  f d d   Z  f d	 d
   Z d S)z&lazy_number.<locals>.NumberAwareStringc                s   t    d  S)Nr<   )bool)r3   )kwargsr(   r)   __bool__   s    z/lazy_number.<locals>.NumberAwareString.__bool__c                s5   y |   SWn" t  k
 r0 t  d     Yn Xd  S)Nz|Your dictionary lacks key '%s'. Please provide it, because it is required to determine whether string is singular or plural.)KeyError)r3   values)r>   r(   r)   _get_number_value   s    z8lazy_number.<locals>.NumberAwareString._get_number_valuec                s   |  d <     S)Nr>   r(   )r3   number_value)funcrA   r(   r)   
_translate   s    
z1lazy_number.<locals>.NumberAwareString._translatec                s>   | r   r |  j  |  n | d } |  j |  j | |   S)Nr   )rE   rH   format)r3   argsrA   rF   )r>   r(   r)   rI      s    %z-lazy_number.<locals>.NumberAwareString.formatc                sc   t  | t  r'   r' |  j |  } n | } |  j |  } y | | } Wn t k
 r^ Yn X| S)N)
isinstancedictrE   rH   	TypeError)r3   rhsrF   Z
translated)r>   r(   r)   __mod__   s    z.lazy_number.<locals>.NumberAwareString.__mod__N)r%   r&   r'   rB   rE   rH   rI   rO   r(   )rG   rA   r>   r(   r)   NumberAwareString   s
   
rP   c                 s       S)Nr(   )rA   )rP   r(   r)   <lambda>   s    zlazy_number.<locals>.<lambda>c                  s   t       f f S)N)_lazy_number_unpickler(   )rG   r>   original_kwargsresultclassr(   r)   rQ      s    )rK   intr   copy
__reduce__)rG   rT   r>   rA   proxyr(   )rP   rG   rA   r>   rS   rT   r)   lazy_number   s    
"#!rY   c             C   s   t  |  | d | | S)Nr>   )rY   )rG   rT   r>   rA   r(   r(   r)   rR      s    rR   c          	   C   s   t  t t d |  d | d | S)Nr<   r=   r>   )rY   r   str)r<   r=   r>   r(   r(   r)   r      s    c             C   s&   t  j d t d d t |  | |  S)z}
    A legacy compatibility wrapper for Unicode handling on Python 2.
    An alias of ungettext_lazy() since Django 2.0.
    zmdjango.utils.translation.ungettext_lazy() is deprecated in favor of django.utils.translation.ngettext_lazy().r8   r9   )r:   r;   r   r   )r<   r=   r>   r(   r(   r)   r      s    c             C   s%   t  t t d |  d | d | d | S)Nr?   r<   r=   r>   )rY   r!   rZ   )r?   r<   r=   r>   r(   r(   r)   r"      s    c             C   s   t  j |   S)N)r6   r	   )languager(   r(   r)   r	      s    c               C   s
   t  j   S)N)r6   r
   r(   r(   r(   r)   r
      s    c               @   s7   e  Z d  Z d d d  Z d d   Z d d   Z d S)	r   Fc             C   s   | |  _  | |  _ d  S)N)r[   r
   )r3   r[   r
   r(   r(   r)   __init__   s    	zoverride.__init__c             C   s6   t    |  _ |  j d  k	 r+ t |  j  n t   d  S)N)r   old_languager[   r	   r   )r3   r(   r(   r)   	__enter__   s    zoverride.__enter__c             C   s=   |  j  d  k r t   n  |  j r, t   n t |  j   d  S)N)r]   r   r
   r	   )r3   exc_type	exc_value	tracebackr(   r(   r)   __exit__   s
    
	
zoverride.__exit__N)r%   r&   r'   r\   r^   rb   r(   r(   r(   r)   r      s   c               C   s
   t  j   S)N)r6   r   r(   r(   r(   r)   r      s    c               C   s
   t  j   S)N)r6   r   r(   r(   r(   r)   r      s    c             C   s   t  j |   S)N)r6   r   )	lang_coder(   r(   r)   r     s    c             C   sY   |  j  d  } | d k rK |  d |  j   d |  | d d  j   S|  j   Sd S)z8Turn a locale name (en_US) into a language name (en-us)._r   N-   )findlower)localepr(   r(   r)   r     s    0c             C   s   |  j    j d  \ }  } } | s( |  S| j d  \ } } } t |  d k r^ | j   n	 | j   } | r~ | d | 7} |  d | S)z8Turn a language name (en-us) into a locale name (en_US).re   r9   rd   )rh   	partitionlentitleupper)r[   rd   Zcountrytailr(   r(   r)   r     s    *Fc             C   s   t  j |  |  S)N)r6   r   )request
check_pathr(   r(   r)   r      s    c             C   s   t  j |   S)N)r6   get_language_from_path)pathr(   r(   r)   rr   $  s    rr   strictc            C   s   t  j |  |  S)N)r6   get_supported_language_variant)rc   rt   r(   r(   r)   ru   (  s    ru   c             K   s   d d l  m } | |  |  S)Nrf   )r   )templater   )srcrA   r   r(   r(   r)   r   ,  s    c               C   s
   t  j   S)N)r6   r   r(   r(   r(   r)   r   1  s    c             C   s   d d l  m } yC | |  } d | k rL d | k rL t | d d  } n | } Wnz t k
 r d |  k r t d |    |  j d  d } y | | } Wn( t k
 r t d |  | f   Yn XYn X| r t | d  | d <| S)	Nr   )	LANG_INFOfallbacknamere   zUnknown language code %s.z Unknown language code %s and %s.Zname_translated)Zdjango.conf.localerx   r   rC   splitr   )rc   rx   Z	lang_infoinfoZgeneric_lang_coder(   r(   r)   r   5  s"    

 z\s*\n\s*c             C   s   t  j d |  j    S)N )trim_whitespace_resubstrip)sr(   r(   r)   trim_whitespaceN  s    r   c             C   s-   t  t |  d  j t d  d t  d S)Nrf   0Zrounding)rU   r   Zquantizer   )valuer(   r(   r)   round_away_from_oneR  s    r   )8r5   rer:   
contextlibr   decimalr   r   Zdjango.utils.autoreloadr   r   Zdjango.utils.deprecationr   Zdjango.utils.functionalr   __all__r#   SyntaxWarningr$   r*   r6   r   r   r   r   r   r   r   r!   rZ   r   r    r   rY   rR   r   r   r"   r	   r
   r   r   r   r   r   r   r   rr   ru   r   r   r   compiler~   r   r   r(   r(   r(   r)   <module>   sp   				/	