3
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G d$d% d%eZG d&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d0d Z dOd1d2Z!d3d4 Z"dPd5dZ#dQd6dZ$dRd7d!Z%d8d Z&d9d	 Z'G d:d
 d
eZ(d;d Z)d<d Z*d=d Z+d>d Z,d?d Z-dSdAdZ.dBdC Z/d@dDdEdFZ0dGd Z1dHd Z2dId Z3ej4dJZ5dKdL Z6dMdN Z7dS )Tz
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(   E/usr/lib/python3.6/site-packages/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   st   ddl m} |jrLd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_changedr.   )dispatch_uid)
trans_null)django.confr+   USE_I18Ndjango.utils.translationr,   Z!django.utils.translation.reloaderr-   r.   r   connectr   r0   setattrgetattr)selfZ	real_namer+   Ztransr-   r.   r(   r(   r)   __getattr__7   s    zTrans.__getattr__N)r%   r&   r'   __doc__r8   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   )r;   r(   r(   r)   r   N   s    
c             C   s
   t j| S )N)r:   r   )r;   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().r<   )r=   )r>   r?   r   r   )r;   r(   r(   r)   r   _   s    
c             C   s   t j| ||S )N)r:   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().r<   )r=   )r>   r?   r   r   )r@   rA   rB   r(   r(   r)   r   p   s    
c             C   s   t j| |S )N)r:   r   )contextr;   r(   r(   r)   r   }   s    c             C   s   t j| |||S )N)r:   r!   )rC   r@   rA   rB   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().r<   )r=   )r>   r?   r   r   )r;   r(   r(   r)   r      s    
c                st   t tr$d< tf }nLj G fddd t fdd f }fdd|_|S )NrB   c                   sJ   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)r7   )kwargsr(   r)   __bool__   s    z/lazy_number.<locals>.NumberAwareString.__bool__c                s.   y|  S  t k
r(   t d  Y nX d S )Nz|Your dictionary lacks key '%s'. Please provide it, because it is required to determine whether string is singular or plural.)KeyError)r7   values)rB   r(   r)   _get_number_value   s    z8lazy_number.<locals>.NumberAwareString._get_number_valuec                s   |d<  f S )NrB   r(   )r7   number_value)funcrE   r(   r)   
_translate   s    z1lazy_number.<locals>.NumberAwareString._translatec                s,   |r r| j |n|d }| j|j||S )Nr   )rI   rL   format)r7   argsrE   rJ   )rB   r(   r)   rM      s    z-lazy_number.<locals>.NumberAwareString.formatc                sN   t |tr r| j|}n|}| j|}y|| }W n tk
rH   Y nX |S )N)
isinstancedictrI   rL   	TypeError)r7   rhsrJ   Z
translated)rB   r(   r)   __mod__   s    
z.lazy_number.<locals>.NumberAwareString.__mod__N)r%   r&   r'   rF   rI   rL   rM   rS   r(   )rK   rE   rB   r(   r)   NumberAwareString   s
   
rT   c                 s     S )Nr(   )rE   )rT   r(   r)   <lambda>   s    zlazy_number.<locals>.<lambda>c                  s   t  ffS )N)_lazy_number_unpickler(   )rK   rB   original_kwargsresultclassr(   r)   rU      s    )rO   intr   copy
__reduce__)rK   rX   rB   rE   proxyr(   )rT   rK   rE   rB   rW   rX   r)   lazy_number   s    
#r]   c             C   s   t | |fd|i|S )NrB   )r]   )rK   rX   rB   rE   r(   r(   r)   rV      s    rV   c             C   s   t tt| ||dS )N)r@   rA   rB   )r]   r   str)r@   rA   rB   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().r<   )r=   )r>   r?   r   r   )r@   rA   rB   r(   r(   r)   r      s    
c             C   s   t tt| |||dS )N)rC   r@   rA   rB   )r]   r!   r^   )rC   r@   rA   rB   r(   r(   r)   r"      s    c             C   s
   t j| S )N)r:   r	   )languager(   r(   r)   r	      s    c               C   s   t j S )N)r:   r
   r(   r(   r(   r)   r
      s    c               @   s&   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
   )r7   r_   r
   r(   r(   r)   __init__   s    zoverride.__init__c             C   s(   t  | _| jd k	rt| j nt  d S )N)r   old_languager_   r	   r   )r7   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)ra   r   r
   r	   )r7   exc_type	exc_value	tracebackr(   r(   r)   __exit__   s
    
zoverride.__exit__N)F)r%   r&   r'   r`   rb   rf   r(   r(   r(   r)   r      s   
c               C   s   t j S )N)r:   r   r(   r(   r(   r)   r      s    c               C   s   t j S )N)r:   r   r(   r(   r(   r)   r      s    c             C   s
   t j| S )N)r:   r   )	lang_coder(   r(   r)   r     s    c             C   sF   | j d}|dkr:| d| j d | |d d j  S | j S dS )z8Turn a locale name (en_US) into a language name (en-us)._r   N-   )findlower)localepr(   r(   r)   r     s    
(c             C   sd   | j  jd\} }}|s| S |jd\}}}t|dkr@|j n|j }|rX|d| 7 }| d | S )z8Turn a language name (en-us) into a locale name (en_US).ri   r<   rh   )rl   	partitionlentitleupper)r_   rh   Zcountrytailr(   r(   r)   r     s    Fc             C   s   t j| |S )N)r:   r   )requestZ
check_pathr(   r(   r)   r      s    c             C   s
   t j| S )N)r:   get_language_from_path)pathr(   r(   r)   ru   $  s    ru   )strictc            C   s   t j| |S )N)r:   get_supported_language_variant)rg   rw   r(   r(   r)   rx   (  s    rx   c             K   s   ddl m} || f|S )Nrj   )r   )templater   )srcrE   r   r(   r(   r)   r   ,  s    c               C   s   t j S )N)r:   r   r(   r(   r(   r)   r   1  s    c             C   s   ddl m} y2||  }d|kr8d|kr8t|d d }n|}W nh tk
r   d| krbtd|  | jdd }y|| }W n$ tk
r   td| |f Y nX Y nX |rt|d |d< |S )	Nr   )	LANG_INFOfallbacknameri   zUnknown language code %s.z Unknown language code %s and %s.Zname_translated)Zdjango.conf.localer{   r   rG   splitr   )rg   r{   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tdd S )Nrj   0)Zrounding)rY   r   Zquantizer   )valuer(   r(   r)   round_away_from_oneR  s    r   )N)N)N)N)F)8r9   rer>   
contextlibr   Zdecimalr   r   Zdjango.utils.autoreloadr   r   django.utils.deprecationr   django.utils.functionalr   __all__r#   SyntaxWarningr$   r*   r:   r   r   r   r   r   r   r   r!   r^   r   r    r   r]   rV   r   r   r"   r	   r
   r   r   r   r   r   r   r   ru   rx   r   r   r   compiler   r   r   r(   r(   r(   r)   <module>   sp   


/


	

