
    EZi                         U d Z ddlZddlZddlmZmZ  G d d      Zdaee   ed<   ddee	   defd	Z
d
e	de	fdZdeee	e	e	f      fdZy)zo
Internationalization (i18n) module for Gradio UI
Supports multiple languages with easy translation management
    N)DictOptionalc                       e Zd ZdZddefdZd ZdefdZdedefd	Zd
e	dede
e   fdZdefdZdeeeeef      fdZy)I18nzInternationalization handlerdefault_languagec                 N    || _         g | _        i | _        | j                          y)z
        Initialize i18n handler
        
        Args:
            default_language: Default language code (en, zh, ja, etc.)
        N)current_languagelanguages_infotranslations_load_all_translations)selfr   s     :/mnt/workspace/ACE-Step-1.5/acestep/ui/gradio/i18n/i18n.py__init__zI18n.__init__   s(     !1:<79##%    c                    t         j                  j                  t              }t         j                  j	                  |      }t         j                  j                  |      st        j                  |       yt        j                  |      D ]   }|j                  d      s|dd }t         j                  j                  ||      }	 t        |dd      5 }t        j                  |      | j                  |<   ddd       | j                  | j                  j                  |i       d      xs |j!                         }| j                  | j                  j                  |i       d      xs |}| j"                  j%                  |||f        y# 1 sw Y   xY w# t&        $ r}	t)        d	| d
|	        Y d}	~	1d}	~	ww xY w)z/Load all translation files from i18n directory.Nz.jsonrzutf-8)encodingzcommon.language_metadata.namez$common.language_metadata.native_namezError loading translation file z: )ospathabspath__file__dirnameexistsmakedirslistdirendswithjoinopenjsonloadr   _get_nested_valuegetupperr
   append	Exceptionprint)
r   current_filei18n_dirfilename	lang_codefilepathf	lang_namelang_native_namees
             r   r   zI18n._load_all_translations   s   wwx077??<0ww~~h'KK! 

8,H  )$SbM	77<<(;Yhg>!7;yy|)))4 ?
 !% 6 6))--i<7!9 !N<EOO<M  (,'='=))--i<>(@ (MCL % ''..	9FV/WX! -
 ?>  M;H:RsKLLMs0   	F#F:FF	F	G'F>>Glanguagec                 N    || j                   v r|| _        yt        d| d       y)zSet current languagezWarning: Language 'z' not found, using defaultN)r   r	   r'   )r   r1   s     r   set_languagezI18n.set_language6   s+    t((($,D!'z1KLMr   keyreturnc                 $   | j                  | j                  j                  | j                  i       |      }|,| j                  | j                  j                  di       |      }||}|r	  |j                  di |}|S |S # t
        $ r Y |S w xY w)z
        Translate a key to current language
        
        Args:
            key: Translation key (dot-separated for nested keys)
            **kwargs: Optional format parameters
        
        Returns:
            Translated string
        en )r"   r   r#   r	   formatKeyError)r   r4   kwargstranslations       r   tzI18n.t=   s     ,,!!$"7"7<
 00!!%%dB/K K 0k00:6: {  s   ,B 	BBdatac                     |j                  d      }|}|D ]  }t        |t              r
||v r||   } y t        |t              r|S dS )a  
        Get nested dictionary value using dot notation
        
        Args:
            data: Dictionary to search
            key: Dot-separated key (e.g., "section.subsection.key")
        
        Returns:
            Value if found, None otherwise
        .N)split
isinstancedictstr)r   r>   r4   keyscurrentks         r   r"   zI18n._get_nested_valueb   sR     yy~A'4(Q'\!!*	  %Wc2w<<r   c                 H    t        | j                  j                               S )z$Get list of available language codes)listr   rE   r   s    r   get_available_languageszI18n.get_available_languagesx   s    D%%**,--r   c                 ,    t        | j                        S )z
        Provides a list of tuples containing ISO codes and descriptive language names
        
        Returns:
            List of tuples (iso code, english name, native name)
         )rI   r
   rJ   s    r   get_available_languages_infoz!I18n.get_available_languages_info|   s     D''((r   N)r7   )__name__
__module____qualname____doc__rD   r   r   r3   r=   rC   r   r"   rI   rK   tuplerM   r8   r   r   r   r   
   s    &
& 
&Y:NS N#S #s #J=d = =# =,. .)d5c33G.H )r   r   _i18n_instancer1   r5   c                 t    t         t        | xs d      a t         S | t         j                  |        t         S )z
    Get global i18n instance
    
    Args:
        language: Optional language to set
    
    Returns:
        I18n instance
    r7   )r   )rS   r   r3   )r1   s    r   get_i18nrU      s=     x/?4@  
	##H-r   r4   c                 8     t               j                  | fi |S )z
    Convenience function for translation
    
    Args:
        key: Translation key
        **kwargs: Optional format parameters
    
    Returns:
        Translated string
    )rU   r=   )r4   r;   s     r   r=   r=      s     8:<<&v&&r   c                  2    t               j                         S )z
    Provides a list of tuples containing ISO codes and descriptive language names
    
    Returns:
        List of tuples (iso code, english name, native name)
    )rU   rM   r8   r   r   available_languages_inforX      s     :2244r   )N)rQ   r   r    typingr   r   r   rS   __annotations__rD   rU   r=   rI   rR   rX   r8   r   r   <module>r[      sx    
  !y) y)z "& %x}  ('3 'S '5$uS#s]';"< 5r   