
    ^hY              
         S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKJr  SSKJrJr  SSKrSSKJr  \	R(                  S:  a  SSKJr  OSSKJr  S	rS
rSr\R6                  " 5       S   =(       d    \rSrSrSrSr \	R(                  SS S:*  r!Sr"Sr#Sr$Sr%\$\$\$\$\#\#\$SSS.	r&\S'S j5       r'S(S jr(S)S jr)S)S jr*S*S jr+\4S+S jjr,      S,S jr-S-S  jr.\4S.S! jjr/S/S" jr0 " S# S$5      r1 " S% S&5      r2g)0z^
Localization utilities to find available language packs and packages with
localization data.
    )annotationsN)	lru_cache)AnyPattern)parse)   
   )entry_pointszjupyterlab.languagepackzjupyterlab.localeenlocaleLC_MESSAGES
jupyterlabz(@jupyterlab/translation-extension:plugin   )r      ach_UGschemasettingsz jupyter.lab.internationalizationmenutoolbar)	zproperties/.*/titlezproperties/.*/descriptionz"definitions/.*/properties/.*/titlez(definitions/.*/properties/.*/descriptiontitledescriptionz jupyter\.lab\.setting-icon-labelzjupyter\.lab\.menus/.*/labelzjupyter\.lab\.toolbars/.*/labelc                     [         R                  5        V Vs0 s H"  u  p[        R                  " SU -   S-   5      U_M$     snn $ s  snn f )N^/$)DEFAULT_SCHEMA_SELECTORSitemsrecompile)patterncontexts     ]/home/james-whalen/.local/lib/python3.13/site-packages/jupyterlab_server/translation_utils.py_get_default_schema_selectorsr"   B   sL     !9 > > @ @G 	

4'>C'('1 @  s   )Ac                    0 [        5       EU R                  [        0 5      R                  S/ 5       Vs0 s H$  n[        R                  " SU-   S-   5      [
        _M&     snE$ s  snf )N	selectorsr   r   )r"   get_lab_i18n_configr   r   _default_schema_context)r   selectors     r!   _prepare_schema_patternsr)   J   so    
'
) #JJ'7<@@bQ
Q JJth,-/FFQ
 
s   +A#c                 L   0 n / n[        [        S9 HG  n [        R                  R	                  UR                  5       R                  5      XR                  '   MI     SR                  U5      nX4$ ! [         a(    UR                  [        R                  " 5       5         M  f = f)z
Get available installed language pack locales.

Returns
-------
tuple
    A tuple, where the first item is the result and the second item any
    error messages.
group
)r
   JUPYTERLAB_LANGUAGEPACK_ENTRYospathdirnameload__file__name	Exceptionappend	traceback
format_excjoindatamessagesentry_pointmessages       r!   $_get_installed_language_pack_localesr?   V   s     DH#*GH	4%'WW__[5E5E5G5P5P%QD!!" I ii!G=	  	4OOI0023	4   AA11.B#"B#c                 L   0 n / n[        [        S9 HG  n [        R                  R	                  UR                  5       R                  5      XR                  '   MI     SR                  U5      nX4$ ! [         a(    UR                  [        R                  " 5       5         M  f = f)z
Get available installed packages containing locale information.

Returns
-------
tuple
    A tuple, where the first item is the result and the second item any
    error messages. The value for the key points to the root location
    the package.
r+   r-   )r
   JUPYTERLAB_LOCALE_ENTRYr/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   s       r!   _get_installed_package_localesrC   l   s     DH#*AB	4%'WW__[5E5E5G5P5P%QD!!" C ii!G=	  	4OOI0023	4r@   c                    U S;   a  gSn [         R                  R                  U 5        SnU$ ! [         R                  R                  [
        4 a     U$ f = f)a  
Check if a `locale_` value is valid.

Parameters
----------
locale_: str
    Language locale code.

Notes
-----
A valid locale is in the form language (See ISO-639 standard) and an
optional territory (See ISO-3166 standard).

Examples of valid locales:
- English: DEFAULT_LOCALE
- Australian English: "en_AU"
- Portuguese: "pt"
- Brazilian Portuguese: "pt_BR"

Examples of invalid locales:
- Australian Spanish: "es_AU"
- Brazilian German: "de_BR"
>   no_NOTF)babelLocaler   coreUnknownLocaleError
ValueError)locale_valids     r!   is_valid_localerM      sf    2    E7#
 L	 JJ)):6 L	s   !. $AAc                @   [        U 5      (       a  U O[        n [        U5      (       a  UO[        n [        R                  R	                  U 5      nUR                  U5      nU(       a  US   R                  5       USS -   nU$ ! [        R                   a    Un N:f = f)aP  
Return the language name to use with a `display_locale` for a given language locale.

Parameters
----------
locale_: str
    The language name to use.
display_locale: str, optional
    The language to display the `locale_`.

Returns
-------
str
    Localized `locale_` and capitalized language name using `display_locale` as language.
r      N)rM   DEFAULT_LOCALErF   rG   r   get_display_namerI   upper)rK   display_localelocdisplay_names       r!   rQ   rQ      s      )11g~G'6~'F'F^NN&ll  )++N; #A,,.ab1AA	 ## &%&s   0B BBc                   U nU R                  S0 5      nUR                  SS5      nUR                  SS5      nUR                  S0 5      nUR                  SS5      nUR                  SS5      nU(       aH  U(       aA  X:X  a<  [        U5      n[        U5      nXt:  a!  U R                  5       nUR                  U5        U$ )a  
Merge language pack data with locale data bundled in packages.

Parameters
----------
language_pack_locale_data: dict
    The dictionary with language pack locale data.
package_locale_data: dict
    The dictionary with package locale data.

Returns
-------
dict
    Merged locale data.
 versionNdomainNone)r%   parse_versioncopyupdate)	language_pack_locale_datapackage_locale_dataresultpackage_lp_metadatapackage_lp_versionpackage_lp_domainpackage_metadatapackage_versionpackage_domains	            r!   merge_locale_datarg      s    $ 'F377B?,00DA+//$?*..r26&**9d;O%))(F;No.2U'8*+=>/.335FMM-.M    c           
     2   [        5       u  p0 nUR                  S5      nU(       Gd\  UR                  5        GHG  u  pV0 n [        R                  R                  U[        5      n[        R                  " U5       V	s0 s HW  n	[        R                  R                  [        R                  R                  X5      5      (       d  MF  U	R                  5       U	_MY     nn	U R                  5       U;   d  M  [        R                  R                  WXpR                  5          [        U S35      n
[        R                  R                  U
5      (       d  GM   [!        U
SS9 n["        R$                  " U5      X5'   SSS5        GMJ     USR                  U5      4$ s  sn	f ! [         a'    UR                  [        R                  " 5       5         Nf = f! , (       d  f       GM  = f! [         a)    UR                  [        R                  " 5       5         GM  f = f)a  
Get all jupyterlab extensions installed that contain locale data.

Returns
-------
tuple
    A tuple in the form `(locale_data_dict, message)`,
    where the `locale_data_dict` is an ordered list
    of available language packs:
        >>> {"package-name": locale_data, ...}

Examples
--------
- `entry_points={"jupyterlab.locale": "package-name = package_module"}`
- `entry_points={"jupyterlab.locale": "jupyterlab-git = jupyterlab_git"}`
r-   .jsonutf-8encodingN)rC   splitr   r/   r0   r9   
LOCALE_DIRlistdirisdirlowerr5   r6   r7   r8   LC_MESSAGES_DIRisfileopenjsonr2   )rK   found_package_localesr>   packages_locale_datar<   package_namepackage_root_pathlocaleslocale_pathrT   locale_json_pathfhs               r!   get_installed_packages_localer      s   " &D%E"}}T"H/D/J/J/L+LG	8 ggll+<jI  "zz+66ww}}RWW\\+%CD %CIIK$6   }}')#%77<<MMO,##nE*	$  77>>"233@!"2WEAE20> FE- 0M6  8!444-
  8	 4 4 678 FE$ @ 	(<(<(>??@s[   <F=AFFF
G#G7G#F.GG
G 	G# G##.HHc                |   [        5       u  p0 nUR                  S5      nU(       Gd  / n/ n/ nU H7  n[        U5      (       a  UR                  U5        M&  UR                  U5        M9     X;   a  U O[        n[        U [
        :w  a  [        [        U5      OS[        [        [        5      S.0nU H  n[        Xx5      [        Xw5      S.X7'   M     U(       aS  [
        U;   a-  UR                  [
        5        SU [
        :w  a  SOSS.U[
        '   U(       a  UR                  SU S35        USR                  U5      4$ )a2  
Return the available language packs installed in the system.

The returned information contains the languages displayed in the current
locale.

Parameters
----------
display_locale: str, optional
    Default is DEFAULT_LOCALE.

Returns
-------
tuple
    A tuple in the form `(locale_data_dict, message)`.
r-   Default)displayName
nativeNamezPseudo-languagezto translate the UIz#The following locales are invalid: !)	r?   rn   rM   r6   rP   PSEUDO_LANGUAGErQ   remover9   )	rS   found_localesr>   r{   r<   invalid_localesvalid_localesrK   display_locale_s	            r!   get_language_packsr   &  s:   " BCMG}}T"H$Gw''$$W-&&w/	 % -;,K.Q_ &8 %^_E".~~N	
 %G/I.w@ G % /1&&7#4 *_< ..,( "EoEVVW XYDIIh'''rh   c                   [        5       u  p[        U 5      u  p20 nUR                  S5      nU(       d  U [        :X  d  [	        U 5      (       a  X;   a  X   n[
        R                  " USS9 H  u  pxn	U	 H  n
U
R                  S5      (       d  M  U
R                  SS5      n[
        R                  R                  Xz5      n [        USS9 n[        R                  " U5      nSSS5        X;   a  X;   n[%        WU5      nWXK'   M     M     UR'                  5        H  u  nnX;  d  M  UXK'   M     USR                  U5      4$ ! , (       d  f       Ng= f! [         a'    UR                  [         R"                  " 5       5         Nf = f)	aw  
Get a language pack for a given `locale_` and update with any installed
package locales.

Returns
-------
tuple
    A tuple in the form `(locale_data_dict, message)`.

Notes
-----
We call `_get_installed_language_pack_locales` via a subprocess to
guarantee the results represent the most up-to-date entry point
information, which seems to be defined on interpreter startup.
r-   F)topdownrj   rW   rk   rl   N)r?   r   rn   r   rM   r/   walkendswithreplacer0   r9   ru   rv   r2   r5   r6   r7   r8   rg   r   )rK   r   r>   found_packages_localeslocale_datar<   r0   root__filesr4   pkg_name	json_pathr~   merged_datapkg_datar;   s                    r!   get_language_packr   h  s[     BCM&CG&L#K}}T"H'?7+C+C$%!wwtU;ODe==))#||GR8H "T 8I@!)g>"*.))B-K ?  9#9#C&7X&N,7K)   <& 5::<NHd*(,% = 		(+++# ?>$ @ 	(<(<(>?@s0   
EE"E
EEE.FFc                  |    \ rS rSrSrSS jrSS jrSS jrSS jrSS jr	SS jr
SS	 jrSS
 jrSS jrSS jrSrg)TranslationBundlei  zA
Translation bundle providing gettext translation functionality.
c                r    Xl         X l        [        R                  " 5       U l        U R                  U5        g)zInitialize the bundle.N)_domain_localegettextNullTranslations_translatorupdate_locale)selfrY   rK   s      r!   __init__TranslationBundle.__init__  s+    "3357#rh   c                   Xl         SnU[        :w  av  SU 3n [        R                  " U5      nUR                  c   e[
        R                  R                  [
        R                  R                  UR                  5      [        5      n[        R                  " U R                  X R                   4SS9U l        g! [         a     N=f = f)zV
Update the locale.

Parameters
----------
locale_: str
    The language name to use.
Njupyterlab_language_pack_T)	localedir	languagesfallback)r   rP   	importlibimport_moduler3   r/   r0   r9   r1   ro   r5   r   translationr   r   )r   rK   r   language_pack_modulemods        r!   r   TranslationBundle.update_locale  s     	n$%>wi#H --.BC||///GGLL)F
S	
 #..LLI,,SW
	  s   A0B: :
CCc                8    U R                   R                  U5      $ )z
Translate a singular string.

Parameters
----------
msgid: str
    The singular string to translate.

Returns
-------
str
    The translated string.
)r   r   r   msgids     r!   r   TranslationBundle.gettext  s     ''..rh   c                :    U R                   R                  XU5      $ )a  
Translate a singular string with pluralization.

Parameters
----------
msgid: str
    The singular string to translate.
msgid_plural: str
    The plural string to translate.
n: int
    The number for pluralization.

Returns
-------
str
    The translated string.
)r   ngettextr   r   msgid_pluralns       r!   r   TranslationBundle.ngettext  s    $ ((a@@rh   c                    [         (       a  U R                  R                  U5      nU$ U R                  R                  X5      nU$ )z
Translate a singular string with context.

Parameters
----------
msgctxt: str
    The message context.
msgid: str
    The singular string to translate.

Returns
-------
str
    The translated string.
)PY37_OR_LOWERr   r   pgettext)r   msgctxtr   r   s       r!   r   TranslationBundle.pgettext  sE    $ =**2259K  **33GCKrh   c                    [         (       a  U R                  R                  X#U5      nU$ U R                  R                  XX45      nU$ )a:  
Translate a singular string with context and pluralization.

Parameters
----------
msgctxt: str
    The message context.
msgid: str
    The singular string to translate.
msgid_plural: str
    The plural string to translate.
n: int
    The number for pluralization.

Returns
-------
str
    The translated string.
)r   r   r   	npgettext)r   r   r   r   r   r   s         r!   r   TranslationBundle.npgettext  sI    , =**33EKK  **44W\UKrh   c                $    U R                  U5      $ )z
Shorthand for gettext.

Parameters
----------
msgid: str
    The singular string to translate.

Returns
-------
str
    The translated string.
)r   r   s     r!   r   TranslationBundle.__   s     ||E""rh   c                &    U R                  XU5      $ )z
Shorthand for ngettext.

Parameters
----------
msgid: str
    The singular string to translate.
msgid_plural: str
    The plural string to translate.
n: int
    The number for pluralization.

Returns
-------
str
    The translated string.
)r   r   s       r!   _nTranslationBundle._n0  s    $ }}U!44rh   c                $    U R                  X5      $ )z
Shorthand for pgettext.

Parameters
----------
msgctxt: str
    The message context.
msgid: str
    The singular string to translate.

Returns
-------
str
    The translated string.
)r   )r   r   r   s      r!   _pTranslationBundle._pD  s      }}W,,rh   c                &    U R                  XX45      $ )a  
Shorthand for npgettext.

Parameters
----------
msgctxt: str
    The message context.
msgid: str
    The singular string to translate.
msgid_plural: str
    The plural string to translate.
n: int
    The number for pluralization.

Returns
-------
str
    The translated string.
)r   )r   r   r   r   r   s        r!   _npTranslationBundle._npV  s    ( ~~gl>>rh   )r   r   r   N)rY   strrK   r   rK   r   returnrZ   )r   r   r   r   )r   r   r   r   r   intr   r   )r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   r   r   r   r   r   r   r   __static_attributes__ rh   r!   r   r     s:    $
4/ A(2<# 5(-$?rh   r   c                      \ rS rSr% Sr0 rS\S'   \r\	SS j5       r
\SS j5       r\SS j5       r\	  S         SS	 jj5       r\	SS
 j5       rSrg)
translatorim  z
Translations manager.
zdict[str, TranslationBundle]_TRANSLATORSc                &    U R                  SS5      $ )zNormalize a domain name.

Parameters
----------
domain: str
    Domain to normalize

Returns
-------
str
    Normalized domain
-_)r   )rY   s    r!   normalize_domaintranslator.normalize_domainu  s     ~~c3''rh   c                    XR                   :X  a  g[        U5      (       a;  Xl         U R                  R                  5        H  u  p#UR	                  U5        M     gg)z
Set locale for the translation bundles based on the settings.

Parameters
----------
locale_: str
    The language name to use.
N)_LOCALErM   r   r   r   )clsrK   r   bundles       r!   
set_localetranslator.set_locale  sO     kk!7##!K --335	$$W- 6 $rh   c                    [         R                  U5      nX R                  ;   a  U R                  U   nU$ [        X R                  5      nX0R                  U'   U$ )a  
Load translation domain.

The domain is usually the normalized ``package_name``.

Parameters
----------
domain: str
    The translations domain. The normalized python package name.

Returns
-------
Translator
    A translator instance bound to the domain.
)r   r   r   r   r   )r   rY   norm_domaintranss       r!   r2   translator.load  sZ    " !11&9***$$[1E
  &k;;?E,1[)rh   Nc           
     f   Uc  [        U5      nUR                  5        GH  u  pEUS-   U-   n[        U[        5      (       aT  SnUR                  5        H  u  pUR	                  U5      (       d  M  Sn  O   U(       a  U R                  W	U5      X'   Mu  Mw  [        U[        5      (       a  [        R                  U UUUS9  M  [        U[        5      (       d  M  [        U5       HD  u  p[        U[        5      (       d  M  [        R                  U UUS-   [        U
5      -   S-   US9  MF     GM     g)zTranslate a schema in-place.N/FT)prefixto_translate[])r)   r   
isinstancer   	fullmatchr   dictr   _translate_schema_stringslist	enumerate)translationsr   r   r   keyvaluer0   matchedr   r    ielements               r!   r   $translator._translate_schema_strings  s     3F;L ,,.JCC<#%D%%%(4(:(:(<$G((.."& )= "."7"7"GFK E4((44 !-	 5  E4(("+E"2JA%gt44 88$#czCF2S8%1	 9  #3' )rh   c                    [         R                  [        :X  a  U $ [         R                  U R	                  [
        0 5      R	                  S[        5      5      nU R                  5       n[         R                  X5        U$ )zTranslate a schema.

Parameters
----------
schema: dict
    The schema to be translated

Returns
-------
Dict
    The translated schema
rY   )	r   r   rP   r2   r%   r&   DEFAULT_DOMAINr\   r   )r   r   
new_schemas      r!   translate_schematranslator.translate_schema  sb     /M!JJ',00>J
 [[]
,,\Frh   r   )rY   r   r   r   r   )rY   r   r   r   )rW   N)
r   r   r   r   r   r   r   zdict[Pattern, str] | Noner   rZ   )r   r   r   r   )r   r   r   r   r   r   __annotations__
SYS_LOCALEr   staticmethodr   classmethodr   r2   r   r  r   r   rh   r!   r   r   m  s     24L.3G( ( . .$  2  26	%%% % 0	%
 
% %N  rh   r   )r   dict[Pattern, str])r   r   r   r  )r   ztuple[dict[str, Any], str])rK   r   r   bool)rK   r   rS   r   r   r   )r^   dict[str, Any]r_   r
  r   r
  )rK   r   r   tuple[dict, str])rS   r   r   r  )rK   r   r   tuple)3r   
__future__r   r   r   rv   r   r/   r   sysr7   	functoolsr   typingr   r   rF   packaging.versionr   r[   version_infoimportlib_metadatar
   importlib.metadatar.   rB   rP   	getlocaler  ro   rs   r   L10N_SCHEMA_NAMEr   r   r'   _default_settings_contextr&   r   r"   r)   r?   rC   rM   rQ   rg   r   r   r   r   r   r   rh   r!   <module>r     sb  
 #     	 	 
     4 g// !: -  "4n

=   !$. " & 5  5!:*C0I$*)B%+(1   ,2&R :H 8$-$DR$$N05j .< ?(D1,lL? L?^E Erh   