Ë
    ö­¦jÝ  ã                  ó  — d dl mZ d dlmZmZ d dlmZmZ 	 d dlm	Z	m
Z
 d dlmZmZ erd d	lmZmZ d d
lmZ d dlmZmZ d dlmZ  G d„ dee«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Zy# e$ r dZ	 G d„ de«      Z
Y Œhw xY w)é    )Úannotations)ÚABCÚabstractmethod)ÚTYPE_CHECKINGÚAny)ÚLocaleÚUnknownLocaleErrorNc                  ó   — e Zd Zy)r	   N)Ú__name__Ú
__module__Ú__qualname__© ó    úP/var/www/html/venv/lib/python3.12/site-packages/aiogram/utils/i18n/middleware.pyr	   r	      s   „ Ør   r	   )ÚBaseMiddlewareÚRouter)Ú	AwaitableÚCallable)Ú
FSMContext)ÚTelegramObjectÚUser)ÚI18nc                  óp   — e Zd ZdZ	 	 d	 	 	 	 	 	 	 dd„Z	 d		 	 	 	 	 	 	 d
d„Z	 	 	 	 	 	 	 	 dd„Zedd„«       Zy)ÚI18nMiddlewarez#
    Abstract I18n middleware.
    c                ó.   — || _         || _        || _        y)zÏ
        Create an instance of middleware

        :param i18n: instance of I18n
        :param i18n_key: context key for I18n instance
        :param middleware_key: context key for this middleware
        N©Úi18nÚi18n_keyÚmiddleware_key)Úselfr   r   r   s       r   Ú__init__zI18nMiddleware.__init__   s   € ð ˆŒ	Ø ˆŒØ,ˆÕr   Nc                ó˜   — |€
t        «       }dh|£}|j                  j                  «       D ]  \  }}||v rŒ|j                  | «       Œ | S )zƒ
        Register middleware for all events in the Router

        :param router:
        :param exclude:
        :return:
        Úupdate)ÚsetÚ	observersÚitemsÚouter_middleware)r    ÚrouterÚexcludeÚexclude_eventsÚ
event_nameÚobservers         r   ÚsetupzI18nMiddleware.setup/   s`   € ð ˆ?Ü“eˆGØ"Ð- WÐ-ˆØ$*×$4Ñ$4×$:Ñ$:Ó$<ò 	,Ñ ˆJ˜Ø˜^Ñ+ØØ×%Ñ% dÕ+ð	,ð ˆr   c              ƒ  óî  K  — | j                  ||¬«      ƒ d {  –—† xs | j                  j                  }| j                  r| j                  || j                  <   | j                  r| || j                  <   | j                  j                  «       5  | j                  j                  |«      5   |||«      ƒ d {  –—† cd d d «       cd d d «       S 7 Œ¶7 Œ# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w­w)N©ÚeventÚdata)Ú
get_localer   Údefault_localer   r   ÚcontextÚ
use_locale)r    Úhandlerr0   r1   Úcurrent_locales        r   Ú__call__zI18nMiddleware.__call__D   sÌ   è ø€ ð  $Ÿ™°UÀ˜ÓF×FÒbÈ$Ï)É)×JbÑJbˆà�=Š=Ø"&§)¡)ˆD�—‘ÑØ×ÒØ(,ˆD�×$Ñ$Ñ%à�Y‰Y×ÑÓ ñ 	. $§)¡)×"6Ñ"6°~Ó"Fñ 	.Ù  ¨Ó-×-÷	.÷ 	.ò 	.ð Gøð .ø÷	.ð 	.ú÷ 	.÷ 	.ñ 	.üsX   ‚C5™CšA6C5ÂC)Â,CÂ9CÂ:CÂ=	C)ÃC5ÃCÃC	ÃC)Ã 	C5Ã)C2Ã.C5c              ƒ  ó   K  — y­w)z¿
        Detect current user locale based on event and context.

        **This method must be defined in child classes**

        :param event:
        :param data:
        :return:
        Nr   ©r    r0   r1   s      r   r2   zI18nMiddleware.get_localeT   s   è ø� ùs   ‚©r   Úi18n_middleware©r   r   r   ú
str | Noner   ÚstrÚreturnÚNone©N)r    r   r(   r   r)   zset[str] | Noner@   r   )r6   z:Callable[[TelegramObject, dict[str, Any]], Awaitable[Any]]r0   r   r1   údict[str, Any]r@   r   ©r0   r   r1   rC   r@   r?   )	r   r   r   Ú__doc__r!   r-   r8   r   r2   r   r   r   r   r      s§   „ ñð  &Ø/ð	-àð-ð ð-ð ð	-ð
 
ó-ð( $(ðØðàðð !ðð 
ó	ð*.àKð.ð ð.ð ð	.ð
 
ó.ð  ò	ó ñ	r   r   c                  ó@   ‡ — e Zd ZdZ	 	 d	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚSimpleI18nMiddlewarezc
    Simple I18n middleware.

    Chooses language code from the User object received in event
    c                ó|   •— t         ‰| �  |||¬«       t        €#t        | «      j                  › d�}t        |«      ‚y )Nr   úŠ can be used only when Babel installed
Just install Babel (`pip install Babel`) or aiogram with i18n support (`pip install aiogram[i18n]`))Úsuperr!   r   Útyper   ÚRuntimeError)r    r   r   r   ÚmsgÚ	__class__s        €r   r!   zSimpleI18nMiddleware.__init__h   sQ   ø€ ô 	‰Ñ˜d¨XÀnÐÔUäˆ>ä˜“:×&Ñ&Ð'ð (Mð Mð ô
 ˜sÓ#Ð#ð r   c              ƒ  ó,  K  — t         €#t        | «      j                  › d�}t        |«      ‚|j	                  d«      }|�|j
                  €| j                  j                  S 	 t        j                  |j
                  d¬«      }t        |«      g}|j                  r|j                  |j                  «       |D ]  }|| j                  j                  v sŒ|c S  | j                  j                  S # t        $ r | j                  j                  cY S w xY w­w)NrI   Úevent_from_userú-)Úsep)r   rK   r   rL   ÚgetÚlanguage_coder   r3   Úparser	   r?   Ú	territoryÚappendÚlanguageÚavailable_locales)r    r0   r1   rM   rP   ÚlocaleÚ
candidatesÚ	candidates           r   r2   zSimpleI18nMiddleware.get_localex   s  è ø€ Üˆ>ä˜“:×&Ñ&Ð'ð (Mð Mð ô
 ˜sÓ#Ð#à'+§x¡xÐ0AÓ'BˆØÐ" o×&CÑ&CÐ&KØ—9‘9×+Ñ+Ð+ð	,Ü—\‘\ /×"?Ñ"?ÀSÔIˆFô ˜&“k�]ˆ
Ø×ÒØ×Ñ˜fŸo™oÔ.Ø#ò 	!ˆIØ˜DŸI™I×7Ñ7Ò7Ø Ò ð	!ð �y‰y×'Ñ'Ð'øô "ò 	,Ø—9‘9×+Ñ+Ò+ð	,üs1   ‚ADÁ"!C/ ÂADÃDÃ/DÄDÄDÄDr;   r=   rD   ©r   r   r   rE   r!   r2   Ú__classcell__©rN   s   @r   rG   rG   a   s@   ø„ ñð  &Ø/ð	$àð$ð ð$ð ð	$ð
 
õ$÷ (r   rG   c                  óD   ‡ — e Zd ZdZ	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Zˆ xZS )ÚConstI18nMiddlewarez<
    Const middleware chooses statically defined locale
    c                ó8   •— t         ‰| �  |||¬«       || _        y ©Nr   )rJ   r!   rZ   )r    rZ   r   r   r   rN   s        €r   r!   zConstI18nMiddleware.__init__š   s    ø€ ô 	‰Ñ˜d¨XÀnÐÔUØˆ�r   c              ƒ  ó"   K  — | j                   S ­wrB   )rZ   r:   s      r   r2   zConstI18nMiddleware.get_locale¤   s   è ø€ Ø�{‰{Ðùs   ‚r;   )
rZ   r?   r   r   r   r>   r   r?   r@   rA   rD   r]   r_   s   @r   ra   ra   •   sJ   ø„ ñð  &Ø/ðàðð ðð ð	ð
 ðð 
õ÷r   ra   c                  óR   ‡ — e Zd ZdZ	 	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zdˆ fd„Zdd„Zˆ xZS )	ÚFSMI18nMiddlewarez:
    This middleware stores locale in the FSM storage
    c                ó8   •— t         ‰| �  |||¬«       || _        y rc   )rJ   r!   Úkey)r    r   rh   r   r   rN   s        €r   r!   zFSMI18nMiddleware.__init__­   s    ø€ ô 	‰Ñ˜d¨XÀnÐÔUØˆ�r   c              ƒ  ó4  •K  — |j                  d«      }d }|r4|j                  «       ƒ d {  –—† }|j                  | j                  d «      }|sAt        ‰| �  ||¬«      ƒ d {  –—† }|r&|j                  | j                  |i¬«      ƒ d {  –—†  |S 7 Œe7 Œ07 Œ
­w)NÚstater/   ©r1   )rS   Úget_datarh   rJ   r2   Úupdate_data)r    r0   r1   Úfsm_contextrZ   Úfsm_datarN   s         €r   r2   zFSMI18nMiddleware.get_locale·   s”   øè ø€ Ø)-¯©°'Ó):ˆØˆÙØ(×1Ñ1Ó3×3ˆHØ—\‘\ $§(¡(¨DÓ1ˆFÙÜ ™7Ñ-°EÀÐ-ÓE×EˆFÙØ!×-Ñ-°D·H±H¸fÐ3EÐ-ÓF×FÐFØˆð 4øð FøàFús3   ƒ)B¬B­6BÁ#BÁ$'BÂBÂBÂBÂBc              ƒ  ó~   K  — |j                  | j                  |i¬«      ƒ d{  –—†  || j                  _        y7 Œ­w)z�
        Write new locale to the storage

        :param state: instance of FSMContext
        :param locale: new locale
        rk   N)rm   rh   r   r7   )r    rj   rZ   s      r   Ú
set_localezFSMI18nMiddleware.set_localeÃ   s9   è ø€ ð ×Ñ d§h¡h°Ð%7ÐÓ8×8Ð8Ø#)ˆ�	‰	Õ ð 	9ús   ‚"=¤;¥=)rZ   r   r<   )
r   r   rh   r?   r   r>   r   r?   r@   rA   rD   )rj   r   rZ   r?   r@   rA   )r   r   r   rE   r!   r2   rq   r^   r_   s   @r   rf   rf   ¨   sR   ø„ ñð Ø%Ø/ðàðð ðð ð	ð
 ðð 
õõ
÷*r   rf   )Ú
__future__r   Úabcr   r   Útypingr   r   Úbabelr   r	   ÚImportErrorÚ	ExceptionÚaiogramr   r   Úcollections.abcr   r   Úaiogram.fsm.contextr   Úaiogram.typesr   r   Úaiogram.utils.i18n.corer   r   rG   ra   rf   r   r   r   ú<module>r}      s„   ðÝ "ç #ß %ðß0÷ +áß3å.ß2Ý,ôE�^ Sô EôP1(˜>ô 1(ôh˜.ô ô&#*Ð,õ #*øðA ò Ø€Fô˜Yö ðús   ˜A4 Á4B	ÂB	