
    ^h                         S r SSKJr  SSKrSSKrSSKJrJr  SSK	r	\" \
5      rS0 0r\	R                  " S\	R                  5      rS rSS jrSS	 jrSS
 jrg)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                 :   [        [        5      nU R                  S5       H  n[        R	                  UR                  5       5      nU(       d  M/  UR                  SS5      u  pEUR                  SS5      nUc  SnO[        U5      nUS:X  a  Mn  X   R                  U5        SU;   d  M  UR                  S5      S   nUS:w  d  M  X   R                  U5        M     / n[        UR                  5       5       H  u  pXUR                  [        U5      5        M!     U$ )	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   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langss	            Q/home/james-whalen/.local/lib/python3.13/site-packages/nbclassic/i18n/__init__.pyparse_accept_lang_headerr"      s     tD!!#&!!$**,/wwvx0||C%>F6]FQ;D!$;JJsOA&E}##E*# '& C

-

6%=! .J    c                     [        [        [        U SS5      SS9nU   [        R                  " U5      nSSS5        WS   U   $ ! [         a+  nUR                  [        R
                  :w  a  e 0 s SnA$ SnAff = f! , (       d  f       NN= f)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!   r/   r/   9   sz    x=+F$& 
yy| 
v&&  77ell"	
 
s(   A A=
A: A5/A:5A:=
Bc                 `    [         U   n X    $ ! [         a    [        X5      nX2U '   Us $ f = f)zFLoad translations for one language, using in-memory cache if available)TRANSLATIONS_CACHEKeyErrorr/   )r0   r1   domain_cacher4   s       r!   cached_loadr9   G   s@    %f-L%% H%!%Xs    --c                     [        U 5      n0 nU H5  nUS:X  a  UR                  5         M  UR                  [        XA5      5        M7     SS0US'   UX0S.$ )zbCombine translations for multiple accepted languages.

Returns data re-packaged in jed1.x format.
r   r1   r    )r1   r'   )r"   clearupdater9   )accept_languager1   
lang_codescombinedr0   s        r!   combine_translationsrA   Q   sg    
 */:JHtNNOOK9:  V$HRL 
 r#   )r   )__doc__collectionsr   r,   r.   os.pathr   r   r)   re__file__r*   r6   compileVERBOSEr   r"   r/   r9   rA    r#   r!   <module>rJ      sa    #   * 	8 b\  **  
zz	>'r#   