ó
í†2Oc           @   s  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 Z d  d l m Z	 d  d l
 m Z d e f d „  ƒ  YZ e d k rd Z e d e ƒ Z d	 e j ƒ  GHd
 e j ƒ  GHe j GHe j GHe j GHe j ƒ  GHn  d S(   iÿÿÿÿN(   t   gettext(   t   ElementTreet
   LocaleInfoc           B   sƒ   e  Z d  Z d d g Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 e
 e
 d	 „ Z d
 „  Z d „  Z d „  Z d „  Z RS(   s<    class with handy functions to parse the locale information s   /etc/default/locales   /etc/environmentc         C   sh  | |  _  t j j | d | ƒ } i  |  _ i  |  _ i  |  _ t d d ƒ } | j d ƒ } xf | D]^ } | j	 d } d | j	 k r“ | j	 d } n | j	 d } | |  j k ra | |  j | <qa qa Wt
 d ƒ |  j d	 <t
 d
 ƒ |  j d <t d d ƒ } | j d ƒ } xG | D]? } | j	 d } | j	 d } | |  j k r| |  j | <qqWt d d ƒ } | j d ƒ } xs | D]k } d | j	 k r›| j	 d }	 n | j	 d }	 d | j	 k rÇ| j	 d } n | j	 d } |	 |  j | <qvWx| t | ƒ D]n }
 |
 j ƒ  } | j d ƒ sò| d k r%qòn  | j d ƒ } | d j d ƒ } d | d |  j | d <qòWd  S(   Nt   datat   files$   /usr/share/xml/iso-codes/iso_639.xmlt   iso_639_entryt   namet   iso_639_1_codet   iso_639_2T_codes   Chinese (simplified)s   zh-hanss   Chinese (traditional)s   zh-hants&   /usr/share/xml/iso-codes/iso_639_3.xmlt   iso_639_3_entryt   ids%   /usr/share/xml/iso-codes/iso_3166.xmlt   iso_3166_entryt   common_namet   alpha_2_codet   alpha_3_codet   #t    t   ;i   t   :s   %si    (   t   _datadirt   ost   patht   joint   _langt   _countryt   _languagelistR   t   getiteratort   attribt   _t   opent   stript
   startswitht   split(   t   selft   languagelist_filet   datadirt   LANGUAGELISTt   ett   itt   elmt   langt   codet   descrt   linet   tmpt   wt	   localeenv(    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   __init__   sP    				c         C   s   | |  j  k r |  j  | Sd S(   s$    map language code to language name R   (   R   (   R!   R)   (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyR(   [   s    c         C   s   | |  j  k r |  j  | Sd S(   s!    map country code to country nameR   (   R   (   R!   R)   (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   countrya   s    c         C   s®   g  } t  j d d g d t  j ƒ} xƒ | j ƒ  d j d ƒ D]h } | j ƒ  } | j d ƒ d k  rk q> n  t j |  j	 | ƒ } | d } | | k r> | j
 | ƒ q> q> W| S(   sR    return a list of locales available on the system
            (running locale -a) t   locales   -at   stdouti    s   
s   .utf8t   LOCALE(   t
   subprocesst   Popent   PIPEt   communicateR    R   t   findt   macrost   LangpackMacrosR   t   append(   R!   t   localest   pR+   R,   t   macrR1   (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   generated_localesg   s     
c         C   sc   | |  j  k r[ t j d |  j  | ƒ } | |  j  | k rW t j d |  j  | ƒ } n  | S| Sd S(   s   return translated languaget   iso_639t	   iso_639_3N(   R   R    t   dgettext(   R!   R(   t	   lang_name(    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   translate_languagex   s    c         C   s4   | |  j  k r, t j d |  j  | ƒ } | S| Sd S(   sš   
        return translated language and country of the given
        locale into the given locale, e.g. 
        (Deutsch, Deutschland) for de_DE
        t   iso_3166N(   R   R    RB   (   R!   R0   t   country_name(    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   translate_country‚   s    c   
         s…  d } t  j |  j | ƒ ‰  | t k r` d } d t j k rL t j d } n  ˆ  d t j d <n  |  j ˆ  d ƒ } | } t ˆ  d ƒ d k r|  j	 ˆ  d ƒ } t
 ‡  f d †  |  j ƒ  ƒ } | t k rÞ t | ƒ d k sê | t k r|  j ˆ  d ƒ }	 |	 rd	 | | f } qqn  t ˆ  d
 ƒ d k rRd | ˆ  d
 j d ƒ f } n  | t k r| rt| t j d <qt j d =n  | S(   s4    get a locale code and output a human readable name R   t   LANGUAGER3   t   LCODEt   CCODEi    c            s   |  j  ˆ  d ƒ S(   NRI   (   R   (   t   k(   R>   (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   <lambda>¬   s    i   s   %s (%s)t   VARIANTs   %s - %ss   UTF-8N(   R9   R:   R   t   Truet   NoneR   t   environRD   t   lenRG   t   filterR?   t   FalseR0   t   encode(
   R!   R1   t   nativet   allCountriest	   returnValt   current_languageRC   RF   t   lt	   mycountry(    (   R>   s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt	   translate   s.    * c         C   s£   | s
 d St  j |  j | ƒ } | d } | d } | |  j k rR |  j | } n% | | k rg | } n d | | f } | j d ƒ p | d k sŸ d | } n  | S(   s—    input is a language code, output a string that can be put in
            the LANGUAGE enviroment variable.
            E.g: en_DK -> en_DK:en
        R   RI   R3   s   %s:%ss   :ent   ens   %s:en(   R9   R:   R   R   t   endswith(   R!   R)   R>   t   langcodeR1   t   langlist(    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   makeEnvStringÌ   s    

	c         C   s¨  d } d } g  } t  j j d ƒ } t  j j | ƒ r t  j | t  j ƒ r xA t | ƒ D]0 } t j d | ƒ } | rX | j	 d ƒ } qX qX Wn  d t
 j d k rÁ t  j d ƒ rÁ t  j d } n t j t  j ƒ  ƒ j } yµ t j ƒ  } | j d d	 ƒ }	 t j |	 d
 d ƒ}
 |
 j | ƒ } | j d | ƒ }	 t j |	 d
 d ƒ}
 |
 j d d ƒ } t | ƒ d k r|
 j d d ƒ } |  j | ƒ } n  Wn0 t k
 rÀ} t j | j d j d ƒ ƒ n Xt | ƒ d k ròd t  j k ròt  j d } n  t | ƒ d k r#d t  j k r#t  j d } n  t | ƒ d k rTd t  j k rTt  j d } n  t | ƒ d k rŠt | ƒ d k rŠ|  j | ƒ } n  | j | ƒ | j | ƒ | S(   NR   s   ~/.pam_environments   LANGUAGE=(.*)$i   s   fontconfig-voodooi    t	   SUDO_USERs   org.freedesktop.Accountss   /org/freedesktop/Accountst   dbus_interfaces   org.freedesktop.DBus.Propertiess   org.freedesktop.Accounts.Usert   FormatsLocalet   Languages   UTF-8RH   t   LC_NAMEt   LANG(    R   R   t
   expandusert   existst   accesst   R_OKR   t   ret   matcht   groupt   syst   argvt   getenvRP   t   pwdt   getpwuidt   geteuidt   pw_namet   dbust	   SystemBust
   get_objectt	   Interfacet   FindUserByNamet   GetRQ   R`   t	   Exceptiont   warningst   warnt   argsRT   R;   (   R!   t   formatst   languaget   resultt   fnameR+   t   match_languaget	   user_namet   bust   objt   ifacet	   user_patht   firstLanguaget   msg(    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   getUserDefaultLanguageâ   sL    "!!!$c   
      C   så  d } d } d } g  } xR|  j  D]G} t j j | ƒ r" t j | t j ƒ r" xþ t | ƒ D]ð } | j d ƒ r† | j d d ƒ } n  t	 j
 d | ƒ } | r° | j d ƒ } n  | j d ƒ rÔ | j d d ƒ } n  t	 j
 d | ƒ } | rþ | j d ƒ } n  | j d ƒ r"| j d d ƒ } n  t	 j
 d	 | ƒ }	 |	 r\ |	 j d ƒ } q\ q\ Wt | ƒ d
 k riPqiq" q" Wt | ƒ d
 k rˆd } n  t | ƒ d
 k r¬|  j | ƒ } n  t | ƒ d
 k rÇ| } n  | j | ƒ | j | ƒ | S(   NR   Rf   t   "s
   LANG=(.*)$i   t   LC_TIMEs   LC_TIME=(.*)$RH   s   LANGUAGE=(.*)$i    s   en_US.UTF-8(   t   environmentsR   R   Rh   Ri   Rj   R   R   t   replaceRk   Rl   Rm   RQ   R`   R;   (
   R!   R(   R   R€   R   R‚   R+   t
   match_langt   match_formatsRƒ   (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   getSystemDefaultLanguage  sD    		c         C   sU   t  j |  j d t  j ƒ s  t Sx. t |  j d ƒ D] } | j d ƒ r4 t Sq4 Wt S(   Ni    s   LC_TIME=(   R   Ri   RŽ   Rj   RS   R   R   RN   (   R!   R+   (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   isSetSystemFormats5  s    (   t   __name__t
   __module__t   __doc__RŽ   R/   R(   R0   R?   RD   RG   RS   R[   R`   R‹   R’   R“   (    (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyR      s   	E				
	/		,	't   __main__s   /usr/share/language-selector/t   languagelists)   default system locale and languages: '%s's'   default user locale and languages: '%s'(   Rk   R4   R    R   Rq   Rn   Ru   R|   R9   R   t   xml.etree.ElementTreeR   t   objectR   R”   R#   t   liR’   R‹   R   R   R   R?   (    (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   <module>   s*   ÿ -