
    Bh/                         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 d dlmZmZ ed        Zdd
ZddZddZd ZddZddZddZddZddZddZddZd ZddZddZddZ d Z!d Z"y	)    )contextmanager)settings)LocalePrefixPatternget_resolver)translation)gettext_lazy)LanguageError)get_cms_settingget_site_idc              #      K   t               }|| k7  rt        j                  |        d  t        j                  |       y wN)get_current_languager   activate)new_langold_langs     >/home/dcms/DCMS/lib/python3.12/site-packages/cms/utils/i18n.pyforce_languager      s5     #%H8X&	"s   ?ANc                 :   t        |       } t        d      j                  |       }|ssg }t        d      j                  di       }t        j                  D ]5  \  }}|t        |      d}|j                  |       |j                  |       7 |t        d      | <   |S )N	LANGUAGESdefault)codename)r   r
   getr   r   _updateappend)site_idresultdefaultsr   r   langs         r   get_languagesr!      s    '"G[)--g6F";/33IrB",, 	 JD$ !D'2DKK!MM$	  17$W-M    c                     ddl m} | |       j                  }| j                  j	                  dd       }t        ||      r|S t        | dd       }t        ||      r|S t        |      S )Nr   )get_current_sitelanguager   LANGUAGE_CODE)	cms.utilsr$   pkGETr   is_valid_site_languagegetattrget_default_language_for_site)requestr   r$   r%   s       r   get_site_language_from_requestr/   #   si    *"$'' {{z40Hh8 w6Hh8 )99r"   c                     | syt        |      }| |v r| S |D ]8  }| j                  d      d   |k(  r|c S |j                  d      d   | k(  s6|c S  | S )zC
    Returns language code while making sure it's in LANGUAGES
    N-r   )get_language_listsplit)language_coder   	languagesr    s       r   get_language_coder6   7   sp     !'*I	! s#A&$.K::c?1.K	
 r"   c                  @    t        j                         } t        |       S )z
    Returns the currently active language

    It's a replacement for Django's translation.get_language() to make sure the
    LANGUAGE_CODE will be found in LANGUAGES.
    Overcomes this issue: https://code.djangoproject.com/ticket/9340
    )r   get_languager6   )r4   s    r   r   r   K   s      ,,.M]++r"   c                     t         j                  rt        |       D cg c]  }|d   	 c}S t         j                  gS c c}w )z<
    :return: returns a list of iso2codes for this site
    r   )r   USE_I18Nr!   r'   r   r    s     r   r2   r2   W   s>     BJARARmG&<=dT&\= +(()+=s   >c                 N    t        |       D cg c]  }|d   |d   f c}S c c}w )zf
    :return: returns an list of tuples like the old CMS_LANGUAGES or the LANGUAGES for this site
    r   r   )r!   r;   s     r   get_language_tupler=   _   s+     6C75KLTT&\4<(LLLs   "c                 *    t        t        |             S )z3
    :return: returns an dict of cms languages
    )dictr=   r&   s    r   get_language_dictr@   f   s     "7+,,r"   c                 h    t        |       D cg c]  }|j                  dd      r|d    c}S c c}w )zF
    :return: list of iso2codes of public languages for this site
    publicTr   )get_language_objectsr   r;   s     r   get_public_languagesrD   m   s:     &:'%B )Txx$' L ) ) )s   /c                 h    t        |      D ]  }|d   t        |       k(  s|c S  t        d| z        )zl
    :param language_code: RFC5646 language code
    :return: the language object filled up by defaults
    r   zLanguage not found: %s)r!   r6   r	   )r4   r   r%   s      r   get_language_objectrF   u   sC    
 "'* F0??O 0=@
AAr"   c                 *    t        t        |             S )zJ
    returns list of all language objects filled up by default values
    )listr!   r&   s    r   rC   rC      s     g&''r"   c                     | st        t        j                        } t        |      }| |v r| S | j	                  d      d   } | |vrt        j                  S | S )z
    Returns default language depending on settings.LANGUAGE_CODE merged with
    best match from get_cms_setting('LANGUAGES')

    Returns: language_code
    r1   r   )r6   r   r'   r2   r3   )r4   r   r5   s      r   get_default_languagerJ      sb     )(*@*@A!'*I 	! "'',Q/MI%%%%r"   c                     t        |       d   S )Nr   r2   r&   s    r   r-   r-      s    W%a((r"   c                 z    	 t        | |      } | j                  dg       S # t        $ r t        |      d   } Y +w xY w)zE
    returns a list of fallback languages for the given language
    r   	fallbacks)rF   r	   r!   r   r%   r   s     r   get_fallback_languagesrP      sF    -&x9 <<R((  - )!,-s     ::c                 >    t        | |      } | j                  dd      S )z{
    returns if you should redirect on language fallback
    :param language:
    :param site_id:
    :return: Boolean
    redirect_on_fallbackTrF   r   rO   s     r   get_redirect_on_fallbackrT      s"     #8W5H<<.55r"   c                 >    t        | |      }|j                  dd      S )z
    Should untranslated pages in this language be hidden?
    :param language:
    :param site_id:
    :return: A Boolean
    hide_untranslatedTrS   )r%   r   objs      r   rV   rV      s"     h
0C77&--r"   c                      t        d      j                  D ]1  } t        | d|       }t        |t              s!|j
                  dk7  s1 y y)z
    Returns `True` if the `LocaleRegexURLResolver` or `LocalePrefixPattern`
    is used at root level of the urlpatterns and doesn't have empty
    language_prefix, else it returns `False`.
    Npattern TF)r   url_patternsr,   
isinstancer   language_prefix)url_patternrY   s     r    is_language_prefix_patterns_usedr_      sM     $D)66 +y+>g23&&",	
 r"   c                     | t        |      v S r   rL   rO   s     r   r+   r+      s    (111r"   r   )NN)#
contextlibr   django.confr   django.urlsr   r   django.utilsr   django.utils.translationr   r   cms.exceptionsr	   cms.utils.confr
   r   r   r!   r/   r6   r   r2   r=   r@   rD   rF   rC   rJ   r-   rP   rT   rV   r_   r+    r"   r   <module>ri      s    %   9 $ 6 ( 7 # #:((	,+M-)B(2))6.2r"   