U
    8ÄT_Y*  ã                   @   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-dv63caxw/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/   )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   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   r9   r)   r)   r*   r   N   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   _   s     ýc                 C   s   t  | ||¡S r7   )r8   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@   r)   r)   r*   r   p   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   1  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 |r¼t|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   5  s"    z\s*\n\s*c                 C   s   t  d|  ¡ ¡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 )Nrq   Ú0)Úrounding)r`   r   Úquantizer   )Úvaluer)   r)   r*   Úround_away_from_oneR  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’                   õ


/


	
