
    k!fA2                        d dl mZ d dl m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 dlmZ  G d de      Zed	k(  rd
Z ede      Z edej-                         z          edej/                         z          eej0                          eej2                          eej4                          eej7                                yy)    )print_function)absolute_importN)macros)gettext)ElementTreec                   Z    e Zd ZdZdgZd Zd Zd Zd Zd Z	d Z
dd	Zd
 Zd Zd Zd Zy)
LocaleInfoz< class with handy functions to parse the locale information z/etc/default/localec                 *   || _         t        j                  j                  |d|      }i | _        i | _        i | _        t        d      }|j                  d      }|D ]k  }d|j                  v r|j                  d   }n|j                  d   }d|j                  v r|j                  d   }n|j                  d   }|| j                  |<   m t        d	      | j                  d
<   t        d      | j                  d<   t        d      }|j                  d      }|D ]k  }d|j                  v r|j                  d   }	n|j                  d   }	d|j                  v r|j                  d   }n|j                  d   }|	| j
                  |<   m t        |      5 }
|
D ]f  }|j                         }|j                  d      s|dk(  r*|j                  d      }|d   j                  d      }d|d   z  | j                  |d   <   h 	 d d d        y # 1 sw Y   y xY w)Ndataz&/usr/share/xml/iso-codes/iso_639_3.xml)fileiso_639_3_entrycommon_namename
part1_codeidzChinese (simplified)zzh-hanszChinese (traditional)zzh-hantz%/usr/share/xml/iso-codes/iso_3166.xmliso_3166_entryalpha_2_codealpha_3_code# ;   :z%sr   )_datadirospathjoin_lang_country_languagelistr   iterattrib_openstrip
startswithsplit)selflanguagelist_filedatadirLANGUAGELISTetitelmlangcodedescrflinetmpw	localeenvs                  =/usr/lib/python3/dist-packages/LanguageSelector/LocaleInfo.py__init__zLocaleInfo.__init__   s   ww||GV5FG 
    FGWW&' 		$C

*zz-0zz&)szz)zz,/zz$'#DJJt		$ !""8 9

9 !"9 :

9 EFWW%& 		(C

*

=1

6*+zz.1zz.1"'DMM$		( , 	?1 ?jjl>>#&#)IIcN aDJJsO	37!A$;""9Q<0?	? 	? 	?s   A,H		Hc                 >    || j                   v r| j                   |   S y)z$ map language code to language name r   )r   r(   r0   s     r7   r/   zLocaleInfo.lang[   s     4::::d##    c                 >    || j                   v r| j                   |   S y)z! map country code to country namer   )r   r:   s     r7   countryzLocaleInfo.countrya   s     4== ==&&r;   c                 h   g }t        j                  ddgt         j                  d      }|j                         d   j	                  d      D ]b  }|j                         }|j                  d      dk  r(t        j                  | j                  |      }|d   }||vsR|j                  |       d |S )	zR return a list of locales available on the system
            (running locale -a) localez-aT)stdoutuniversal_newlinesr   
z.utf8LOCALE)
subprocessPopenPIPEcommunicater'   r%   findr   LangpackMacrosr   append)r(   localespr3   r4   macrr?   s          r7   generated_localeszLocaleInfo.generated_localesg   s     h-joo046MMOA&,,T2 	'D**,Cxx 1$((<D(^FW$v&	' r;   c                     || j                   v rZt        j                  d| j                   |         }|| j                   |   k(  r#t        j                  d| j                   |         }|S |S )zreturn translated languageiso_639	iso_639_3)r   r   dgettext)r(   r/   	lang_names      r7   translate_languagezLocaleInfo.translate_languagey   s`    4::((DJJt4DEIDJJt,,#,,[$**T:JK	Kr;   c                 l    || j                   v r%t        j                  d| j                   |         }|S |S )z
        return translated language and country of the given
        locale into the given locale, e.g. 
        (Deutsch, Deutschland) for de_DE
        iso_3166)r   r   rR   )r(   r=   country_names      r7   translate_countryzLocaleInfo.translate_country   s6      dmm#"++Jg8NOLNr;   c                    d}t        j                  | j                  |      }|dk(  r=d}dt        j                  v rt        j                  d   }|d   t        j                  d<   | j                  |d         }|}t        |d         dkD  r|| j                  |d         }| j                         D 	cg c]  }	|	j                  |d         s|	 }
}	|d	k(  rt        |
      d
kD  s|dk(  r| j                  |d         }|r|d|d}t        |d         dkD  r
|d|d   }|dk(  r(r|t        j                  d<   |S t        j                  d= |S c c}	w )z4 get a locale code and output a human readable name r   TNLANGUAGErC   LCODECCODEr   F   z ()VARIANTz - )r   rI   r   r   environrT   lenrX   rN   r&   r=   )r(   r?   nativeallCountries	returnValrM   current_languagerS   rW   kl	mycountrys               r7   	translatezLocaleInfo.translate   sQ   	$$T]]F;T>#RZZ'#%::j#9 %)(^BJJz"++DM:		tG}!11$w-@L 224TqT']8STAT%#a&1*9M LLg7	-6 EItI!#%.Y@IT>)9

:&  JJz* Us   2EEc                     |syt        j                  | j                  |      }|d   }|d   }|| j                  v r| j                  |   }n||k(  r|}n|d|}|j	                  d      s
|dk(  sd|z  }|S )z 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   r[   rC   r   z:enenz%s:en)r   rI   r   r    endswith)r(   r0   rM   langcoder?   langlists         r7   makeEnvStringzLocaleInfo.makeEnvString   s    
 $$T]]D9=hT'''))&1HxH"((3H!!%(H,<)Hr;   c                    d}d}g }t         j                  j                  d      }t         j                  j                  |      rjt        j                  |t         j
                        rFt        |      5 }|D ],  }t        j                  d|      }|s|j                  d      }. 	 d d d        t        j                  t        j                               j                  }	 t        j                         }	|	j!                  dd      }
t        j"                  |
d      }|j%                  |      }|	j!                  d|      }
t        j"                  |
d      }|j'                  d	d
      }t)        |      dk(  r#|j'                  d	d      }| j+                  |      }t)        |      dk(  r%dt         j4                  v rt         j4                  d   }t)        |      dk(  r%dt         j4                  v rt         j4                  d   }t)        |      dk(  r%dt         j4                  v rt         j4                  d   }t)        |      dkD  rt)        |      dk(  r| j+                  |      }|j7                  |       |j7                  |       |S # 1 sw Y   xY w# t,        $ r-}t/        j0                  |j2                  d          Y d }~(d }~ww xY w)Nr   z~/.pam_environmentzLANGUAGE(\s+DEFAULT)?=(.*)$   zorg.freedesktop.Accountsz/org/freedesktop/Accounts)dbus_interfacezorg.freedesktop.DBus.Propertieszorg.freedesktop.Accounts.UserFormatsLocaler   LanguagerZ   LC_NAMELANG)r   r   
expanduserexistsaccessR_OKr$   rematchgrouppwdgetpwuidgeteuidpw_namedbus	SystemBus
get_object	InterfaceFindUserByNameGetra   ro   	Exceptionwarningswarnargsr`   rJ   )r(   formatslanguageresultfnamer2   r3   match_language	user_namebusobjiface	user_pathfirstLanguagemsgs                  r7   getUserDefaultLanguagez!LocaleInfo.getUserDefaultLanguage   s7   ""#7877>>% 99UBGG$e ; ;D%'XX.LT%RN%#1#7#7#:;;
 LL.66		.."C..!;=XYCNN37QRE,,Y7I..!;YGCNN37XYEii ?QG8}! %		*I: V--m<
 x=A*

":zz*-Hw<1bjj!8jj+Gw<12::!5jj(Gw<!H 2))'2HghA; ;$  	MM#((1+&	s+   4JJ!B:J J	K"KKc                    d}d}d}g }| j                   D ]I  }t        j                  j                  |      s$t        j                  |t        j
                        sIt        |      5 }|D ]  }|j                  d      r|j                  dd      }t        j                  d|      }|r|j                  d      }|j                  d      r|j                  dd      }t        j                  d|      }	|	r|	j                  d      }|j                  d      r|j                  dd      }t        j                  d	|      }
|
s|
j                  d      } 	 d d d        L t        |      d
k(  rd}t        |      d
k(  r| j                  |      }t        |      d
k(  r|}|j                  |       |j                  |       |S # 1 sw Y   xY w)Nr   rv   "z
LANG=(.*)$r]   LC_TIMEzLC_TIME=(.*)$rZ   zLANGUAGE=(.*)$r   zen_US.UTF-8)environmentsr   r   rx   ry   rz   r$   r&   replacer{   r|   r}   ra   ro   rJ   )r(   r/   r   r   r   r   r2   r3   
match_langmatch_formatsr   s              r7   getSystemDefaultLanguagez#LocaleInfo.getSystemDefaultLanguage  s   && 	?Eww~~e$yy(%[ ?A ! ???62#'<<B#7D%'XXmD%A
%#-#3#3A#6D??95#'<<B#7D(*1A$(G(&3&9&9!&<G??:6#'<<B#7D)+2CD)I)'5';';A'>H!?? ?	?* t9> Dx=A))$/Hw<1Ggh9? ?s   )CGGG	c                    t        j                  | j                  d   t         j                        syt	        | j                  d         5 }|D ]  }|j                  d      s d d d        y 	 d d d        y# 1 sw Y   yxY w)Nr   FzLC_TIME=T)r   ry   r   rz   r$   r&   )r(   r2   r3   s      r7   isSetSystemFormatszLocaleInfo.isSetSystemFormats2  sy    yy**1-rww7$##A&' 	 1  ??:.	  	  	  		  s   A8#A8-A88BN)FF)__name__
__module____qualname____doc__r   r8   r/   r=   rN   rT   rX   ri   ro   r   r   r    r;   r7   r	   r	      sH    B)*L??B$6^,'R$Lr;   r	   __main__z/usr/share/language-selector/languagelistz)default system locale and languages: '%s'z'default user locale and languages: '%s')
__future__r   r   r{   rD   r   r   r~   sysr   r   LanguageSelectorr   r#   xml.etree.ElementTreer   objectr	   r   r*   liprintr   r   r   r   r    rN   r   r;   r7   <module>r      s   
 & & 	   	 
 
   #   -c cL	 z-G	NG	,B	
58S8S8U
UV	
3b6O6O6Q
QR	"((O	"++	"

	"


 ! r;   