
    bi
                        U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddlm
Z ddlmZ  e	e      Zdi iZd	ed
<    ej$                  dej&                        Zd ZddZddZddZy)z)Server functions for loading translations    )annotationsN)defaultdict)dirname)join)Anynbjszdict[str, Any]TRANSLATIONS_CACHEzW
(?P<lang>[a-zA-Z]{1,8}(-[a-zA-Z]{1,8})?)
(\s*;\s*q\s*=\s*
  (?P<qvalue>[01](.\d+)?)
)?c                   t        t              }| j                  d      D ]x  }t        j	                  |j                               }|s)|j                  dd      \  }}|j                  dd      }|dn
t        |      }|dk(  re||   j                  |       z g }t        |j                               D ]  \  }}|j                  t        |             ! |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-_g      ?r   )r   listsplit_accept_lang_rematchstripgroupreplacefloatappendsorteditemsextend)	accept_langby_qpartmr   r   resr   langss	            W/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/jupyter_server/i18n/__init__.pyparse_accept_lang_headerr#   "   s     tD!!#& 
"!!$**,/wwvx0f||C%E&MQ;VD!
" C4::<( "5

6%=!"J    c                   	 t        t        t        | dd      d      }|5  t        j                  |      }ddd       d   |   S # t        $ r*}|j                  t        j
                  k7  r i cY d}~S d}~ww xY w# 1 sw Y   GxY w)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datas        r"   r0   r0   ;   s    x=+FQXY 
 yy|v&&  77ell"	
 s(   A A=	A:A5/A:5A:=Bc                d    t         |   }	 ||    S # t        $ r t        | |      }||| <   |cY S w xY w)zFLoad translations for one language, using in-memory cache if available)r	   KeyErrorr0   )r1   r2   domain_cacher5   s       r"   cached_loadr9   I   sF    %f-LH%% Hf%!%Xs    //c                    t        |       }i }|D ]3  }|dk(  r|j                          |j                  t        ||             5 ddi|d<   |||idS )zjCombine translations for multiple accepted languages.

    Returns data re-packaged in jed1.x format.
    enr2   r    )r2   r(   )r#   clearupdater9   )accept_languager2   
lang_codescombinedr1   s        r"   combine_translationsrB   T   sg    
 */:J!H ;tNNOOK&9:; f%HRLfh-?@@r$   )r   )__doc__
__future__r   r-   r/   recollectionsr   os.pathr   r   r*   typingr   __file__r+   r	   __annotations__compileVERBOSEr   r#   r0   r9   rB    r$   r"   <module>rN      sp    / "   	 #  ! 8 '-b\ N 1 "**
 JJ2'Ar$   