o
    i                     @   s   d Z ddlmZ ddlZddlZddlmZmZ ddl	Z	ee
Zdi iZe	de	jZdd Zdd	d
ZdddZdddZdS )z*Server functions for loading translations
    )defaultdictN)dirnamejoinnbjszW
(?P<lang>[a-zA-Z]{1,8}(-[a-zA-Z]{1,8})?)
(\s*;\s*q\s*=\s*
  (?P<qvalue>[01](.\d+)?)
)?c           	      C   s   t t}| dD ]G}t| }|sq	|dd\}}|dd}|du r*d}nt|}|dkr3q	|| 	| d|v rP|dd }|d	krP|| 	| q	g }t
| D ]\}}|t
| qY|S )
zParses the 'Accept-Language' HTTP header.

    Returns a list of language codes in *ascending* order of preference
    (with the most preferred language last).
    ,langqvalue-_Ng      ?r   en)r   listsplit_accept_lang_rematchstripgroupreplacefloatappendsorteditemsextend)	accept_langby_qpartmr   r   shortreslangs r   R/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/nbclassic/i18n/__init__.pyparse_accept_lang_header   s,   r!   c              
   C   s   zt tt| dddd}W n ty( } z|jtjkr i W  Y d}~S d}~ww | t|}W d   n1 s;w   Y  |d | S )z(Load translations from an nbjs.json fileLC_MESSAGESz	nbjs.jsonzutf-8)encodingNlocale_data)openpjoinI18N_DIROSErrorerrnoENOENTjsonload)languagedomainfedatar   r   r    r,   9   s   
r,   c                 C   s<   t | }z||  W S  ty   t| |}||| < | Y S w )zFLoad translations for one language, using in-memory cache if available)TRANSLATIONS_CACHEKeyErrorr,   )r-   r.   domain_cacher1   r   r   r    cached_loadG   s   

r5   c                 C   sR   t | }i }|D ]}|dkr|  q|t|| qddi|d< |||idS )zjCombine translations for multiple accepted languages.

    Returns data re-packaged in jed1.x format.
    r   r.   r    )r.   r$   )r!   clearupdater5   )accept_languager.   
lang_codescombinedr-   r   r   r    combine_translationsQ   s   
r<   )r   )__doc__collectionsr   r)   r+   os.pathr   r   r&   re__file__r'   r2   compileVERBOSEr   r!   r,   r5   r<   r   r   r   r    <module>   s    


