ó
 €Nc           @   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	 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 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   countryb   s    c         C   s±   g  } t  j d d g d t  j ƒ} x† t j | j ƒ  d d ƒ D]h } | j ƒ  } | j d ƒ d k  rn qA n  t j	 |  j
 | ƒ } | d } | | k rA | j | ƒ qA qA 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   stringR    t   communicateR   t   findt   macrost   LangpackMacrosR   t   append(   R!   t   localest   pR+   R,   t   macrR1   (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   generated_localesh   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_languagey   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    RC   (   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 rId | ˆ  d
 f } n  | t k rx| rk| t j d <qx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(   NRJ   (   R   (   t   k(   R?   (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   <lambda>­   s    i   s   %s (%s)t   VARIANTs   %s - %sN(   R:   R;   R   t   Truet   NoneR   t   environRE   t   lenRH   t   filterR@   t   FalseR0   (
   R!   R1   t   nativet   allCountriest	   returnValt   current_languageRD   RG   t   lt	   mycountry(    (   R?   s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt	   translatež   s.    *c         C   sa   t  j |  j | ƒ } | d } | d } | |  j k rC |  j | S| | k rS | Sd | | f 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
        RJ   R3   s   %s:%s(   R:   R;   R   R   (   R!   R)   R?   t   langcodeR1   (    (    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Ë x} t | ƒ D]l } t j d | ƒ } | r‘ | j	 d ƒ j
 d ƒ } n  t j d | ƒ } | rX | j	 d ƒ j
 d ƒ } qX qX Wn  t | ƒ d k rët j ƒ  } d t j d k rt  j d	 ƒ rt  j d	 }	 n t j t  j ƒ  ƒ j }	 y‚ | j d
 d ƒ }
 t j |
 d d
 ƒ} | j |	 ƒ } | j d
 | ƒ }
 t j |
 d d ƒ} | j d d ƒ } |  j | ƒ } Wqët k
 rç} t j | j d j d ƒ ƒ qëXn  t | ƒ d k rd t  j k rt  j d } n  t | ƒ d k r‡t | ƒ d k r‡d t  j k rrt  j d | k rrt  j d } q„|  j | ƒ } q‡n  | j  | ƒ | j  | ƒ | S(   sø  
        Reads '~/.profile' if present; otherwise - or if '~/.profile' doesn't set any
        values - AccountsService is queried.
        Scans for LANG and LANGUAGE variable settings and returns a list [LANG, LANGUAGE].
        In the case of AccountsService, we only have one language, not the full LANGUAGE
        variable compatible string. Therefore we generate one from the provided language.
        Likewise, if LANGUAGE is not defined, generate a string from the provided LANG value.
        R   s
   ~/.profiles   export LANG=(.*)$i   t   "s   export LANGUAGE=(.*)$i    s   fontconfig-voodoot	   SUDO_USERs   org.freedesktop.Accountss   /org/freedesktop/Accountst   dbus_interfaces   org.freedesktop.DBus.Propertiess   org.freedesktop.Accounts.Usert   Languages   UTF-8t   LANGRI   (!   R   R   t
   expandusert   existst   accesst   R_OKR   t   ret   matcht   groupR   RR   t   dbust	   SystemBust   syst   argvt   getenvRQ   t   pwdt   getpwuidt   geteuidt   pw_namet
   get_objectt	   Interfacet   FindUserByNamet   GetR]   t	   Exceptiont   warningst   warnt   argst   encodeR<   (   R!   R(   t   languaget   resultt   fnameR+   t
   match_langt   match_languaget   bust	   user_namet   objt   ifacet	   user_patht   firstLanguaget   msg(    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   getUserDefaultLanguageÝ   sN    	""!"c         C   sˆ  d } d } g  } x|  j  D]} 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 ƒ j d ƒ } n  | j d ƒ r× | j d d ƒ } n  t	 j
 d | ƒ } | rV | j d ƒ j d ƒ } qV qV Wt | ƒ d k r'Pq'q q Wt | ƒ d k rFd	 } n  t | ƒ d k rj|  j | ƒ } n  | j | ƒ | j | ƒ | S(
   s³   
        Reads '/etc/default/locale' if present, and if not '/etc/environment'.
        Scans for LANG and LANGUAGE variable settings and returns a list [LANG, LANGUAGE].
        R   Rb   R^   s
   LANG=(.*)$i   RI   s   LANGUAGE=(.*)$i    s   en_US.UTF-8(   t   environmentsR   R   Rd   Re   Rf   R   R   t   replaceRg   Rh   Ri   R   RR   R]   R<   (   R!   R(   R|   R}   R~   R+   R   R€   (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   getSystemDefaultLanguage  s4    	c         C   s   t  j |  j d t  j ƒ s  t Si  } xL t |  j d ƒ D]7 } x. d	 D]& } | j d | ƒ rG d | | <qG qG Wq: Wt | ƒ d k  r‹ t St S(
   Ni    RI   t   LC_MESSAGESt   LC_CTYPEt
   LC_COLLATEs   %s=i   i   (   s   LANGUAGERŒ   R   RŽ   (	   R   Re   R‰   Rf   RT   R   R   RR   RO   (   R!   t   language_varsR+   t   var(    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   isCompleteSystemLanguage6  s    c         C   s¨   t  j j d ƒ } t  j | t  j ƒ s+ t Si  } xZ t | ƒ D]L } | j d ƒ sY q> n  x. d
 D]& } | j d | ƒ r` d | | <q` q` Wq> Wt | ƒ d	 k  r¤ t St	 S(   Ns
   ~/.profilet   exportRI   RŒ   R   RŽ   s
   export %s=i   i   (   s   LANGUAGEs   LC_MESSAGESs   LC_CTYPEs
   LC_COLLATE(
   R   R   Rc   Re   Rf   RT   R   R   RR   RO   (   R!   R~   R   R+   R   (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyt   isCompleteUserLanguageB  s    (   t   __name__t
   __module__t   __doc__R‰   R/   R(   R0   R@   RE   RH   RT   R[   R]   Rˆ   R‹   R‘   R“   (    (    (    s?   /usr/lib/python2.7/dist-packages/LanguageSelector/LocaleInfo.pyR      s   	E				
	/		6	#	t   __main__s   /usr/share/language-selector/t   languagelists)   default system locale and languages: '%s's'   default user locale and languages: '%s'(   R7   Rg   R4   R    R   Ro   Rl   Rj   Rx   R:   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,   ÿ @