U
     5øi½!  ã                   @   sš  d 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g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e
eeƒZe
eeƒZdCd&d'„Zd(d)„ ZdDd*d„ZdEd+d„Zd,d„ Zd-d„ ZG d.d	„ d	eƒZ d/d„ Z!d0d„ Z"d1d„ Z#d2d„ Z$d3d„ Z%dFd5d„Z&d6d7„ Z'd4d8œd9d:„Z(d;d„ Z)d<d
„ Z*d=d„ Z+ed>ƒZ,d?d@„ Z-dAdB„ Z.d%S )Gz
Internationalization support.
é    )ÚContextDecorator)ÚROUND_UPÚDecimal)Úautoreload_startedÚfile_changed)Ú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ÚngettextÚngettext_lazyÚpgettextÚpgettext_lazyÚ	npgettextÚnpgettext_lazyc                   @   s   e Zd ZdS )ÚTranslatorCommentWarningN)Ú__name__Ú
__module__Ú__qualname__© r"   r"   úE/tmp/pip-unpacked-wheel-gcyiijx6/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   r)   ÚsetattrÚgetattr)ÚselfZ	real_namer%   Ztransr'   r(   r"   r"   r#   Ú__getattr__0   s    zTrans.__getattr__N)r   r    r!   Ú__doc__r.   r"   r"   r"   r#   r$   #   s   r$   c                 C   s
   t  | ¡S ©N)Ú_transr   ©Úmessager"   r"   r#   r   E   s    c                 C   s
   t  | ¡S r0   )r1   r   r2   r"   r"   r#   r   I   s    c                 C   s   t  | ||¡S r0   )r1   r   ©ÚsingularÚpluralÚnumberr"   r"   r#   r   M   s    c                 C   s   t  | |¡S r0   )r1   r   )Úcontextr3   r"   r"   r#   r   Q   s    c                 C   s   t  | |||¡S r0   )r1   r   ©r8   r5   r6   r7   r"   r"   r#   r   U   s    Nc                    st   t ˆtƒr$ˆˆd< tˆˆƒf ˆŽ}nLˆ ¡ ‰G ‡‡‡fdd„dˆƒ‰ t‡ fdd„ˆ ƒf ˆŽ}‡‡‡‡fdd„|_|S )Nr7   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 )Nr5   )Úbool©r-   ©Úkwargsr"   r#   Ú__bool__e   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)r-   Úvalues©r7   r"   r#   Ú_get_number_valueh   s    
þÿz8lazy_number.<locals>.NumberAwareString._get_number_valuec                    s   |ˆd< ˆ f ˆŽS ©Nr7   r"   )r-   Únumber_value)Úfuncr=   r"   r#   Ú
_translater   s    z1lazy_number.<locals>.NumberAwareString._translatec                    s,   |rˆ r|   |¡n|d }|  |¡j||ŽS )Nr   )rB   rF   Úformat)r-   Úargsr=   rD   rA   r"   r#   rG   v   s    z-lazy_number.<locals>.NumberAwareString.formatc                    sN   t |tƒrˆ r|  |¡}n|}|  |¡}z|| }W n tk
rH   Y nX |S r0   )Ú
isinstanceÚdictrB   rF   Ú	TypeError)r-   ÚrhsrD   Z
translatedrA   r"   r#   Ú__mod__z   s    
z.lazy_number.<locals>.NumberAwareString.__mod__N)r   r    r!   r>   rB   rF   rG   rM   r"   )rE   r=   r7   r"   r#   ÚNumberAwareStringd   s
   
rN   c                     s   ˆ ƒ S r0   r"   r<   )rN   r"   r#   Ú<lambda>‡   ó    zlazy_number.<locals>.<lambda>c                      s   t ˆ ˆˆˆffS r0   )Ú_lazy_number_unpickler"   )rE   r7   Úoriginal_kwargsÚresultclassr"   r#   rO   ˆ   rP   )rI   Úintr   ÚcopyÚ
__reduce__)rE   rS   r7   r=   Úproxyr"   )rN   rE   r=   r7   rR   rS   r#   Úlazy_number]   s    
#rX   c                 C   s   t | |fd|i|—ŽS rC   )rX   )rE   rS   r7   r=   r"   r"   r#   rQ   Œ   s    rQ   c                 C   s   t tt| ||d�S )Nr4   )rX   r   Ústrr4   r"   r"   r#   r   �   s    c                 C   s   t tt| |||d�S )Nr9   )rX   r   rY   r9   r"   r"   r#   r   ”   s    c                 C   s
   t  | ¡S r0   )r1   r	   )Úlanguager"   r"   r#   r	   ˜   s    c                   C   s   t  ¡ S r0   )r1   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 r0   )rZ   r
   )r-   rZ   r
   r"   r"   r#   Ú__init__¡   s    zoverride.__init__c                 C   s(   t ƒ | _| jd k	rt| jƒ ntƒ  d S r0   )r   Úold_languagerZ   r	   r   r;   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 r0   )r\   r   r
   r	   )r-   Úexc_typeÚ	exc_valueÚ	tracebackr"   r"   r#   Ú__exit__¬   s
    
zoverride.__exit__N)F)r   r    r!   r[   r]   ra   r"   r"   r"   r#   r       s   
c                   C   s   t  ¡ S r0   )r1   r   r"   r"   r"   r#   r   µ   s    c                   C   s   t  ¡ S r0   )r1   r   r"   r"   r"   r#   r   ¹   s    c                 C   s
   t  | ¡S r0   )r1   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   s|   |   ¡  d¡\}}}|s4| dd…   ¡ | dd…  S | d¡\}}}t|ƒdkrX| ¡ n| ¡ }|rp|d| 7 }|d | S )z8Turn a language name (en-us) into a locale name (en_US).rd   Né   é   rc   )rg   Ú	partitionÚlenÚtitleÚupper)rZ   Úlangrc   ZcountryÚtailr"   r"   r#   r   Ê   s    Fc                 C   s   t  | |¡S r0   )r1   r   )ÚrequestÚ
check_pathr"   r"   r#   r   Ú   s    c                 C   s
   t  | ¡S r0   )r1   Úget_language_from_path)Úpathr"   r"   r#   rt   Þ   s    rt   )Ústrictc                C   s   t  | |¡S r0   )r1   Úget_supported_language_variant)rb   rv   r"   r"   r#   rw   â   s    rw   c                 K   s   ddl m} || f|ŽS )Nre   )r   )Útemplater   )Úsrcr=   r   r"   r"   r#   r   æ   s    c                   C   s   t  ¡ S r0   )r1   r   r"   r"   r"   r#   r   ë   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Únamerd   zUnknown language code %s.z Unknown language code %s and %s.Zname_translated)Zdjango.conf.localerz   r   r?   Úsplitr   )rb   rz   Z	lang_infoÚinfoZgeneric_lang_coder"   r"   r#   r   ï   s"    z\s*\n\s*c                 C   s   t  d|  ¡ ¡S )Nú )Útrim_whitespace_reÚsubÚstrip)Úsr"   r"   r#   Útrim_whitespace  s    r„   c                 C   s"   t t| d ƒjtdƒtd�ƒd S )Nre   Ú0)Úrounding)rT   r   Úquantizer   )Úvaluer"   r"   r#   Úround_away_from_one  s    r‰   )N)N)N)F)/r/   Ú
contextlibr   Údecimalr   r   Zdjango.utils.autoreloadr   r   Zdjango.utils.functionalr   Zdjango.utils.regex_helperr   Ú__all__ÚSyntaxWarningr   r$   r1   r   r   r   r   r   rY   r   r   rX   rQ   r   r   r	   r
   r   r   r   r   r   r   r   rt   rw   r   r   r   r€   r„   r‰   r"   r"   r"   r#   Ú<module>   sv                ø


/

	
