
    h                         d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZ d dlmZ d dlmZ  G d d	ed	         Zy)
    N)contextmanager)
ContextVar)Path)Dict	GeneratorOptionalTupleUnion)	LazyProxy)ContextInstanceMixinc                   `   e Zd Zddddeeef   dededdfd	Zedefd
       Zej                  deddfd       Ze
deded   fd       Ze
ded   fd       Zdeeej                   f   fdZddZedeedf   fd       Z	 ddedee   dedee   def
dZ	 ddedee   dedee   def
dZy)I18nenmessages)default_localedomainpathr   r   returnNc                |    || _         || _        || _        t        d|      | _        | j                         | _        y )Naiogram_ctx_locale)default)r   r   r   r   
ctx_localefind_localeslocales)selfr   r   r   s       J/var/www/html/venv/lib/python3.12/site-packages/aiogram/utils/i18n/core.py__init__zI18n.__init__   s9     	,$%9>R((*    c                 6    | j                   j                         S N)r   getr   s    r   current_localezI18n.current_locale   s    ""$$r   valuec                 :    | j                   j                  |       y r    )r   set)r   r$   s     r   r#   zI18n.current_locale   s    E"r   locale)NNNc              #      K   | j                   j                  |      }	 d | j                   j                  |       y# | j                   j                  |       w xY ww)z6
        Create context with specified locale
        N)r   r&   reset)r   r'   	ctx_tokens      r   
use_localezI18n.use_locale"   sH     
 OO''/		-OO!!),DOO!!),s   A? AAA)r   NNc              #      K   | j                  |       }	 |  | j                  |       y# | j                  |       w xY ww)z"
        Use I18n context
        N)set_currentreset_current)r   tokens     r   contextzI18n.context-   s>     
   &	&Ju%Du%s   A+ A>Ac                 r   i }t        j                  | j                        D ]  }t         j                  j                  t         j                  j	                  | j                  |            sLt         j                  j	                  | j                  |d| j
                  dz         }t         j                  j                  |      r.t        |d      5 }t        j                  |      ||<   ddd       t         j                  j                  |dd dz         st        d| d       |S # 1 sw Y   xY w)	zY
        Load all compiled locales from path

        :return: dict with locales
        LC_MESSAGESz.morbNpozFound locale 'z$' but this language is not compiled!)oslistdirr   isdirjoinr   existsopengettextGNUTranslationsRuntimeError)r   translationsnamemo_pathfps        r   r   zI18n.find_locales8   s     <>JJtyy) 		`D77==dii!>?ggll499dM4;;QVCVWGww~~g&'4( EB)0)@)@)DL&E Et 34"^D69]#^__		` E Es   D,,D6	c                 .    | j                         | _        y)z$
        Hot reload locales
        N)r   r   r"   s    r   reloadzI18n.reloadM   s     ((*r   .c                 H    t        | j                  j                               S )z:
        list of loaded locales

        :return:
        )tupler   keysr"   s    r   available_localeszI18n.available_localesS   s     T\\&&())r   singularpluralnc                     || j                   }|| j                  vr|dk(  r|S |r|S |S | j                  |   }||j                  |      S |j                  |||      S )z
        Get text

        :param singular:
        :param plural:
        :param n:
        :param locale:
        :return:
           )r#   r   r<   ngettext)r   rI   rJ   rK   r'   
translators         r   r<   zI18n.gettext\   sr     >((F%Av#611\\&)
>%%h//""8VQ77r   c                 8    t        | j                  ||||d      S )NF)rI   rJ   rK   r'   enable_cache)r   r<   )r   rI   rJ   rK   r'   s        r   lazy_gettextzI18n.lazy_gettextv   s#     LL8Fa]b
 	
r   )r   N)NrM   N)__name__
__module____qualname__r
   strr   r   propertyr#   setterr   r   r+   r0   r   r<   r=   r   rD   r	   rH   r   intr   rR    r   r   r   r      s   
 # + CI+ 	+
 + 
+ % % % #C #D # # - -3C)D - - &#56 & &d3(?(?#?@ *+ *5c? * * `d88%-c]8>A8OWX[}8	86 `d

%-c]
>A
OWX[}
	
r   r   )r<   r6   
contextlibr   contextvarsr   pathlibr   typingr   r   r   r	   r
   aiogram.utils.i18n.lazy_proxyr   aiogram.utils.mixinsr   r   rZ   r   r   <module>ra      s4     	 % "  : : 3 5o
' o
r   