grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026î ¤ fQã@sdZddlZddlZddlZddlZddlZddlZddlZddlm Z dddddd d d d d dddddddgZ ej j ej ddƒZejdejejBƒZdd„Zdd„ZdOZd)d*„eed+ƒDƒZid,d6d-d6d.d'6ZdPd/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 ccstxhtjt|ƒD]T}|j}|dkr4qn|j|ƒ}|dkrbtd|ƒ‚n|VqWdVdS)NZ WHITESPACESZINVALIDz invalid token in plural form: %sÚ)ÚreÚfinditerÚ_token_patternÚ lastgroupÚgroupÚ ValueError)ÚpluralZmoZkindÚvalue©rú,/opt/alt/python34/lib64/python3.4/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 CsQd}t|ƒ}x&|dkr:|d7}t|ƒ}qW|dkr‡t|ƒ\}}d||f}|dkrítdƒ‚qínf|dkr¦d ||f}nGyt|d ƒ}Wn!tk rÜt|ƒd‚YnXd ||f}t|ƒ}d }x“|tkr”t|}||kr(Pn|dkrM|dkrMd|}ntj||ƒ}t||dƒ\} }d||| f}|}qW||ko¬dknr¾d|}n|dkrG|dkrGt|dƒ\} }|dkrt|ƒ‚nt|ƒ\} }d| || f}|dkrGd|}qGn||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 Cst|ƒdkr!tdƒ‚ny»tt|ƒƒ\}}|rQt|ƒ‚nd}x[|D]S}|dkr˜|d7}|dkr±tdƒ‚q±q^|dkr^|d8}q^q^Witd 6}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Ú RuntimeError)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} x~t|dƒD]l} | |@s.| } | |@r\| |7} n| |@rs| |7} n| |@rŠ| |7} n| j| ƒq.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)rNcCsDi|_d|_d|_d|_|dk r@|j|ƒndS)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.gettextcCs|jr|jj|ƒS|S)N)rir)rjrorrrrs zNullTranslations.lgettextcCs7|jr|jj|||ƒS|dkr/|S|SdS)Nr3)rir)rjÚmsgid1Úmsgid2r9rrrrs   zNullTranslations.ngettextcCs7|jr|jj|||ƒS|dkr/|S|SdS)Nr3)rir)rjrprqr9rrrrs   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)rjrsrrrÚset_output_charset,sz#NullTranslations.set_output_charsetcCs²ddl}|j|jdIsz(GNUTranslations._parse..z4Iz>IIzBad magic numberézFile is corruptÚ Úasciir?r3z content-typezcharset=z plural-formsú;zplural=s)ÚstructÚunpackÚgetattrÚ_catalogrÚreadrSÚLE_MAGICÚBE_MAGICÚOSErrorr]ÚsplitÚencodeÚdecodeÚstripÚlowerrfrgrXÚstrÚ enumerate) rjrkr„ÚfilenameZcatalogZbufZbuflenÚmagicÚversionZmsgcountZ masteridxZtransidxZiir0ZmlenZmoffZmendZtlenZtoffZtendÚmsgÚtmsgZlastkZb_itemÚitemÚkÚvrrsrprqÚxrrrrABsl    % % # #             zGNUTranslations._parsecCsstƒ}|jj||ƒ}||krG|jrC|jj|ƒS|S|jr`|j|jƒS|jtjƒƒS)N) Úobjectr†rErirrhrŒrÚgetpreferredencoding)rjroÚmissingr–rrrr�s    zGNUTranslations.lgettextc Cs˜yL|j||j|ƒf}|jr8|j|jƒS|jtjƒƒSWnEtk r“|jr{|jj|||ƒS|dkr‹|S|SYnXdS)Nr3) r†rrhrŒrrœÚKeyErrorrir)rjrprqr9r–rrrr›s    zGNUTranslations.lngettextcCsKtƒ}|jj||ƒ}||krG|jrC|jj|ƒS|S|S)N)r›r†rErir)rjror�r–rrrr©s   zGNUTranslations.gettextc Cssy |j||j|ƒf}WnLtk rn|jrO|jj|||ƒS|dkrd|}n|}YnX|S)Nr3)r†rržrir)rjrprqr9r–rrrr²s      zGNUTranslations.ngettextN) rOr{r|rˆr‰rArrrrrrrrr=s  N  Fc CsT|dkrt}n|dkr‚g}x9dD]1}tjj|ƒ}|r.|jdƒ}Pq.q.Wd|kr‚|jdƒq‚ng}xA|D]9}x0t|ƒD]"}||kr¢|j|ƒq¢q¢Wq�W|rÛg} nd} xl|D]d}|dkrþPntjj||dd|ƒ} tjj | ƒrè|rE| j| ƒqL| SqèqèW| S) NÚLANGUAGEÚLC_ALLÚ LC_MESSAGESÚLANGr?ÚCz%s.mo)rŸzLC_ALLz LC_MESSAGESr¢) Ú_default_localedirÚosÚenvironrEr‹r^reÚpathÚjoinÚexists) ÚdomainÚ localedirÚ languagesÚallZenvarrdZnelangsZlangZnelangrGÚmofilerrrrÀs8           c Cs|dkrt}nt|||ddƒ}|sU|r@tƒSttd|ƒ‚nd}x»|D]³}|tjj|ƒf} tj | ƒ} | dkrÎt |dƒ�} tj | || ƒƒ} WdQXnt j | ƒ} |ró| j |ƒn|dkr| }qb|j| ƒqbW|S)Nr­Tz$No translation file found for domainÚrb)rrrrŠrr¥r§ÚabspathÚ _translationsrEÚopenÚ setdefaultÚcopyrurm) rªr«r¬Zclass_rnrcZmofilesrGr®ÚkeyÚtrkrrrrès*    !  cCs,t||ddd|ƒ}|j|ƒdS)NrnTrc)rr)rªr«rcrzr¶rrrrsZmessagescCs|dk r|antS)N)Ú_current_domain)rªrrrr s  cCs)|dk r|t| s\&T    1  $ *Fƒ&