U
    Haz*                     @   s  d 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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d0d! ZeeeZeeeZ d1d Z!dPd2d3Z"d4d5 Z#dQd6dZ$dRd7dZ%dSd8d"Z&d9d	 Z'd:d
 Z(G d;d deZ)d<d Z*d=d Z+d>d Z,d?d Z-d@d Z.dTdBdZ/dCdD Z0dAdEdFdGZ1dHd Z2dId Z3dJd Z4edKZ5dLdM Z6dNdO Z7dS )Uz
Internationalization support.
    N)ContextDecorator)ROUND_UPDecimal)autoreload_startedfile_changed)RemovedInDjango40Warning)lazy)_lazy_re_compile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/tmp/pip-unpacked-wheel-3jxiddxt/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)translation_file_changedwatch_for_translation_changesr.   )Zdispatch_uid)
trans_null)Zdjango.confr,   ZUSE_I18NZ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__r5   r)   r)   r)   r*   r+   *   s   r+   c                 C   s
   t | S N)_transr   messager)   r)   r*   r   L   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   r9   r)   r)   r*   r   P   s     c                 C   s
   t | S r7   )r8   r   r9   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   r9   r)   r)   r*   r   a   s     c                 C   s   t | ||S r7   )r8   r   singularpluralnumberr)   r)   r*   r   n   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@   r)   r)   r*   r   r   s     c                 C   s   t | |S r7   )r8   r    )contextr:   r)   r)   r*   r       s    c                 C   s   t | |||S r7   )r8   r"   rD   rA   rB   rC   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   r9   r)   r)   r*   r      s     c                    st   t tr$d< tf }nL G fddd t fdd f }fdd|_|S )NrC   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 )NrA   )boolr4   kwargsr)   r*   __bool__   s    z/lazy_number.<locals>.NumberAwareString.__bool__c                    s0   z
|  W 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)r4   valuesrC   r)   r*   _get_number_value   s    
z8lazy_number.<locals>.NumberAwareString._get_number_valuec                    s   |d<  f S NrC   r)   )r4   number_value)funcrI   r)   r*   
_translate   s    z1lazy_number.<locals>.NumberAwareString._translatec                    s,   |r r|  |n|d }| |j||S )Nr   )rN   rR   format)r4   argsrI   rP   rM   r)   r*   rS      s    z-lazy_number.<locals>.NumberAwareString.formatc                    sN   t |tr r| |}n|}| |}z|| }W n tk
rH   Y nX |S r7   )
isinstancedictrN   rR   	TypeError)r4   rhsrP   Z
translatedrM   r)   r*   __mod__   s    
z.lazy_number.<locals>.NumberAwareString.__mod__N)r&   r'   r(   rJ   rN   rR   rS   rY   r)   )rQ   rI   rC   r)   r*   NumberAwareString   s
   
rZ   c                     s     S r7   r)   rH   )rZ   r)   r*   <lambda>       zlazy_number.<locals>.<lambda>c                      s   t  ffS r7   )_lazy_number_unpickler)   )rQ   rC   original_kwargsresultclassr)   r*   r[      r\   )rU   intr   copy
__reduce__)rQ   r_   rC   rI   proxyr)   )rZ   rQ   rI   rC   r^   r_   r*   lazy_number   s    
#rd   c                 C   s   t | |fd|i|S rO   )rd   )rQ   r_   rC   rI   r)   r)   r*   r]      s    r]   c                 C   s   t tt| ||dS )Nr@   )rd   r   strr@   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@   r)   r)   r*   r      s     c                 C   s   t tt| |||dS )NrE   )rd   r"   re   rE   r)   r)   r*   r#      s    c                 C   s
   t | S r7   )r8   r
   )languager)   r)   r*   r
      s    c                   C   s   t  S r7   )r8   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 r7   )rf   r   )r4   rf   r   r)   r)   r*   __init__   s    zoverride.__init__c                 C   s(   t  | _| jd k	rt| j nt  d S r7   )r   old_languagerf   r
   r   rG   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 r7   )rh   r   r   r
   )r4   exc_type	exc_value	tracebackr)   r)   r*   __exit__   s
    
zoverride.__exit__N)F)r&   r'   r(   rg   ri   rm   r)   r)   r)   r*   r      s   
c                   C   s   t  S r7   )r8   r   r)   r)   r)   r*   r      s    c                   C   s   t  S r7   )r8   r   r)   r)   r)   r*   r     s    c                 C   s
   t | S r7   )r8   r   )	lang_coder)   r)   r*   r     s    c                 C   sF   |  d}|dkr:| d|  d | |d d   S |  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   |   d\} }}|s| S |d\}}}t|dkr@| n| }|rX|d| 7 }| d | S )z8Turn a language name (en-us) into a locale name (en_US).rp   r;   ro   )rs   	partitionlentitleupper)rf   ro   Zcountrytailr)   r)   r*   r     s    Fc                 C   s   t | |S r7   )r8   r   )request
check_pathr)   r)   r*   r   "  s    c                 C   s
   t | S r7   )r8   get_language_from_path)pathr)   r)   r*   r}   &  s    r}   )strictc                C   s   t | |S r7   )r8   get_supported_language_variant)rn   r   r)   r)   r*   r   *  s    r   c                 K   s   ddl m} || f|S )Nrq   )r   )templater   )srcrI   r   r)   r)   r*   r   .  s    c                   C   s   t  S r7   )r8   r   r)   r)   r)   r*   r   3  s    c                 C   s   ddl m} z2||  }d|kr8d|kr8t|d d }n|}W nh tk
r   d| krbtd|  | dd }z|| }W n$ tk
r   td| |f Y nX Y nX |rt|d |d< |S )	Nr   )	LANG_INFOfallbacknamerp   zUnknown language code %s.z Unknown language code %s and %s.Zname_translated)Zdjango.conf.localer   r   rK   splitr   )rn   r   Z	lang_infoinfoZgeneric_lang_coder)   r)   r*   r   7  s"    z\s*\n\s*c                 C   s   t d|  S )N )trim_whitespace_resubstrip)sr)   r)   r*   trim_whitespaceP  s    r   c                 C   s"   t t| d jtdtdd S )Nrq   0)rounding)r`   r   quantizer   )valuer)   r)   r*   round_away_from_oneT  s    r   )N)N)N)N)F)8r6   r>   
contextlibr   decimalr   r   Zdjango.utils.autoreloadr   r   Zdjango.utils.deprecationr   Zdjango.utils.functionalr   Zdjango.utils.regex_helperr	   __all__r$   SyntaxWarningr%   r+   r8   r   r   r   r   r   r   r    r"   re   r   r!   r   rd   r]   r   r   r#   r
   r   r   r   r   r   r   r   r   r}   r   r   r   r   r   r   r   r)   r)   r)   r*   <module>   s                   


/


	
