a
    y{Jh                     @   s   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	 d	ed	 ZdS )
    N)contextmanager)
ContextVar)Path)Dict	GeneratorOptionalTupleUnion)	LazyProxy)ContextInstanceMixinc                   @   s  e Zd Zdddeeef eeddddZeedd	d
Zej	edddd
Ze
eed dddZe
ed dddZeeejf dddZddddZeeedf dddZd!eee eee edddZd"eee eee eddd ZdS )#I18nenmessages)default_localedomainN)pathr   r   returnc                C   s.   || _ || _|| _td|d| _|  | _d S )NZaiogram_ctx_locale)default)r   r   r   r   
ctx_localefind_localeslocales)selfr   r   r    r   I/var/www/shaz/venv/lib/python3.9/site-packages/aiogram/utils/i18n/core.py__init__   s
    zI18n.__init__)r   c                 C   s
   | j  S N)r   getr   r   r   r   current_locale   s    zI18n.current_locale)valuer   c                 C   s   | j | d S r   )r   set)r   r   r   r   r   r      s    )NNN)localer   c              	   c   s6   | j |}zdV  W | j | n| j | 0 dS )z6
        Create context with specified locale
        N)r   r    reset)r   r!   Z	ctx_tokenr   r   r   
use_locale"   s    zI18n.use_locale)r   NNc              	   c   s0   |  | }z| V  W | | n| | 0 dS )z"
        Use I18n context
        N)Zset_currentZreset_current)r   tokenr   r   r   context-   s    
zI18n.contextc              	   C   s   i }t | jD ]}t jt j| j|s.qt j| j|d| jd }t j|rt|d}t	|||< W d   q1 s0    Y  qt j|dd d rt
d| dq|S )	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   ZtranslationsnameZmo_pathfpr   r   r   r   8   s    .zI18n.find_localesc                 C   s   |   | _dS )z$
        Hot reload locales
        N)r   r   r   r   r   r   reloadM   s    zI18n.reload.c                 C   s   t | j S )z:
        list of loaded locales

        :return:
        )tupler   keysr   r   r   r   available_localesS   s    zI18n.available_locales   )singularpluralnr!   r   c                 C   sZ   |du r| j }|| jvr0|dkr$|S |r,|S |S | j| }|du rL||S ||||S )z
        Get text

        :param singular:
        :param plural:
        :param n:
        :param locale:
        :return:
        Nr9   )r   r   r0   ngettext)r   r:   r;   r<   r!   Z
translatorr   r   r   r0   \   s    


zI18n.gettextc                 C   s   t | j||||ddS )NF)r:   r;   r<   r!   Zenable_cache)r
   r0   )r   r:   r;   r<   r!   r   r   r   lazy_gettextv   s    zI18n.lazy_gettext)Nr9   N)Nr9   N)__name__
__module____qualname__r	   strr   r   propertyr   setterr   r   r#   r%   r   r0   r1   r   r5   r   r8   r   intr
   r>   r   r   r   r   r      s<   


	  r   )r0   r*   
contextlibr   Zcontextvarsr   pathlibr   typingr   r   r   r   r	   Zaiogram.utils.i18n.lazy_proxyr
   Zaiogram.utils.mixinsr   r   r   r   r   r   <module>   s   