3 \T@sdZddlZddlZddlZddlZddlZddlZddlZddlm Z dddddd d d d d dddddddgZ ej j ej ddZejdejejBZddZddZdPZd)d*eed+DZd,d-d.d/ZdRd0d1Zd2d3Zd4d5Zd6d7ZGd8ddZGd9ddeZdSd;dZiZdTda$dVd?d Z%dWd@d Z&dXdAd Z'dBd Z(dCdZ)dDdZ*dEdZ+dFdZ,dGdZ-dHdZ.dIdZ/e Z0dS)YaInternationalization 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)ENOENTNullTranslationsGNUTranslationsCatalogfind translationinstall textdomainbindtextdomainbind_textdomain_codesetdgettext dngettextgettextlgettext ldgettext ldngettext lngettextngettextZsharelocalea (?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]8}|j}|dkr"q|j|}|dkr@td||VqWdVdS)NZ WHITESPACESZINVALIDz invalid token in plural form: %s)refinditer_token_pattern lastgroupgroup ValueError)pluralmoZkindvaluer/usr/lib64/python3.6/gettext.py _tokenizeTs   r!cCs|rtd|StdSdS)Nz#unexpected token in plural form: %szunexpected end of plural form)r)rrrr _error_s r"||&&==!=<><=>=+-*/%cCs i|]\}}|D] }||qqSrr).0iZopsoprrr msr3orandz//)z||z&&r.c Csd}t|}x|dkr(|d7}t|}qW|dkr\t|\}}d||f}|dkrtdnP|dkrrd ||f}n:yt|d }Wntk rt|dYnXd ||f}t|}d }xh|tkr t|}||krP|dkr|dkrd|}tj||}t||d\} }d||| f}|}qW||ko6dknrFd|}|dkr|dkrt|d\} }|dkrzt|t|\} }d| || f}|dkrd|}||fS)Nr!znot (z%s(%s))z%unbalanced parenthesis in plural formnz%s%s z%s%ddz(%s)r4z%s %s %s?r:z%s if %s else %s)r=r>)r=r>)next_parserintr" _binary_ops _c2py_opsget) tokensZpriorityresultnexttoksubrjr1r2rightZif_trueZif_falserrr rBpsP           rBc Cs:y t|}Wn(tk r4td|jjfdYnX|S)Nz'Plural value must be an integer, got %s)round TypeError __class____name__)r:r1rrr _as_ints  rQc Cst|dkrtdy~tt|\}}|r2t|d}x>|D]6}|dkrb|d7}|dkrrtdq<|dkr<|d8}q)rZ normalizerrangeappendreverse) locZCOMPONENT_CODESETZCOMPONENT_TERRITORYZCOMPONENT_MODIFIERmaskposZmodifiercodesetZ territoryZlanguageZretr1valrrr _expand_langsJ                 rfc@speZdZdddZddZddZdd Zd d Zd d ZddZ ddZ ddZ ddZ ddZ dddZdS)rNcCs.i|_d|_d|_d|_|dk r*|j|dS)N)_info_charset_output_charset _fallbackrB)selffprrr __init__s zNullTranslations.__init__cCsdS)Nr)rkrlrrr rBszNullTranslations._parsecCs|jr|jj|n||_dS)N)rj add_fallback)rkfallbackrrr rnszNullTranslations.add_fallbackcCs|jr|jj|S|S)N)rjr)rkmessagerrr r s zNullTranslations.gettextcCs2|jr|jj|S|jr$|j|jS|jtjS)N)rjrriencodergetpreferredencoding)rkrprrr rs   zNullTranslations.lgettextcCs*|jr|jj|||S|dkr"|S|SdS)Nr4)rjr)rkmsgid1msgid2r:rrr rs zNullTranslations.ngettextcCsH|jr|jj|||S|dkr$|}n|}|jr:|j|jS|jtjS)Nr4)rjrrirqrrr)rkrsrtr:tmsgrrr rs zNullTranslations.lngettextcCs|jS)N)rg)rkrrr info(szNullTranslations.infocCs|jS)N)rh)rkrrr charset+szNullTranslations.charsetcCs|jS)N)ri)rkrrr output_charset.szNullTranslations.output_charsetcCs ||_dS)N)ri)rkrwrrr set_output_charset1sz#NullTranslations.set_output_charsetcCsvddl}|j|jd<t|drrd|kr6|jd|jd<d|krJ|j|jd<d|kr^|j|jd<d|krr|j|jd<dS)Nrr] __contains__rrrr)builtinsr__dict__hasattrrrr)rknamesr{rrr r4s    zNullTranslations.install)N)N)rP __module__ __qualname__rmrBrnrrrrrvrwrxryrrrrr rs  c@sHeZdZdZdZdZddZddZd d Zd d Z d dZ ddZ dS)rl*l$<rr4cCs|d?|d@fS)z/Returns a tuple of major version, minor versionir)rkversionrrr _get_versionsJszGNUTranslations._get_versionsc"Cstj}t|dd}i|_}dd|_|j}t|}|d|ddd}||jkrv|d |dd \}} } } d } n6||jkr|d |dd \}} } } d } n t dd||j |\} }| |j krt ddt | |xt d| D]}|| || | d\}}||}|| || | d\}}||}||kr^||kr^|||}|||}n t dd||dkrRd}x|jdD]}|jj}|sqd}}d|kr|jdd\}}|jj}|j}||j|<|}n|r|j|d|7<|dkr|jdd|_n0|dkr|jd}|djdd}t||_qW|jp\d}d|kr|jd\}} |jd}t ||}x>t|D]\}}!t |!||||f<qWnt |||t ||<| d7} | d7} qWdS)z8Override this method to support alternative .mo formats.namercSs t|dkS)Nr4)rC)r:rrr Usz(GNUTranslations._parse..zrz<4IrRz4Iz>IIzBad magic numberzBad version number zFile is corrupt r@r4 z content-typezcharset=z plural-forms;zplural=ascii)structunpackgetattr_catalogrreadrTLE_MAGICBE_MAGICOSErrorrVERSIONSstrr^splitdecodestriplowerrgrhrY enumerate)"rkrlrfilenameZcatalogZbufZbuflenmagicrZmsgcountZ masteridxZtransidxZiiZ major_versionZ minor_versionr1ZmlenZmoffZmendZtlenZtoffZtendmsgruZlastkZb_itemitemkvrrwrsrtxrrr rBNsr                     zGNUTranslations._parsecCsRt}|jj||}||kr2|jr.|jj|S|}|jrD|j|jS|jtjS)N) objectrrFrjrrirqrrr)rkrpmissingrurrr rs  zGNUTranslations.lgettextc Csvy|j||j|f}Wn<tk rT|jr>|jj|||S|dkrL|}n|}YnX|jrh|j|jS|jtjS)Nr4) rrKeyErrorrjrrirqrrr)rkrsrtr:rurrr rs  zGNUTranslations.lngettextcCs6t}|jj||}||kr2|jr.|jj|S|S|S)N)rrrFrjr)rkrprrurrr rs zGNUTranslations.gettextc CsZy|j||j|f}Wn<tk rT|jr>|jj|||S|dkrL|}n|}YnX|S)Nr4)rrrrjr)rkrsrtr:rurrr rs zGNUTranslations.ngettextN)rr4) rPrrrrrrrBrrrrrrrr rBsT  Fc Cs|dkr t}|dkrTg}x(dD] }tjj|}|r|jd}PqWd|krT|jdg}x0|D](}x"t|D]}||krl|j|qlWq^W|rg} nd} xL|D]D}|dkrPtjj||dd|} tjj | r|r| j| q| SqW| S) NLANGUAGELC_ALL LC_MESSAGESLANGr@Cz%s.mo)rrrr) _default_localedirosenvironrFrr_rfpathjoinexists) domain localedir languagesallZenvarreZnelangsZlangZnelangrHmofilerrr rs8        c Cs|dkr t}t|||dd}|s6|r*tSttd|d}x|D]|}|tjj|f} tj | } | dkrt |d} tj | || } WdQRXt j | } |r| j ||dkr| }q@|j| q@W|S)NT)rz$No translation file found for domainrb)rrrrrrrabspath _translationsrFopen setdefaultcopyryrn) rrrZclass_rordZmofilesrHrkeytrlrrr rs*      cCst||d|d}|j|dS)NT)rord)rr)rrrdr~rrrr rsZmessagescCs|dk r |atS)N)_current_domain)rrrr r 'scCs|dk r|t|<tj|tS)N) _localedirsrFr)rrrrr r .scCs|dk r|t|<tj|S)N)_localecodesetsrF)rrdrrr r 5sc Cs@y t|tj|dtj|d}Wntk r4|SX|j|S)N)rd)rrrFrrr)rrprrrr r <s c CsRtj|}yt|tj|d|d}Wn"tk rF|j|pBtjSX|j|S)N)rd) rrFrrrrqrrrr)rrprdrrrr rDs  c CsTy t|tj|dtj|d}Wn$tk rD|dkr<|S|SYnX|j|||S)N)rdr4)rrrFrrr)rrsrtr:rrrr r Ls c Cshtj|}yt|tj|d|d}Wn4tk rX|dkrB|}n|}|j|pTtjSX|j|||S)N)rdr4) rrFrrrrqrrrr)rrsrtr:rdrrurrr rWs cCs tt|S)N)r r)rprrr rcscCs tt|S)N)rr)rprrr rfscCstt|||S)N)r r)rsrtr:rrr riscCstt|||S)N)rr)rsrtr:rrr rlsr#r$r%r&r'r(r)r*r+r,r-r.r/)rrrrrr)r)NNF)NNNFN)NNN)N)N)N)1__doc__rriorrrsyserrnor__all__rr base_prefixrcompileVERBOSEDOTALLrr!r"rDrrErBrQrYrfrrrrrrrrrr r r r rr rrrrrrrrrr  s^&8         1$*K &