
    MhY              
         d Z ddlmZ ddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlmZ ddlmZmZ ddlZddlmZ e	j        dk     rddlmZ nddlmZ d	Zd
ZdZ ej                    d         peZdZdZdZdZ e	j        dd         dk    Z!dZ"dZ#dZ$dZ%e$e$e$e$e#e#e$ddd	Z&ed4d            Z'd5dZ(d6dZ)d6d Z*d7d$Z+efd8d&Z,d9d*Z-d:d,Z.efd;d-Z/d<d/Z0 G d0 d1          Z1 G d2 d3          Z2dS )=z^
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/.*/labelreturndict[Pattern, str]c                 H    d t                                           D             S )Nc                J    i | ] \  }}t          j        d |z   dz             |!S z^/$)recompile).0patterncontexts      c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/jupyterlab_server/translation_utils.py
<dictcomp>z1_get_default_schema_selectors.<locals>.<dictcomp>D   sA       GW 	
4'>C'(('      )DEFAULT_SCHEMA_SELECTORSitems r%   r#   _get_default_schema_selectorsr)   B   s/      8 > > @ @   r%   dictc                    i t                      d |                     t          i                               dg           D             S )Nc                N    i | ]"}t          j        d |z   dz             t          #S r   )r   r   _default_schema_context)r    selectors     r#   r$   z,_prepare_schema_patterns.<locals>.<dictcomp>M   s>     
 
 
 Jth,--/F
 
 
r%   	selectors)r)   get_lab_i18n_config)r   s    r#   _prepare_schema_patternsr2   J   sZ    
'
)
)
 
"JJ'7<<@@bQQ
 
 
 r%   tuple[dict[str, Any], str]c                 V   i } g }t          t                    D ]w}	 t          j                            |                                j                  | |j        <   B# t          $ r) |	                    t          j                               Y tw xY wd                    |          }| |fS )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_localesrI   V   s     DH#*GHHH 4 4	4%'W__[5E5E5G5G5P%Q%QD!"" 	4 	4 	4OOI02233333	4 ii!!G=   >A0BBc                 V   i } g }t          t                    D ]w}	 t          j                            |                                j                  | |j        <   B# t          $ r) |	                    t          j                               Y tw xY wd                    |          }| |fS )a  
    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.
    r5   r7   )r
   JUPYTERLAB_LOCALE_ENTRYr9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   s       r#   _get_installed_package_localesrM   l   s     DH#*ABBB 4 4	4%'W__[5E5E5G5G5P%Q%QD!"" 	4 	4 	4OOI02233333	4 ii!!G=rJ   locale_strboolc                    | dv rdS d}	 t           j                            |            d}n!# t           j        j        t
          f$ r Y nw xY w|S )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)rN   valids     r#   is_valid_localerY      su    2     tE7###J):6    Ls   !, A
	A
display_localec                N   t          |           r| nt          } t          |          r|nt          }	 t          j                            |           }|                    |          }n# t          j        $ r |}Y nw xY w|r%|d                                         |dd         z   }|S )a  
    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)rY   DEFAULT_LOCALErS   rT   r   get_display_namerV   upper)rN   rZ   locdisplay_names       r#   r^   r^      s      )11Egg~G'6~'F'FZ^^NN&l  ))++N;;# & & &%& B#A,,..abb1AAs   4A' 'A;:A;language_pack_locale_datadict[str, Any]package_locale_datac                   | }|                      di           }|                     dd          }|                     dd          }|                     di           }|                     dd          }|                     dd          }|rU|rS||k    rMt          |          }t          |          }||k    r)|                                 }|                    |           |S )aO  
    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)r0   parse_versioncopyupdate)	rb   rd   resultpackage_lp_metadatapackage_lp_versionpackage_lp_domainpackage_metadatapackage_versionpackage_domains	            r#   merge_locale_datart      s    $ 'F377B??,00DAA+//$??*..r266&**9d;;O%))(F;;N /o /.DU2U2U'88*+=>>///.3355FMM-...Mr%   tuple[dict, str]c                  
 t                      \  }}i }|                    d          }|s|                                D ]v\  }}i }	 t          j                            |t                    

fdt          j        
          D             }n6# t          $ r) |	                    t          j                               Y nw xY w|                                 |v rt          j                            
||                                          t          | d          }t          j                            |          rz	 t          |d          5 }	t!          j        |	          ||<   ddd           n# 1 swxY w Y   ?# t          $ r* |	                    t          j                               Y rw xY wx|d                    |          fS )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"}`
    r7   c                    i | ]T}t           j                            t           j                            |                    ?|                                |US r(   )r9   r:   isdirrC   lower)r    r`   locale_paths     r#   r$   z1get_installed_packages_locale.<locals>.<dictcomp>  sW       w}}RW\\+s%C%CDDIIKK  r%   .jsonutf-8encodingN)rM   splitr'   r9   r:   rC   
LOCALE_DIRlistdirr?   r@   rA   rB   ry   LC_MESSAGES_DIRisfileopenjsonr<   )rN   found_package_localesrH   packages_locale_datarF   package_namepackage_root_pathlocaleslocale_json_pathfhrz   s             @r#   get_installed_packages_localer      s=   " &D%E%E"7}}T""H @/D/J/J/L/L 	@ 	@+L+G	8 gll+<jII   !z+66  
  8 8 8	 4 6 6777778 }}'))#%7<<GMMOO,##***	$ $  7>>"233 @@!"2WEEE OAE20>O O O O O O O O O O O O O O O$ @ @ @ 	(<(>(>?????@  8!4!444sI   
AB0CC>F E3'F 3E7	7F :E7	;F  0F43F4c                   t                      \  }}i }|                    d          }|sg }g }g }|D ]<}t          |          r|                    |           '|                    |           =| |v r| nt          }t          | t
          k    rt          t          |          ndt          t          t                    di}|D ]&}t          ||          t          ||          d||<   '|rXt
          |v r4|                    t
                     d| t
          k    rdndd|t
          <   |r|                    d| d           |d                    |          fS )ab  
    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)`.
    r7   Default)displayName
nativeNamezPseudo-languagezto translate the UIz#The following locales are invalid: !)	rI   r   rY   r@   r]   PSEUDO_LANGUAGEr^   removerC   )	rZ   found_localesrH   r   rF   invalid_localesvalid_localesrN   display_locale_s	            r#   get_language_packsr   &  s   " BCCM7G}}T""H )Z$ 	0 	0Gw'' 0$$W----&&w////,:m,K,K..Q_ &88 %^_EEE".~~NN 	
 % 	 	G/II.w@@   GG
  	Z/11&&777#4 *_<< .-., ,(  Z Xo X X XYYYDIIh''''r%   tuplec                F   t                      \  }}t          |           \  }}i }|                    d          }|sN| t          k    st	          |           r3| |v r.||          }t          j        |d          D ]\  }}}	|	D ]}
|
                    d          r|
                    dd          }t
          j	        
                    ||
          }	 t          |d          5 }t          j        |          }ddd           n# 1 swxY w Y   n6# t          $ r) |                    t!          j                               Y nw xY w||v r||         }t%          ||          }|||<   |                                D ]\  }}||vr|||<   |d
                    |          fS )	a  
    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.
    r7   F)topdownr{   rf   r|   r}   N)rI   r   r   r   rY   r9   walkendswithreplacer:   rC   r   r   r<   r?   r@   rA   rB   rt   r'   )rN   r   rH   found_packages_localeslocale_datarF   r:   root__filesr>   pkg_name	json_pathr   merged_datapkg_datarE   s                    r#   get_language_packr   h  s      BCCM7&CG&L&L#GK}}T""H-''?7+C+C'}$$W%!wtU;;; 	8 	8OD"e 8 8==)) 8#||GR88H "T4 8 8I@!)g>>> 8"*.)B--K8 8 8 8 8 8 8 8 8 8 8 8 8 8 8$ @ @ @ 	(<(>(>?????@  #999#9(#C&7X&N&N,7K)8$ 5::<< 	- 	-NHd{**(,H%		(++++s6   D#D8DDDDD0EEc                  b    e Zd ZdZddZddZdd
ZddZddZddZ	ddZ
ddZddZddZdS )TranslationBundlezI
    Translation bundle providing gettext translation functionality.
    rh   rO   rN   c                |    || _         || _        t          j                    | _        |                     |           dS )zInitialize the bundle.N)_domain_localegettextNullTranslations_translatorupdate_locale)selfrh   rN   s      r#   __init__zTranslationBundle.__init__  s;    "3557#####r%   r   ri   c                t   || _         d}|t          k    r{d| }	 t          j        |          }|j        J t
          j                            t
          j                            |j                  t                    }n# t          $ r Y nw xY wt          j        | j        || j         fd          | _        dS )z
        Update the locale.

        Parameters
        ----------
        locale_: str
            The language name to use.
        Njupyterlab_language_pack_T)	localedir	languagesfallback)r   r]   	importlibimport_moduler=   r9   r:   rC   r;   r   r?   r   translationr   r   )r   rN   r   language_pack_modulemods        r#   r   zTranslationBundle.update_locale  s     	n$$#Hw#H#H -.BCC|///GLL)F)F
SS		    #.LI$,SW
 
 
s   A$B   
BBmsgidc                6    | j                             |          S )z
        Translate a singular string.

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

        Returns
        -------
        str
            The translated string.
        )r   r   r   r   s     r#   r   zTranslationBundle.gettext  s     ''...r%   msgid_pluralnintc                :    | j                             |||          S )ax  
        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   r   r   s       r#   r   zTranslationBundle.ngettext  s    $ ((a@@@r%   msgctxtc                    t           r| j                            |          }n| j                            ||          }|S )a)  
        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   r   r   r   s       r#   r   zTranslationBundle.pgettext  sC    $  	D*22599KK*33GUCCKr%   c                    t           r| j                            |||          }n| j                            ||||          }|S )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   zTranslationBundle.npgettext  sL    ,  	V*33E<KKKK*44We\STUUKr%   c                ,    |                      |          S )z
        Shorthand for gettext.

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

        Returns
        -------
        str
            The translated string.
        )r   r   s     r#   r   zTranslationBundle.__   s     ||E"""r%   c                0    |                      |||          S )a`  
        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#   _nzTranslationBundle._n0  s    $ }}UL!444r%   c                .    |                      ||          S )a  
        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#   _pzTranslationBundle._pD  s      }}We,,,r%   c                2    |                      ||||          S )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#   _npzTranslationBundle._npV  s    ( ~~gulA>>>r%   N)rh   rO   rN   rO   rN   rO   r   ri   )r   rO   r   rO   )r   rO   r   rO   r   r   r   rO   )r   rO   r   rO   r   rO   )
r   rO   r   rO   r   rO   r   r   r   rO   )__name__
__module____qualname____doc__r   r   r   r   r   r   r   r   r   r   r(   r%   r#   r   r     s         $ $ $ $
 
 
 
4/ / / / A A A A(   2   <# # # # 5 5 5 5(- - - -$? ? ? ? ? ?r%   r   c                      e Zd ZU dZi Zded<   eZedd            Z	e
dd
            Ze
dd            Ze	 	 ddd            Zedd            ZdS )
translatorz
    Translations manager.
    zdict[str, TranslationBundle]_TRANSLATORSrh   rO   r   c                .    |                      dd          S )zNormalize a domain name.

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

        Returns
        -------
        str
            Normalized domain
        -_)r   )rh   s    r#   normalize_domainztranslator.normalize_domainu  s     ~~c3'''r%   rN   ri   c                    || j         k    rdS t          |          r;|| _         | j                                        D ]\  }}|                    |           dS dS )z
        Set locale for the translation bundles based on the settings.

        Parameters
        ----------
        locale_: str
            The language name to use.
        N)_LOCALErY   r   r'   r   )clsrN   r   bundles       r#   
set_localeztranslator.set_locale  sz     ck!!F7## 	.!CK -3355 . .	6$$W----	. 	.. .r%   r   c                    t                               |          }|| j        v r| j        |         }nt          || j                  }|| j        |<   |S )aY  
        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   rh   norm_domaintranss       r#   r<   ztranslator.load  sW    " !11&99#***$[1EE%k3;??E,1C[)r%   rf   Ntranslationsr   r   r*   prefixto_translatedict[Pattern, str] | Nonec           
        |t          |          }|                                D ]\  }}|dz   |z   }t          |t                    rQd}|                                D ]\  }}	|                    |          rd} n|r|                     |	|          ||<   tt          |t                    rt                              | |||           t          |t                    r_t          |          D ]O\  }
}t          |t                    st                              | ||dz   t          |
          z   dz   |           PdS )zTranslate a schema in-place.N/FT)r   r   [])r2   r'   
isinstancerO   	fullmatchr   r*   r   _translate_schema_stringslist	enumerate)r   r   r   r   keyvaluer:   matchedr!   r"   ielements               r#   r   z$translator._translate_schema_strings  s    3F;;L ,,.. 	 	JCC<#%D%%% (4(:(:(<(<  $GW((.. "&  H"."7"7"G"GF3KE4(( 44 !-	 5     E4(( 	"+E"2"2  JAw%gt44 ! 88$#czCFF2S8%1	 9    -	 	r%   c                *   t           j        t          k    r| S t                               |                     t
          i                               dt                              }|                                 }t                               ||           |S )zTranslate a schema.

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

        Returns
        -------
        Dict
            The translated schema
        rh   )	r   r   r]   r<   r0   r1   DEFAULT_DOMAINrk   r   )r   r   
new_schemas      r#   translate_schemaztranslator.translate_schema  sw     //M!JJ',,00>JJ
 
 [[]]
,,\:FFFr%   )rh   rO   r   rO   r   )rh   rO   r   r   )rf   N)
r   r   r   r*   r   rO   r   r   r   ri   )r   r*   r   r*   )r   r   r   r   r   __annotations__
SYS_LOCALEr   staticmethodr   classmethodr   r<   r   r   r(   r%   r#   r   r   m  s           24L3333G( ( ( \( . . . [.$    [2  26	% % % % \%N    \  r%   r   )r   r   )r   r*   r   r   )r   r3   )rN   rO   r   rP   )rN   rO   rZ   rO   r   rO   )rb   rc   rd   rc   r   rc   )rN   rO   r   ru   )rZ   rO   r   ru   )rN   rO   r   r   )3r   
__future__r   r   r   r   r   r9   r   sysrA   	functoolsr   typingr   r   rS   packaging.versionr   rj   version_infoimportlib_metadatar
   importlib.metadatar8   rL   r]   	getlocaler   r   r   r   L10N_SCHEMA_NAMEr   r   r-   _default_settings_contextr1   r&   r)   r2   rI   rM   rY   r^   rt   r   r   r   r   r   r(   r%   r#   <module>r     s   
 # " " " " "        				 				 



                    4 4 4 4 4 4 g///////////// !: -  V"4n

=  !$. " & 5  5!:*C0I$*)B%+(1            ,   2& & & &R :H     8$ $ $ $N05 05 05 05j .< ?( ?( ?( ?( ?(D1, 1, 1, 1,lL? L? L? L? L? L? L? L?^E E E E E E E E E Er%   