# ©️ Dan Gazizullin, 2021-2023
# This file is a part of Hikka Userbot
# 🌐 https://github.com/hikariatama/Hikka
# You can redistribute it and/or modify it under the terms of the GNU AGPLv3
# 🔑 https://www.gnu.org/licenses/agpl-3.0.html
import logging
from hikkatl.tl.types import Message
from .. import loader, translations, utils
from ..inline.types import InlineCall
logger = logging.getLogger(__name__)
SUPPORTED_LANGUAGES = {
"en": "🇬🇧 English",
"ru": "🇷🇺 Русский",
"fr": "🇫🇷 Français",
"it": "🇮🇹 Italiano",
"de": "🇩🇪 Deutsch",
"tr": "🇹🇷 Türkçe",
"uz": "🇺🇿 O'zbekcha",
"es": "🇪🇸 Español",
"kk": "🇰🇿 Қазақша",
"tt": "🥟 Татарча",
}
@loader.tds
class Translations(loader.Module):
"""Processes internal translations"""
strings = {
"name": "Translations",
"lang_saved": "{} Language saved!",
"pack_saved": (
"👍 Translate pack"
" saved!"
),
"incorrect_language": (
"🚫 Incorrect language"
" specified"
),
"lang_removed": (
"👍 Translations reset"
" to default ones"
),
"check_pack": (
"🚫 Invalid pack format"
" in url"
),
"check_url": (
"🚫 You need to specify"
" valid url containing a langpack"
),
"too_long": (
"📁 Command output seems"
" to be too long, so it's sent in file."
),
"opening_form": " Opening form...",
"opening_gallery": " Opening gallery...",
"opening_list": " Opening list...",
"inline403": (
"🚫 You can't send inline"
" units in this chat"
),
"invoke_failed": "🚫 Unit invoke failed! More info in logs",
"show_inline_cmds": "📄 Show all available inline commands",
"no_inline_cmds": "You have no available commands",
"no_inline_cmds_msg": (
"😔 There are no available inline commands or you lack access to them"
),
"inline_cmds": "ℹ️ You have {} available command(-s)",
"inline_cmds_msg": "ℹ️ Available inline commands:\n\n{}",
"run_command": "🏌️ Run command",
"command_msg": "🌘 Command «{}»\n\n{}",
"command": "🌘 Command «{}»",
"button403": "You are not allowed to press this button!",
"keep_id": "⚠️ Do not remove ID! {}",
"choose_language": "🗽 Choose language",
"not_official": (
"⚠️ This language is not"
" officially supported"
),
"requested_join": (
"💫 Module {}
requested to join channel {}\n\n❓ Reason: {}"
),
"fw_error": (
"🕒 Call"
" {}
caused FloodWait of {} on method"
" {}
"
),
"rpc_error": (
"🚫 Call"
" {}
failed due to RPC error:"
" {}
"
),
}
strings_ru = {
"lang_saved": "{} Язык сохранён!",
"pack_saved": (
"👍 Пакет переводов"
" сохранён!"
),
"incorrect_language": (
"🚫 Указан неверный"
" язык"
),
"lang_removed": (
"👍 Переводы сброшены"
" на стандартные"
),
"check_pack": (
"🚫 Неверный формат"
" пакета переводов в ссылке"
),
"check_url": (
"🚫 Вы должны указать"
" ссылку, содержащую пакет переводов"
),
"too_long": (
"📁 Вывод команды слишком"
" длинный, поэтому он отправлен в файле."
),
"opening_form": " Открываю форму...",
"opening_gallery": " Открываю галерею...",
"opening_list": " Открываю список...",
"inline403": (
"🚫 Вы не можете"
" отправлять встроенные элементы в этом чате"
),
"invoke_failed": "🚫 Вызов модуля не удался! Подробнее в логах",
"show_inline_cmds": "📄 Показать все доступные встроенные команды",
"no_inline_cmds": "У вас нет доступных inline команд",
"no_inline_cmds_msg": (
"😔 Нет доступных inline команд или у вас нет доступа к ним"
),
"inline_cmds": "ℹ️ У вас {} доступная(-ых) команда(-ы)",
"inline_cmds_msg": "ℹ️ Доступные inline команды:\n\n{}",
"run_command": "🏌️ Выполнить команду",
"command_msg": "🌘 Команда «{}»\n\n{}",
"command": "🌘 Команда «{}»",
"button403": "Вы не можете нажать на эту кнопку!",
"keep_id": "⚠️ Не удаляйте ID! {}",
"choose_language": "🗽 Выберите язык",
"not_official": (
"⚠️ Этот язык не"
" поддерживается официально"
),
"requested_join": (
"💫 Модуль {}
запросил присоединение к каналу {}\n\n❓ Причина: {}"
),
"fw_error": (
"🕒 Команда"
" {}
вызвал FloodWait {} в методе {}
"
),
"rpc_error": (
"🚫 Команда"
" {}
не удалась из-за ошибки RPC:"
" {}
"
),
}
strings_fr = {
"lang_saved": "{} Langue enregistrée!",
"pack_saved": (
"👍 Paquet de traduction"
" enregistré!"
),
"incorrect_language": (
"🚫 Langue incorrecte"
),
"lang_removed": (
"👍 Traductions"
" réinitialisées à celles par défaut"
),
"check_pack": (
"🚫 Format de paquet de"
" traduction invalide dans le lien"
),
"check_url": (
"🚫 Vous devez fournir un"
" lien contenant un paquet de traduction"
),
"too_long": (
"📁 La sortie de la"
" commande est trop longue, donc elle a été envoyée dans un fichier."
),
"opening_form": " Ouverture du formulaire...",
"opening_gallery": " Ouverture de la galerie...",
"opening_list": " Ouverture de la liste...",
"inline403": (
"🚫 Vous ne pouvez pas"
" envoyer d'éléments intégrés dans ce chat"
),
"invoke_failed": (
"🚫 L'appel du module a échoué! Voir les journaux pour plus de"
" détails"
),
"show_inline_cmds": "📄 Afficher toutes les commandes intégrées disponibles",
"no_inline_cmds": "Vous n'avez aucune commande inline disponible",
"no_inline_cmds_msg": (
"😔 Vous n'avez aucune commande inline disponible ou vous n'avez pas"
" accès à celles-ci"
),
"inline_cmds": "ℹ️ Vous avez {} commande disponible",
"inline_cmds_msg": "ℹ️ Commandes inline disponibles:\n\n{}",
"run_command": "🏌️ Exécuter la commande",
"command_msg": "🌘 Commande «{}»\n\n{}",
"command": "🌘 Commande «{}»",
"button403": "Vous ne pouvez pas appuyer sur ce bouton!",
"keep_id": "⚠️ Ne supprimez pas l'ID! {}",
"choose_language": "🗽 Choisissez la langue",
"not_official": (
"⚠️ Cette langue n'est"
" pas officiellement prise en charge"
),
"requested_join": (
"💫 Le module {}
a demandé à rejoindre le canal {}\n\n❓ Raison: {}"
),
"fw_error": (
"🕒 La commande"
" {}
a provoqué un FloodWait {} dans la méthode "
" {}
"
),
"rpc_error": (
"🚫 La commande"
" {}
ne s'est pas déroulée en raison d'une erreur RPC:"
" {}
"
),
}
strings_it = {
"lang_saved": "{} Lingua salvata!",
"pack_saved": (
"👍 Pacchetto di"
" traduzione salvato!"
),
"incorrect_language": (
"🚫 Lingua specificata"
" non corretta"
),
"lang_removed": (
"👍 Traduzioni"
" ripristinate"
),
"check_pack": (
"🚫 Formato pacchetto di"
" traduzione specificato errato"
),
"check_url": (
"🚫 Deve essere"
" specificata un url contenente il pacchetto di traduzione"
),
"too_long": (
"📁 Output della stringa"
" troppo lungo, viene inviato in un file"
),
"opening_form": " Apertura form...",
"opening_gallery": " Apertura galleria...",
"opening_list": " Apertura lista...",
"inline403": (
"🚫 Non puoi"
" inviare inline in questo chat"
),
"invoke_failed": "🚫 Invocazione modulo fallita! controlla i log",
"show_inline_cmds": "📄 Mostra tutti i comandi inline disponibili",
"no_inline_cmds": "Non hai comandi inline disponibili",
"no_inline_cmds_msg": (
"😔 Non hai comandi inline disponibili o non hai accesso a loro"
),
"inline_cmds": "ℹ️ Hai {} comando(-i) disponibili",
"inline_cmds_msg": "ℹ️ Comandi inline disponibili:\n\n{}",
"run_command": "🏌️ Esegui comando",
"command_msg": "🌘 Comando «{}»\n\n{}",
"command": "🌘 Comando «{}»",
"button403": "Non puoi premere questo pulsante!",
"keep_id": "⚠️ Non cancellare ID! {}",
"choose_language": "🗽 Scegli la lingua",
"not_official": (
"⚠️ Questa lingua non"
" è supportata ufficialmente"
),
"requested_join": (
"💫 Il modulo {}
ha richiesto di unirsi al canale {}\n\n❓ Motivo: {}"
),
"fw_error": (
"🕒 Il comando"
" {}
ha causato un FloodWait di {} nel metodo "
" {}
"
),
"rpc_error": (
"🚫 Il comando"
" {}
non è riuscito a causa di un RPC error:"
" {}
"
),
}
strings_de = {
"lang_saved": "{} Sprache gespeichert!",
"pack_saved": (
"👍 Übersetzungs"
" Paket gespeichert!"
),
"incorrect_language": (
"🚫 Falsche Sprache"
" angegeben"
),
"lang_removed": (
"👍 Übersetzungen"
" auf Standard zurückgesetzt"
),
"check_pack": (
"🚫 Ungültiges"
" Übersetzungs Paket in der URL"
),
"check_url": (
"🚫 Sie müssen eine"
" gültige URL angeben, die ein Übersetzungs Paket enthält"
),
"too_long": (
"📁 Befehlsausgabe scheint"
" zu lang zu sein, daher wird sie in einer Datei gesendet."
),
"opening_form": " Formular wird geöffnet...",
"opening_gallery": " Galerie wird geöffnet...",
"opening_list": " Liste wird geöffnet...",
"inline403": (
"🚫 Sie können"
" Inline-Einheiten in diesem Chat nicht senden"
),
"invoke_failed": (
"🚫 Modulaufruf"
" fehlgeschlagen! Weitere Informationen in den Protokollen"
),
"show_inline_cmds": "📄 Zeige alle verfügbaren Inline-Befehle",
"no_inline_cmds": "Sie haben keine verfügbaren Inline-Befehle",
"no_inline_cmds_msg": (
"😔 Keine verfügbaren Inline-Befehle oder Sie haben keinen Zugriff"
" auf sie"
),
"inline_cmds": "ℹ️ Sie haben {} verfügbare(n) Befehl(e)",
"inline_cmds_msg": "ℹ️ Verfügbare Inline-Befehle:\n\n{}",
"run_command": "🏌️ Befehl ausführen",
"command_msg": "🌘 Befehl «{}»\n\n{}",
"command": "🌘 Befehl «{}»",
"button403": "Sie können auf diese Schaltfläche nicht klicken!",
"keep_id": "⚠️ Löschen sie das ID nicht! {}",
"choose_language": "🗽 Wählen Sie eine Sprache",
"not_official": (
"⚠️ Diese Sprache wird"
" nicht offiziell unterstützt"
),
"requested_join": (
"💫 Modul {}
hat den Beitritt zum Kanal {} angefordert\n\n❓ Grund:"
" {}"
),
"fw_error": (
"🕒 Befehl"
" {}
hat FloodWait {} in der Methode"
" {}
"
),
"rpc_error": (
"🚫 Befehl"
" {}
ist fehlgeschlagen wegen RPC-Fehler"
": {}
"
),
}
strings_tr = {
"lang_saved": "{} Dil kaydedildi!",
"pack_saved": (
"👍 Çeviri paketi"
" kaydedildi!"
),
"incorrect_language": (
"🚫 Yanlış dil"
" belirtildi"
),
"lang_removed": (
"👍 Çeviriler varsayılan"
" hale getirildi"
),
"check_pack": (
"🚫 URL'deki çeviri"
" paketi geçersiz"
),
"check_url": (
"🚫 Geçerli bir dil paketi"
" içeren URL belirtmelisiniz"
),
"too_long": (
"📁 Komut çıktısı çok uzun"
" görünüyor, bu yüzden dosya olarak gönderildi."
),
"opening_form": " Form açılıyor...",
"opening_gallery": " Galeri açılıyor...",
"opening_list": " Liste açılıyor...",
"inline403": (
"🚫 Bu sohbete satır içi"
" birimler gönderemezsin"
),
"invoke_failed": (
"🚫 Modül çağrısı"
" başarısız! Kayıtlardan daha fazla bilgiye erişebilirsin"
),
"show_inline_cmds": "📄 Tüm kullanılabilir satır içi komutlarını göster",
"no_inline_cmds": "Kullanılabilir satır içi komutunuz yok",
"no_inline_cmds_msg": (
"😔 Kullanılabilir satır içi komutunuz yok veya erişiminiz yok"
),
"inline_cmds": "ℹ️ {} adet kullanılabilir komutunuz var",
"inline_cmds_msg": "ℹ️ Kullanılabilir satır içi komutlar:\n\n{}",
"run_command": "🏌️ Komutu çalıştır",
"command_msg": "🌘 Komut «{}»\n\n{}",
"command": "🌘 Komut «{}»",
"button403": "Bu düğmeye basamazsınız!",
"keep_id": "⚠️ ID'yi silmeyin! {}",
"choose_language": "🗽 Bir dil seçin",
"not_official": (
"⚠️ Bu dil resmi olarak"
" desteklenmiyor"
),
"requested_join": (
"💫 Modül {}
{}"
" kanalına katılma isteği gönderdi\n\n❓ Sebep: {}"
),
"fw_error": (
"🕒 Komut"
" {}
FloodWait {} nedeniyle {}
"
" yönteminde başarısız oldu"
),
"rpc_error": (
"🚫 Komut"
" {}
RPC hatası nedeniyle başarısız"
" oldu: {}
"
),
}
strings_uz = {
"lang_saved": "{} Til saqlandi!",
"pack_saved": (
"👍 Tarjima paketi"
" saqlandi!"
),
"incorrect_language": (
"🚫 Noto'g'ri til"
" belgilandi"
),
"lang_removed": (
"👍 Tarjimalar"
" standart holatga qaytarildi"
),
"check_pack": (
"🚫 URL'dagi tarjima"
" paketi noto'g'ri"
),
"check_url": (
"🚫 Siz noto'g'ri URL"
" belirtdingiz"
),
"too_long": (
"📁 Bajarilgan buyruq"
" natijasi juda uzun, shuning uchun fayl sifatida yuborildi."
),
"opening_form": " Formani ochish...",
"opening_gallery": " Galeriyani ochish...",
"opening_list": " Ro'yxatni ochish...",
"inline403": (
"🚫 Siz bu guruhda inline obyektlarni yuborishingiz mumkin emas"
),
"invoke_failed": (
"🚫 Modulni chaqirish"
" muvaffaqiyatsiz! Batafsil ma'lumotlar jurnallarda"
),
"show_inline_cmds": "📄 Barcha mavjud inline buyruqlarini ko'rsatish",
"no_inline_cmds": "Sizda mavjud inline buyruqlar yo'q",
"no_inline_cmds_msg": (
"😔 Sizda mavjud inline buyruqlar yo'q yoki ularga kirish huquqingiz"
" yo'q"
),
"inline_cmds": "ℹ️ Sizda {} mavjud buyruq bor",
"inline_cmds_msg": "ℹ️ Mavjud inline buyruqlar:\n\n{}",
"run_command": "🏌️ Buyruqni bajarish",
"command_msg": "🌘 Buyruq «{}»\n\n{}",
"command": "🌘 Buyruq «{}»",
"button403": "Siz ushbu tugmani bosib bo'lmaysiz!",
"keep_id": "⚠️ ID-ni o'chirmang! {}",
"choose_language": "🗽 Tilni tanlang",
"not_official": (
"⚠️ Ushbu til"
" rasmiylashtirilmagan"
),
"requested_join": (
"💫 Modul {}
{}"
" guruhiga qo'shilish so'rovi yubordi\n\n❓ Sababi: {}"
),
"fw_error": (
"🕒 Buyruq"
" {}
FloodWait {} sababli {}
usuli"
" bilan muvaffaqiyatsiz bo'ldi"
),
"rpc_error": (
"🚫 Buyruq"
" {}
RPC xatosi sababli muvaffaqiyatsiz"
" bo'ldi: {}
"
),
}
strings_es = {
"lang_saved": "{} ¡Idioma guardado!",
"pack_saved": (
"👍 ¡Paquete de"
" traducción guardado!"
),
"incorrect_language": (
"🚫 Idioma"
" incorrecto seleccionado"
),
"lang_removed": (
"👍 Restablecer la"
" traducción a los valores predeterminados"
),
"check_pack": (
"🚫 Paquete de"
" traducción seleccionado incorrecto"
),
"check_url": (
"🚫 URL incorrecta"
" seleccionada"
),
"too_long": (
"📁 El resultado del"
" comando excede el límite. Enviado como archivo."
),
"opening_form": " Abriendo formulario...",
"opening_gallery": " Abriendo galería...",
"opening_list": " Abriendo lista...",
"inline403": (
"🚫 No se permiten elementos de interfaz de usuario en este grupo"
),
"invoke_failed": (
"🚫 ¡Error al invocar la"
" unidad! Consulte el registro para obtener más detalles"
),
"show_inline_cmds": "📄 Mostrar todos los comandos disponibles",
"no_inline_cmds": "No hay comandos disponibles",
"no_inline_cmds_msg": (
"😔 No hay comandos disponibles o no tienes permiso para acceder a"
" los comandos"
),
"inline_cmds": "ℹ️ {} comandos disponibles",
"inline_cmds_msg": "ℹ️ Comandos disponibles:\n\n{}",
"run_command": "🏌️ Ejecutar comando",
"command_msg": "🌘 Comando '{}'\n\n{}",
"command": "🌘 Comando '{}'",
"button403": "¡No puedes presionar este botón!",
"button404": "¡No puedes presionar este botón ahora!",
"keep_id": "⚠️ ¡No elimines el ID! {}",
"choose_language": "🗽 Elige un idioma",
"not_official": (
"⚠️ Este idioma no está"
" oficialmente respaldado"
),
"requested_join": (
"💫 El módulo {}
{}"
" solicitó unirse al grupo\n\n❓ Razón: {}"
),
"fw_error": (
"🕒 El comando"
" {}
falló debido a FloodWait {}: {}
"
),
"rpc_error": (
"🚫 El comando"
" {}
falló debido a un error RPC:"
" {}
"
),
}
strings_kk = {
"lang_saved": "{} Тіл сақталды!",
"pack_saved": (
"👍 Аударма пакеті"
" сақталды!"
),
"incorrect_language": (
"🚫 Жарамсыз тіл"
" белгіленді"
),
"lang_removed": (
"👍 Аударма пакеті"
" өшірілді"
),
"check_pack": (
"🚫 Аударма пакеті"
" сілтемесінің пішімі жарамсыз"
),
"check_url": (
"🚫 Сіз аударма пакеті"
" бар сілтемені көрсетуіңіз керек"
),
"too_long": (
"📁 Команда жауап"
" өте ұзын, ол файлда жіберілді."
),
"opening_form": " Форманы ашу...",
"opening_gallery": " Галереяны ашу...",
"opening_list": " Тізімні ашу...",
"inline403": (
"🚫 Сіз бұл сөйлесуде кірістірілген элементтерді жібере алмайсыз"
),
"invoke_failed": (
"🚫 Модульді іске қосу"
" сәтсіз аяқталды! Толығырақ құжаттың журналында"
),
"show_inline_cmds": "📄 Барлық қол жетімді кірістірілген командаларды көрсету",
"no_inline_cmds": "Сіздің қол жетімді inline командаларыңыз жоқ",
"no_inline_cmds_msg": (
"😔 Қол жетімді inline командалар жоқ немесе Сізге оларға қатынасуға"
" рұқсат жоқ"
),
"inline_cmds": "ℹ️ Сіздің {} қол жетімді команда(-лар)ыңыз бар",
"inline_cmds_msg": "ℹ️ Қол жетімді inline командалар:\n\n{}",
"run_command": "🏌️ Команданы іске қосу",
"command_msg": "🌘 «{}» командасы\n\n{}",
"command": "🌘 «{}» командасы",
"button403": "Сіз бұл түймешіге баса алмайсыз!",
"keep_id": "⚠️ ID тастамаңыз! {}",
"choose_language": "🗽 Тілді таңдаңыз",
"not_official": (
"⚠️ Бұл тіл официалдықтың"
" тағы да қолдауы көрсетілмейді"
),
"requested_join": (
"💫 Модуль {}
{}< арнаға"
" қосылуды сұрады. /a>\n\n❓ Себебі: {}"
),
"fw_error": (
"🕒 Команда"
" {}
{} секундтан кейін қайталап көрінеді"
),
"rpc_error": (
"🚫 Команда"
" {}
RPC қатесінен қате орындалды:"
" {}
"
),
}
strings_tt = {
"lang_saved": "{} Тел сакланган!",
"pack_saved": (
"👍 Тәрҗемә пакеты"
" сакланган!"
),
"incorrect_language": (
"🚫 Дөрес булмаган тел"
" күрсәтелгән"
),
"lang_removed": (
"👍 Тәрҗемәләр стандартка"
" ташланган"
),
"check_pack": (
"🚫 Сылтамада тәрҗемә"
" пакетларының дөрес булмаган форматы"
),
"check_url": (
"🚫 Сез тәрҗемә пакеты"
" булган сылтаманы кертергә тиеш/b>"
),
"too_long": (
"📁 Команда чыгышы бик"
" озын, шуңа күрә ул файлда җибәрелә."
),
"opening_form": " Мин форманы ачам...",
"opening_gallery": " Мин галереяны ачам...",
"opening_list": " Исемлекне ачу...",
"inline403": (
"🚫 Сез бу чатта"
" урнаштырылган элементларны җибәрә алмыйсыз"
),
"invoke_failed": "🚫 Модуль проблемасы уңышлы булмады! Логларда тулырак",
"show_inline_cmds": "📄 Барлык урнаштырылган командаларны күрсәтегез",
"no_inline_cmds": "Сезнең inline командаларыгыз юк",
"no_inline_cmds_msg": (
"😔 Inline командалар юк яисә аларга керү мөмкинлеге юк"
),
"inline_cmds": "ℹ️ Сездә {} уңайлы командалар бар",
"inline_cmds_msg": "ℹ️ Inline командалар:\n\n{}",
"run_command": "🏌️ Команданы үтәгез",
"command_msg": "🌘 Команда «{}»\n\n{}",
"command": "🌘 Команда «{}»",
"button403": "Сез төймәгә баса алмыйсыз!",
"keep_id": "⚠️ ID'ны бетеремэгез {}",
"choose_language": "🗽 Телне таңдаңыз",
"not_official": (
"⚠️ Бу тел официалдықтың"
" тағы да қолдауы көрсетілмейді"
),
"fw_error": (
"🕒 Команда"
" {}
FloodWait {} методына туры"
" килде{}
"
),
"rpc_error": (
"🚫 Команда"
" {}
RPC хатасынан баш тартылды:"
" {}
"
),
}
async def _change_language(self, call: InlineCall, lang: str):
self._db.set(translations.__name__, "lang", lang)
await self.allmodules.reload_translations()
await call.edit(self.strings("lang_saved").format(self._get_flag(lang)))
def _get_flag(self, lang: str) -> str:
emoji_flags = {
"🇬🇧": "🇬🇧",
"🇺🇿": "🇺🇿",
"🇷🇺": "🇷🇺",
"🇮🇹": "🇮🇹",
"🇩🇪": "🇩🇪",
"🇪🇸": "🇪🇸",
"🇹🇷": "🇹🇷",
"🇰🇿": "🇰🇿",
"🥟": "🥟",
}
lang2country = {"en": "🇬🇧", "tt": "🥟", "kk": "🇰🇿"}
lang = lang2country.get(lang) or utils.get_lang_flag(lang)
return emoji_flags.get(lang, lang)
@loader.command(
ru_doc="[языки] - Изменить стандартный язык",
fr_doc="[langues] - Changer la langue par défaut",
it_doc="[lingue] - Cambia la lingua predefinita",
de_doc="[Sprachen] - Ändere die Standard-Sprache",
tr_doc="[Diller] - Varsayılan dili değiştir",
uz_doc="[til] - Standart tili o'zgartirish",
es_doc="[Idiomas] - Cambiar el idioma predeterminado",
kk_doc="[тілдер] - Бастапқы тілді өзгерту",
)
async def setlang(self, message: Message):
"""[languages in the order of priority] - Change default language"""
args = utils.get_args_raw(message)
if not args:
await self.inline.form(
message=message,
text=self.strings("choose_language"),
reply_markup=utils.chunks(
[
{
"text": text,
"callback": self._change_language,
"args": (lang,),
}
for lang, text in SUPPORTED_LANGUAGES.items()
],
2,
),
)
return
if any(len(i) != 2 for i in args.split(" ")):
await utils.answer(message, self.strings("incorrect_language"))
return
self._db.set(translations.__name__, "lang", args.lower())
await self.allmodules.reload_translations()
await utils.answer(
message,
self.strings("lang_saved").format(
"".join([self._get_flag(lang) for lang in args.lower().split()])
)
+ (
("\n\n" + self.strings("not_official"))
if any(lang not in SUPPORTED_LANGUAGES for lang in args.lower().split())
else ""
),
)
@loader.command(
ru_doc="[ссылка на пак | пустое чтобы удалить] - Изменить внешний пак перевода",
fr_doc=(
"[lien vers le paquet | vide pour supprimer] - Changer le paquet de"
" traduction externe"
),
it_doc=(
"[link al pacchetto | vuoto per rimuovere] - Cambia il pacchetto di"
" traduzione esterno"
),
de_doc=(
"[Link zum Paket | leer um zu entfernen] - Ändere das externe Übersetzungs"
" Paket"
),
tr_doc=(
"[Çeviri paketi bağlantısı | boş bırakmak varsayılan hale getirir] - Harici"
" çeviri paketini değiştir"
),
uz_doc=(
"[tarjima paketi havolasini | bo'sh qoldirish standart holatga qaytaradi] -"
" Tashqi tarjima paketini o'zgartirish"
),
es_doc="[Enlace al paquete | vacío para eliminar] - Cambiar el paquete de",
kk_doc=(
"[тілдік пакеттің сілтемесі | бос қалдырып бастапқы қалдыру] - Сыртқы"
" тілдік пакетін өзгерту"
),
)
async def dllangpackcmd(self, message: Message):
"""[link to a langpack | empty to remove] - Change Hikka translate pack (external)"""
args = utils.get_args_raw(message)
if not args:
self._db.set(translations.__name__, "pack", False)
await self.translator.init()
await utils.answer(message, self.strings("lang_removed"))
return
if not utils.check_url(args):
await utils.answer(message, self.strings("check_url"))
return
self._db.set(translations.__name__, "pack", args)
await utils.answer(
message,
self.strings(
"pack_saved"
if await self.allmodules.reload_translations()
else "check_pack"
),
)