grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026 ”qcTã@s|dZddlZddlZddlZddlZddlZddlZddlZddlm Z dddddd d d d d dddddddgZ ej j ej ddƒZejdejejBƒZdd„Zdd„ZdOZd)d*„eed+ƒDƒZdd,dd-d'd.iZdPd/d0„Zd1d2„Zd3d4„Zd5d6„ZGd7d„dƒZGd8d„deƒZddd9d:d„ZiZdddd9dd;d„Z dddd<d „Z!ia"ia#d=a$dd>d „Z%dd?d „Z&dd@d „Z'dAd „Z(dBd„Z)dCd„Z*dDd„Z+dEd„Z,dFd„Z-dGd„Z.dHd„Z/e Z0dS)QaªInternationalization and localization support. This module provides internationalization (I18N) and localization (L10N) support for your Python programs by providing an interface to the GNU gettext message catalog library. I18N refers to the operation by which a program is made aware of multiple languages. L10N refers to the adaptation of your program, once internationalized, to the local language and cultural habits. éN)ÚENOENTÚNullTranslationsÚGNUTranslationsÚCatalogÚfindÚ translationÚinstallÚ textdomainÚbindtextdomainÚbind_textdomain_codesetÚdgettextÚ dngettextÚgettextÚlgettextÚ ldgettextÚ ldngettextÚ lngettextÚngettextZshareÚlocaleaÊ (?P[ \t]+) | # spaces and horizontal tabs (?P[0-9]+\b) | # decimal integer (?Pn\b) | # only n is allowed (?P[()]) | (?P[-*/%+?:]|[>, # <=, >=, ==, !=, &&, ||, # ? : # unary and bitwise ops # not allowed (?P\w+|.) # invalid token ccsnxbtjt|ƒD]N}|j}|dkr1q|j|ƒ}|dkr\td|ƒ‚|VqWdVdS)NZ WHITESPACESZINVALIDz invalid token in plural form: %sÚ)ÚreÚfinditerÚ_token_patternÚ lastgroupÚgroupÚ ValueError)ÚpluralZmoZkindÚvalue©rú,/opt/alt/python35/lib64/python3.5/gettext.pyÚ _tokenizeTs    r cCs"|rtd|ƒStdƒSdS)Nz#unexpected token in plural form: %szunexpected end of plural form)r)rrrrÚ_error_sr!ú||ú&&ú==ú!=ú<ú>ú<=ú>=ú+ú-Ú*ú/ú%cCs,i|]"\}}|D]}||“qqSrr)Ú.0ÚiZopsÚoprrrú ms r2éÚorÚandz//c Cs<d}t|ƒ}x&|dkr:|d7}t|ƒ}qW|dkr„t|ƒ\}}d||f}|dkrêtdƒ‚nf|dkr£d ||f}nGyt|d ƒ}Wn!tk rÙt|ƒd‚YnXd ||f}t|ƒ}d }x�|tkr‹t|}||kr"P|dkrD|dkrDd|}tj||ƒ}t||dƒ\} }d||| f}|}qÿW||ko£dknr²d|}|dkr2|dkr2t|dƒ\} }|dkr÷t|ƒ‚t|ƒ\} }d| || f}|dkr2d|}||fS)Nrú!znot ú(z%s(%s)ú)z%unbalanced parenthesis in plural formÚnz%s%sé z%s%dédééz(%s)r3z%s %s %sú?rú:z%s if %s else %s)r<r=)r<r=)ÚnextÚ_parserÚintr!Ú _binary_opsÚ _c2py_opsÚget) ÚtokensZpriorityÚresultÚnexttokÚsubrÚjr0r1ÚrightZif_trueZif_falserrrrApsP                rAc CsEyt|ƒ}Wn.tk r@td|jjfƒd‚YnX|S)Nz'Plural value must be an integer, got %s)ÚroundÚ TypeErrorÚ __class__Ú__name__)r9r0rrrÚ_as_int¡s  rPc Csôt|ƒdkrtdƒ‚y±tt|ƒƒ\}}|rKt|ƒ‚d}xU|D]M}|dkr�|d7}|dkr¥tdƒ‚qX|dkrX|d8}qXWd ti}td ||ƒ|d SWntk rïtdƒ‚YnXd S) z‰Gets a C expression as used in PO files for plural forms and returns a Python function that implements an equivalent expression. ièz"plural form expression is too longrr7r3éz%plural form expression is too complexr8rPz›if True: def func(n): if not isinstance(n, int): n = _as_int(n) return int(%s) ÚfuncN)ÚlenrrAr r!rPÚexecÚRecursionError)rrGrHZdepthÚcÚnsrrrÚc2py©s(          rXc Cs tj|ƒ}d}d }d }d}|jdƒ}|dkro||d…}|d|…}||O}nd}|jdƒ}|dkr½||d…}|d|…}||O}nd}|jdƒ}|dkr ||d…}|d|…}||O}nd}|} g} xrt|dƒD]`} | |@s.| } | |@rY| |7} | |@rm| |7} | |@r�| |7} | j| ƒq.W| jƒ| S) Nr3réú@rÚ.Ú_r3rYr=)rZ normalizerÚrangeÚappendÚreverse) ÚlocZCOMPONENT_CODESETZCOMPONENT_TERRITORYZCOMPONENT_MODIFIERÚmaskÚposZmodifierÚcodesetZ territoryZlanguageZretr0ÚvalrrrÚ _expand_langÍsJ           rec@s¦eZdZddd„Zdd„Zdd„Zdd „Zd d „Zd d „Zdd„Z dd„Z dd„Z dd„Z dd„Z ddd„ZdS)rNcCsAi|_d|_d|_d|_|dk r=|j|ƒdS)N)Ú_infoÚ_charsetÚ_output_charsetÚ _fallbackrA)ÚselfÚfprrrÚ__init__øs      zNullTranslations.__init__cCsdS)Nr)rjrkrrrrAszNullTranslations._parsecCs)|jr|jj|ƒn ||_dS)N)riÚ add_fallback)rjÚfallbackrrrrms zNullTranslations.add_fallbackcCs|jr|jj|ƒS|S)N)rir)rjÚmessagerrrr s zNullTranslations.gettextcCsE|jr|jj|ƒS|jr2|j|jƒS|jtjƒƒS)N)rirrhÚencoderÚgetpreferredencoding)rjrorrrrs   zNullTranslations.lgettextcCs7|jr|jj|||ƒS|dkr/|S|SdS)Nr3)rir)rjÚmsgid1Úmsgid2r9rrrrs   zNullTranslations.ngettextcCsf|jr|jj|||ƒS|dkr4|}n|}|jrS|j|jƒS|jtjƒƒS)Nr3)rirrhrprrq)rjrrrsr9Útmsgrrrrs    zNullTranslations.lngettextcCs|jS)N)rf)rjrrrÚinfo(szNullTranslations.infocCs|jS)N)rg)rjrrrÚcharset+szNullTranslations.charsetcCs|jS)N)rh)rjrrrÚoutput_charset.szNullTranslations.output_charsetcCs ||_dS)N)rh)rjrvrrrÚset_output_charset1sz#NullTranslations.set_output_charsetcCs£ddl}|j|jdUsz(GNUTranslations._parse..z4Iz>IIzBad magic numberzBad version number ézFile is corrupts r?r3Ú z content-typezcharset=z plural-formsú;zplural=Úasciis)ÚstructÚunpackÚgetattrÚ_catalogrÚreadrSÚLE_MAGICÚBE_MAGICÚOSErrorr‚ÚVERSIONSÚstrr]ÚsplitÚdecodeÚstripÚlowerrfrgrXÚ enumerate)"rjrkrŠÚfilenameZcatalogZbufZbuflenÚmagicr�ZmsgcountZ masteridxZtransidxZiiZ major_versionZ minor_versionr0ZmlenZmoffZmendZtlenZtoffZtendÚmsgrtZlastkZb_itemÚitemÚkÚvrrvrrrsÚxrrrrANsr    % % # #             zGNUTranslations._parsecCsutƒ}|jj||ƒ}||krI|jrC|jj|ƒS|}|jrb|j|jƒS|jtjƒƒS)N) ÚobjectrŒrErirrhrprrq)rjroÚmissingrtrrrr¢s    zGNUTranslations.lgettextc Cs›y |j||j|ƒf}WnLtk rn|jrO|jj|||ƒS|dkrd|}n|}YnX|jrˆ|j|jƒS|jtjƒƒS)Nr3) rŒrÚKeyErrorrirrhrprrq)rjrrrsr9rtrrrr­s       zGNUTranslations.lngettextcCsKtƒ}|jj||ƒ}||krG|jrC|jj|ƒS|S|S)N)rŸrŒrErir)rjror rtrrrr»s   zGNUTranslations.gettextc Cssy |j||j|ƒf}WnLtk rn|jrO|jj|||ƒS|dkrd|}n|}YnX|S)Nr3)rŒrr¡rir)rjrrrsr9rtrrrrÄs      zGNUTranslations.ngettextN)rr3) rOr~rrŽr�r‘r‚rArrrrrrrrrBs   T  Fc Cs?|dkrt}|dkrvg}x6dD].}tjj|ƒ}|r+|jdƒ}Pq+Wd|krv|jdƒg}x>|D]6}x-t|ƒD]}||kr–|j|ƒq–WqƒW|rÌg} nd} xf|D]^}|dkrìPtjj||dd|ƒ} tjj | ƒrÙ|r3| j| ƒqÙ| SqÙW| S) NÚLANGUAGEÚLC_ALLÚ LC_MESSAGESÚLANGr?ÚCz%s.mo)r¢r£r¤r¥) Ú_default_localedirÚosÚenvironrEr“r^reÚpathÚjoinÚexists) ÚdomainÚ localedirÚ languagesÚallZenvarrdZnelangsZlangZnelangrGÚmofilerrrrÒs8          c Cs|dkrt}t|||ddƒ}|sO|r=tƒSttd|ƒ‚d}x¶|D]®}|tjj|ƒf} tj | ƒ} | dkrÆt |dƒ�} tj | || ƒƒ} WdQRXt j | ƒ} |rè| j |ƒ|dkrý| }q\|j| ƒq\W|S)Nr°Tz$No translation file found for domainÚrb)rrrr�rr¨rªÚabspathÚ _translationsrEÚopenÚ setdefaultÚcopyrxrm) r­r®r¯Zclass_rnrcZmofilesrGr±ÚkeyÚtrkrrrrús*      cCs,t||ddd|ƒ}|j|ƒdS)NrnTrc)rr)r­r®rcr}r¹rrrrsZmessagescCs|dk r|atS)N)Ú_current_domain)r­rrrr 's cCs&|dk r|t| s\&T    1  $ *K�&