import  os 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  json 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  gettext 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  openpilot . common . params  import  Params 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  openpilot . common . basedir  import  BASEDIR 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								UI_DIR  =  os . path . join ( BASEDIR ,  " selfdrive " ,  " ui " ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								TRANSLATIONS_DIR  =  os . path . join ( UI_DIR ,  " translations " ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								LANGUAGES_FILE  =  os . path . join ( TRANSLATIONS_DIR ,  " languages.json " ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  Multilang : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  __init__ ( self ) : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    self . _params  =  Params ( ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    self . languages  =  { } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . codes  =  { } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    self . _load_languages ( ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    print ( f " Multilang initialized with language:  { self . language } " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  @property 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  def  language ( self )  - >  str : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  self . _params . get ( " LanguageSetting " )  or  " en " 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  setup ( self ) : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    language  =  self . language 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    try : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      with  open ( os . path . join ( TRANSLATIONS_DIR ,  f ' app_ { language } .mo ' ) ,  ' rb ' )  as  fh : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								        translation  =  gettext . GNUTranslations ( fh ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      translation . install ( ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      tr  =  translation . gettext 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      trn  =  translation . ngettext 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      print ( f " Loaded translations for language:  { language } " ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    except  FileNotFoundError : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      print ( f " No translation file found for language:  { language } , using default. " ) 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      gettext . install ( ' app ' ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      tr  =  gettext . gettext 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      trn  =  gettext . ngettext 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    return  tr ,  trn 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  # def translate(self, text: str) -> str: 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  #   if self._language not in self._translations: 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  #     return text 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  #   return self._translations[self._language].get(text, text) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  # 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  def  _load_languages ( self ) : 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    with  open ( LANGUAGES_FILE ,  encoding = ' utf-8 ' )  as  f : 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								      self . languages  =  json . load ( f ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    self . codes  =  { v :  k  for  k ,  v  in  self . languages . items ( ) } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    print ( f " Available languages:  { self . languages } " ) 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# # l = gettext.translation('app_de', localedir=TRANSLATIONS_DIR, languages=['de']) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# with open(os.path.join(TRANSLATIONS_DIR, 'app_de.mo'), 'rb') as fh: 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								#   l = gettext.GNUTranslations(fh) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# l.install() 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# # tr = multilang.translate 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# # tr = gettext.gettext 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# tr = l.gettext 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# trn = l.ngettext 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# tr, trn = None, None 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# multilang = Multilang() 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								multilang  =  Multilang ( ) 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								tr ,  trn  =  multilang . setup ( )