U
    àåfP  ã                   @   sl   d dl mZ d dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ d dlmZ G dd	„ d	eƒZd
S )é    )Úsettings)Ú is_language_prefix_patterns_used)ÚHttpResponseRedirect)Úget_script_prefixÚis_valid_path)Útranslation)Úpatch_vary_headers)ÚMiddlewareMixinc                   @   s,   e Zd ZdZeZdd„ Zdd„ Zdd„ ZdS )	ÚLocaleMiddlewarezÞ
    Parse a request and decide what translation object to install in the
    current thread context. This allows pages to be dynamically translated to
    the language the user desires (if the language is available).
    c                 C   s.   zt  tj¡W S  tk
r(   tj Y S X dS )a‚  
        Return the fallback language for the current request based on the
        settings. If LANGUAGE_CODE is a variant not included in the supported
        languages, get_fallback_language() will try to fallback to a supported
        generic variant.

        Can be overridden to have a fallback language depending on the request,
        e.g. based on top level domain.
        N)r   Zget_supported_language_variantr   ÚLANGUAGE_CODEÚLookupError)ÚselfÚrequest© r   ú</tmp/pip-unpacked-wheel-_jot26k8/django/middleware/locale.pyÚget_fallback_language   s    
z&LocaleMiddleware.get_fallback_languagec                 C   sN   t |dtjƒ}t|ƒ\}}tj||d}|s6|  |¡}t |¡ t ¡ |_	d S )NÚurlconf)Ú
check_path)
Úgetattrr   ÚROOT_URLCONFr   r   Úget_language_from_requestr   ÚactivateÚget_languager   )r   r   r   Úi18n_patterns_usedÚ_Úlanguager   r   r   Úprocess_request"   s     ÿ

z LocaleMiddleware.process_requestc                 C   sø   t  ¡ }t  |j¡}t  |¡}t|dtjƒ}t|ƒ\}}|j	dkrÔ|sÔ|rÔ|sR|rÔd||jf }	t
|	|ƒ}
|
 oŽtjoŽ|	 d¡ oŽt
d|	 |ƒ}|
s˜|rÔtƒ }|j|d |d||f d¡}|  |¡}t|d	ƒ |S |rÜ|sæt|d
ƒ |j d|¡ |S )Nr   i”  z/%s%sú/z%s/)Zforce_append_slashz%s%s/é   )úAccept-LanguageÚCookie)r   zContent-Language)r   r   Zget_language_from_pathZ	path_infor   r   r   r   r   Ústatus_coder   ZAPPEND_SLASHÚendswithr   Zget_full_pathÚreplaceÚresponse_redirect_classr   ÚheadersÚ
setdefault)r   r   Úresponser   Zlanguage_from_pathZlanguage_from_requestr   r   Zprefixed_default_languageZlanguage_pathZ
path_validZpath_needs_slashZscript_prefixZlanguage_urlÚredirectr   r   r   Úprocess_response.   sT    
ýÿþýüü

ÿýÿ 
 þ


z!LocaleMiddleware.process_responseN)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r$   r   r   r)   r   r   r   r   r
   
   s
   r
   N)Zdjango.confr   Zdjango.conf.urls.i18nr   Zdjango.httpr   Zdjango.urlsr   r   Zdjango.utilsr   Zdjango.utils.cacher   Zdjango.utils.deprecationr	   r
   r   r   r   r   Ú<module>   s   