
    h<#                         S SK r S SKrS SKrS SKJr  S SKJr  S SKJr  S SK	J
r
JrJr  S SKJrJr  S SKJr  S SKJr  S S	KJr  S S
KJrJr  S SKJr  S SKJr  SrS rS rS r  " S S\5      r! " S S\!5      r"g)    N)Path)apps)settings)HttpResponseHttpResponseRedirectJsonResponse)ContextEngine)translate_url
get_format)url_has_allowed_host_and_scheme)check_for_languageget_language)DjangoTranslation)Viewlanguagec                 @    [        [        5      R                  S-  U -  $ )z
Return a path to a builtin template.

Avoid calling this function at the module level or in a class-definition
because __file__ may not exist, e.g. in frozen environments.
	templates)r   __file__parent)names    C/var/www/html/env/lib/python3.13/site-packages/django/views/i18n.pybuiltin_template_pathr      s     >  ;.55    c                    U R                   R                  SU R                  R                  S5      5      nU(       d  U R                  S5      (       aw  [	        UU R                  5       1U R                  5       S9(       dJ  U R                  R                  S5      n[	        UU R                  5       1U R                  5       S9(       d  SnU(       a  [        U5      O[        SS9nU R                  S:X  a  U R                   R                  [        5      nU(       a  [        U5      (       a  U(       a  [        X5      nXA:w  a  [        U5      nUR                  [        R                   U[        R"                  [        R$                  [        R&                  [        R(                  [        R*                  [        R,                  S	9  U$ )
a  
Redirect to a given URL while setting the chosen language in the session
(if enabled) and in a cookie. The URL and the language code need to be
specified in the request parameters.

Since this view changes how the user will see the rest of the site, it must
only be accessed as a POST request. If called as a GET request, it will
redirect to the page in the request (the 'next' parameter) without changing
any state.
nextz	text/html)urlallowed_hostsrequire_httpsHTTP_REFERER/   )statusPOST)max_agepathdomainsecurehttponlysamesite)r%   getGETacceptsr   get_host	is_secureMETAr   r   methodLANGUAGE_QUERY_PARAMETERr   r   
set_cookier   LANGUAGE_COOKIE_NAMELANGUAGE_COOKIE_AGELANGUAGE_COOKIE_PATHLANGUAGE_COOKIE_DOMAINLANGUAGE_COOKIE_SECURELANGUAGE_COOKIE_HTTPONLYLANGUAGE_COOKIE_SAMESITE)requestnext_urlresponse	lang_code
next_transs        r   set_languagerA      s^    ||(?@HGOOK00-'')*'')
 <<##N3."++-.!++-

 H19#H-|SV?WH~~LL$$%=>	+I66*8?
)3J?H-- 44226666!::!::   	 Or   c                  H    Sn U  Vs0 s H  o[        U5      _M     sn$ s  snf )z5Return all formats strings required for i18n to work.)DATE_FORMATDATETIME_FORMATTIME_FORMATYEAR_MONTH_FORMATMONTH_DAY_FORMATSHORT_DATE_FORMATSHORT_DATETIME_FORMATFIRST_DAY_OF_WEEKDECIMAL_SEPARATORTHOUSAND_SEPARATORNUMBER_GROUPINGDATE_INPUT_FORMATSTIME_INPUT_FORMATSDATETIME_INPUT_FORMATSr   )FORMAT_SETTINGSattrs     r   get_formatsrS   M   s+    O  0??t*T""???s   c                   d    \ rS rSrSrSrSrS rS r\	S 5       r
\	S 5       rS	 rS
 rS rS rSrg)JavaScriptCatalogb   a  
Return the selected language catalog as a JavaScript library.

Receive the list of packages to check for translations in the `packages`
kwarg either from the extra dictionary passed to the path() function or as
a plus-sign delimited string from the request. Default is 'django.conf'.

You can override the gettext domain for this view, but usually you don't
want to do that as JavaScript messages go to the djangojs domain. This
might be needed if you deliver your JavaScript source from Django templates.
djangojsNc                 R   [        5       nUR                  SU R                  5      nUR                  SS5      nU(       a  UR                  S5      OU R                  nU(       a  U R                  U5      OS n[        XEUS9U l        U R                  " S0 UD6nU R                  U5      $ )Nr(   packages +)r(   
localedirs )
r   r,   r(   splitrY   	get_pathsr   translationget_context_datarender_to_response)	selfr<   argskwargslocaler(   rY   pathscontexts	            r   r,   JavaScriptCatalog.getr   s    Hdkk2 ::j"-*28>>#&,4x($,VuU''1&1&&w//r   c                    [         R                  " 5        Vs0 s H  o"R                  U_M     nnU Vs/ s H  oDU;   d  M
  X4   PM     nn[        U5      [        U5      :  a6  U Vs/ s H  oDU;  d  M
  UPM     nn[	        SSR                  U5      -  5      eU Vs/ s H-  n[        R                  R                  UR                  S5      PM/     sn$ s  snf s  snf s  snf s  snf )Nz4Invalid package(s) provided to JavaScriptCatalog: %s,rf   )r   get_app_configsr   len
ValueErrorjoinosr'   )rc   rY   
app_configallowable_packagespapp_configsexcludedapps           r   r_   JavaScriptCatalog.get_paths~   s    :>:N:N:P
:PJOOZ':P 	 
 ,4
+3a<N7N!!8 	 
 {c(m+#+K8a8J/J8HKF((8$% 
 =HHKSSXXx0KHH

 L Is"   C	CC'	C4C4C#c                     [         R                  " SU R                  =(       d    S5      nU(       a  [        US   5      $ g)z`
Return the number of plurals for this catalog language, or 2 if no
plural string is available.
znplurals=\s*(\d+)rZ         )research_plural_stringint)rc   matchs     r   _num_pluralsJavaScriptCatalog._num_plurals   s4     		.0C0C0IrJuQx= r   c                    SU R                   R                  ;   aj  U R                   R                  S   R                  S5       H>  nUR                  S5      (       d  M  UR                  SS5      S   R	                  5       s  $    g)zt
Return the plural string (including nplurals) for this catalog language,
or None if no plural string is available.
rZ   
zPlural-Forms::ry   N)r`   _catalogr^   
startswithstrip)rc   lines     r   r}    JavaScriptCatalog._plural_string   sr     !!***((11"5;;DA???33::c1-a06688 B r   c                    U R                   nUbl  UR                  S5       Vs/ s H9  nUR                  5       R                  S5      (       d  M)  UR                  5       PM;     snS   R                  SS5      S   nU$ s  snf )N;zplural=r   =ry   )r}   r^   r   r   )rc   pluralels      r   
get_pluralJavaScriptCatalog.get_plural   s    $$ !,,s++B88:((3 
+ 	 sAq	"F
 s   (A>A>c                 T   0 n0 nU R                   n[        5       n UR                  R                  5        Hv  u  pVUS:X  d  XT;   a  M  [	        U[
        5      (       a  XbU'   O9[	        U[        5      (       a  Uu  pxXaR                  U0 5      U'   O[        U5      eUR                  U5        Mx     UR                  (       a  UR                  nOOM  U R                  n	UR                  5        H2  u  p[        U	5       Vs/ s H  oR                  US5      PM     snX*'   M4     U$ s  snf )NrZ   )r`   setr   items
isinstancestrtuple
setdefault	TypeErroradd	_fallbackr   ranger,   )rc   pdictcatalogr`   	seen_keyskeyvaluemsgidcntnum_pluralskvis                r   get_catalogJavaScriptCatalog.get_catalog   s   &&E	)2288:
"9 0c3''#(CLU++!$JE7<$$UB/4#C.(c" ; $$)33 " ''KKMDA05k0BC0B1%%2,0BCGJ " Ds   ?D%c                 V    U R                  5       [        5       U R                  5       S.$ )N)r   formatsr   )r   rS   r   )rc   re   s     r   ra   "JavaScriptCatalog.get_context_data   s'    '')"}oo'
 	
r   c                    S n[        S5      R                  SS9 n[        5       R                  UR	                  5       5      nS S S 5        US   (       a  U" [
        R                  " US   SSS95      OS US	'   U" [
        R                  " US
   SSS95      US'   [        WR                  [        U5      5      S5      $ ! , (       d  f       N= f)Nc                 &    U R                  SS5      $ )Nr   z
  )replace)ss    r   indent4JavaScriptCatalog.render_to_response.<locals>.indent   s    99T6**r   zi18n_catalog.jszutf-8)encodingr   Trz   )	sort_keysr   catalog_strr   formats_strz text/javascript; charset="utf-8")
r   openr
   from_stringreadjsondumpsr   renderr	   )rc   rh   response_kwargsr   fhtemplates         r   rb   $JavaScriptCatalog.render_to_response   s    	+ ##45::G:LPRx++BGGI6H M y! 4::gi0DKL 	
 "(JJwy)T!D"
 OOGG,-/Q
 	
 MLs   (C  
C)r`   )__name__
__module____qualname____firstlineno____doc__r(   rY   r,   r_   propertyr   r}   r   r   ra   rb   __static_attributes__r]   r   r   rU   rU   b   sZ    
 FH
0I    	 	6

r   rU   c                       \ rS rSrSrS rSrg)JSONCatalog   a  
Return the selected language catalog as a JSON object.

Receive the same parameters as JavaScriptCatalog and return a response
with a JSON object of the following format:

    {
        "catalog": {
            # Translations catalog
        },
        "formats": {
            # Language formats for date, time, etc.
        },
        "plural": '...'  # Expression for plural forms, or null.
    }
c                     [        U5      $ )N)r   )rc   rh   r   s      r   rb   JSONCatalog.render_to_response   s    G$$r   r]   N)r   r   r   r   r   rb   r   r]   r   r   r   r      s    "%r   r   )#r   rp   r{   pathlibr   django.appsr   django.confr   django.httpr   r   r   django.templater	   r
   django.urlsr   django.utils.formatsr   django.utils.httpr   django.utils.translationr   r   #django.utils.translation.trans_realr   django.views.genericr   r3   r   rA   rS   rU   r   r]   r   r   <module>r      se     	 	     H H + % + = E A %% 6,^@*C
 C
L%# %r   