o
    l`dk                     @   s  d dl 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 d dlmZmZ ed	d
 Zd-ddZd-ddZd-ddZdd Zd-ddZd-ddZd-ddZd-ddZd-ddZd-ddZd.dd Zd!d" Zd-d#d$Zd-d%d&Z d-d'd(Z!d)d* Z"d+d, Z#dS )/    N)contextmanager)settings)LocalePrefixPatternget_resolver)translation)gettext_lazy)LanguageError)get_cms_settingget_site_idc                 c   s.    t  }|| krt|  d V  t| d S N)get_current_languager   activate)new_langold_lang r   M/var/www/mitschrieb_seite/venv/lib/python3.10/site-packages/cms/utils/i18n.pyforce_language   s   
r   c                 C   sp   t | } td| }|s6g }tddi }tjD ]\}}|t|d}|| || q|td| < |S )N	LANGUAGESdefaultcodename)r
   r	   getr   r   _updateappend)site_idresultdefaultsr   r   langr   r   r   get_languages   s   
r    c                 C   s`   ddl m} | jdd }|d u r| j}t||dr|S t| dd }t||dr+|S t|dS )Nr   )get_current_sitelanguager   LANGUAGE_CODE)	cms.utilsr!   GETr   pkis_valid_site_languagegetattrget_default_language_for_site)requestr   r!   r"   r   r   r   get_site_language_from_request$   s   
r,   c                 C   s^   | sdS t |}| |v r| S |D ]}| dd |kr|  S |dd | kr,|  S q| S )zC
    Returns language code while making sure it's in LANGUAGES
    N-r   )get_language_listsplit)language_coder   	languagesr   r   r   r   get_language_code6   s   r2   c                  C   s    t jdtdd t } 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
    zRget_current_language() is deprecated; use django.utils.translation.get_language().   )
stacklevel)warningswarnDeprecationWarningr   get_languager2   )r0   r   r   r   r   J   s   r   c                 C   s    t jrdd t| D S t jgS )z<
    :return: returns a list of iso2codes for this site
    c                 S   s   g | ]}|d  qS )r   r   .0r   r   r   r   
<listcomp>^   s    z%get_language_list.<locals>.<listcomp>)r   USE_I18Nr    r$   r#   r   r   r   r.   Z   s   r.   c                 C      dd t | D S )zf
    :return: returns an list of tuples like the old CMS_LANGUAGES or the LANGUAGES for this site
    c                 S   s   g | ]
}|d  |d fqS r   r   r9   r   r   r   r;   f   s    z&get_language_tuple.<locals>.<listcomp>)r    r#   r   r   r   get_language_tupleb      r>   c                 C      t t| S )z3
    :return: returns an dict of cms languages
    )dictr>   r#   r   r   r   get_language_dicti      rB   c                 C   r=   )zF
    :return: list of iso2codes of public languages for this site
    c                 S   s    g | ]}| d dr|d qS )publicTr   )r   r9   r   r   r   r;   t   s    
z(get_public_languages.<locals>.<listcomp>)get_language_objectsr#   r   r   r   get_public_languagesp   r?   rF   c                 C   s2   t |D ]}|d t| kr|  S qtd|  )zl
    :param language_code: RFC5646 language code
    :return: the language object filled up by defaults
    r   zLanguage not found: %s)r    r2   r   )r0   r   r"   r   r   r   get_language_objectx   s
   rG   c                 C   r@   )zJ
    returns list of all language objects filled up by default values
    )listr    r#   r   r   r   rE      rC   rE   c                 C   sB   | st tj} t|}| |v r| S | 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
    r-   r   )r2   r   r$   r.   r/   )r0   r   r1   r   r   r   get_default_language   s   
rI   c                 C   s   t | d S )Nr   r.   r#   r   r   r   r*         r*   c                 C   s:   zt | |} W n ty   t|d } Y nw | dg S )zE
    returns a list of fallback languages for the given language
    r   	fallbacks)rG   r   r    r   r"   r   r   r   r   get_fallback_languages   s   rN   c                 C   s   t | |} | ddS )z{
    returns if you should redirect on language fallback
    :param language:
    :param site_id:
    :return: Boolean
    redirect_on_fallbackTrG   r   rM   r   r   r   get_redirect_on_fallback      
rQ   c                 C   s   t | |}|ddS )z
    Should untranslated pages in this language be hidden?
    :param language:
    :param site_id:
    :return: A Boolean
    hide_untranslatedTrP   )r"   r   objr   r   r   rS      rR   rS   c                  C   s:   t djD ]} t| d| }t|tr|jdkr dS qdS )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_patternrU   r   r   r    is_language_prefix_patterns_used   s   

r[   c                 C   s   | t |v S r   rJ   rM   r   r   r   r(      rK   r(   r   )NN)$r5   
contextlibr   django.confr   django.urlsr   r   django.utilsr   django.utils.translationr   r   cms.exceptionsr   cms.utils.confr	   r
   r   r    r,   r2   r   r.   r>   rB   rF   rG   rE   rI   r*   rN   rQ   rS   r[   r(   r   r   r   r   <module>   s6    













