diff --git a/config/template_config.toml b/config/template_config.toml index 77e0761..eb1f00b 100644 --- a/config/template_config.toml +++ b/config/template_config.toml @@ -9,8 +9,9 @@ # ru - Russian, by https://github.com/pzhuk # zh_cn - Simplified Chinese, by https://github.com/zhihuiyuze # he - Hebrew, by https://github.com/netanelkoli +# es_mx - Spanish (Mexican), by https://github.com/mastersuv # The lanugages that messages can be displayed in -enabled_languages = ["it", "en", "uk", "ru", "zh_cn", "he"] +enabled_languages = ["it", "en", "uk", "ru", "zh_cn", "he", "es_mx"] # The default language to be set for users whose language cannot be autodetected or whose language is not enabled default_language = "it" # The language to fallback to if a string is missing in a specific language diff --git a/strings/es_mx.py b/strings/es_mx.py new file mode 100644 index 0000000..f1c6e99 --- /dev/null +++ b/strings/es_mx.py @@ -0,0 +1,429 @@ +#Strings / localization file for greed +# Can be edited, but DON'T REMOVE THE REPLACEMENT FIELDS (words surrounded by {curly braces}) + +# Translation by https://github.com/mastersuv + +# Currency symbol +currency_symbol = "$" + +# Positioning of the currency symbol +currency_format_string = "{symbol} {value}" + +# Quantity of a product in stock +in_stock_format_string = "{quantity} disponible(s)" + +# Copies of a product in cart +in_cart_format_string = "{quantity} en el carrito" + +# Product information +product_format_string = "{name}\n" \ + "{description}\n" \ + "{price}\n" \ + "{cart}" + +# Order number, displayed in the order info +order_number = "Orden #{id}" + +# Order info string, shown to the admins +order_format_string = "por {user}\n" \ + "Creado en {date}\n" \ + "\n" \ + "{items}\n" \ + "TOTAL: {value}\n" \ + "\n" \ + "Notas del Cliente: {notes}\n" + +# Order info string, shown to the user +user_order_format_string = "{status_emoji} Orden {status_text}\n" \ + "{items}\n" \ + "TOTAL: {value}\n" \ + "\n" \ + "Notas: {notes}\n" + +# Transaction page is loading +loading_transactions = "Cargando transacciones...\n" \ + "Por favor espera unos segundos." + +# Transactions page +transactions_page = "Página {page}:\n" \ + "\n" \ + "{transactions}" + +# transactions.csv caption +csv_caption = "Un archivo 📄 .csv file que contiene todas las transacciones almacenadas en la base de datos del bot fue generado.\n" \ + "Puedes abrir este archivo con otros programas, como LibreOffice Calc, para procesar los datos." + +# Conversation: the start command was sent and the bot should welcome the user +conversation_after_start = "¡Hola!\n" \ + "¡Bienvenido a greed!\n" \ + "Esta es la versión 🅱️ Beta del software.\n" \ + "Es completamente utilizable, pero puede haber algunos errores todavía presentes.\n" \ + "Si encuentras alguno, por favor repórtalo en https://github.com/Steffo99/greed/issues." + +# Conversation: to send an inline keyboard you need to send a message with it +conversation_open_user_menu = "¿Qué te gustaría hacer?\n" \ + "💰 Tienes {credit} en tu billetera.\n" \ + "\n" \ + "Selecciona una opción en el menú de opciones para iniciar una operación.\n" \ + "Si el menú no se ha desplegado, puedes abrirlo presionando el botón de" \ + " los cuatro cuadrados pequeños en la barra de mensajes." + +# Conversation: like above, but for administrators +conversation_open_admin_menu = "¡Eres 💼 Administrador de esta tienda!\n" \ + "¿Que te gustaría hacer?\n" \ + "\n" \ + "Selecciona una opción en el menú de opciones para iniciar una operación.\n" \ + "Si el menú no se ha desplegado, puedes abrirlo presionando el botón de" \ + " los cuatro cuadrados pequeños en la barra de mensajes." + +# Conversation: select a payment method +conversation_payment_method = "¿Cómo quieres agregar fondos a tu cartera?" + +# Conversation: select a product to edit +conversation_admin_select_product = "✏️ ¿Qué producto quieres editar?" + +# Conversation: select a product to delete +conversation_admin_select_product_to_delete = "❌ ¿Qué producto quieres eliminar?" + +# Conversation: select a user to edit +conversation_admin_select_user = "Selecciona un usuario para editar." + +# Conversation: click below to pay for the purchase +conversation_cart_actions = "Agrega productos al carrito desplazándote hacia arriba y presionando el botón Agregar" \ + " debajo del producto que quieres agregar. Cuando termines, vuelve a este mensaje y presiona" \ + " el botón Listo debajo de este mensaje." + +# Conversation: confirm the cart contents +conversation_confirm_cart = "🛒 Tu carrito contiene los siguientes productos:\n" \ + "{product_list}" \ + "Total: {total_cost}\n" \ + "\n" \ + "Si quieres proceder con la compra, presiona el botón Listo debajo de este mensaje.\n" \ + "Para cancelar, presiona el botón Cancelar." + +# Live orders mode: start +conversation_live_orders_start = "Estás en el modo Órdenes en vivo\n" \ + "Todos las nuevas órdenes realizadas por los clientes aparecerán en tiempo real en este chat y podrás" \ + " marcarlas como ✅ Completada" \ + " o ✴️ Reembolsar el crédito al cliente." + +# Live orders mode: stop receiving messages +conversation_live_orders_stop = "Presiona el botón Detener debajo de este mensaje para detener las" \ + " órdenes en vivo." + +# Conversation: help menu has been opened +conversation_open_help_menu = "¿Qué tipo de ayuda necesitas?" + +# Conversation: confirm promotion to admin +conversation_confirm_admin_promotion = "¿Estás seguro de que quieres promover este usuario a 💼 Administrador?\n" \ + "¡Es una acción irreversible!" + +# Conversation: language select menu header +conversation_language_select = "Selecciona un idioma:" + +# Conversation: switching to user mode +conversation_switch_to_user_mode = " Estás cambiando a 👤 Modo Cliente.\n" \ + "Si quieres volver al menú de 💼 Administrador, reinicia la conversación con el comando /start." + +# Notification: the conversation has expired +conversation_expired = "🕐 No he recibido ningún mensaje en un tiempo, así que cerraré la conversación para ahorrar" \ + " recursos.\n" \ + "Si quieres iniciar una nueva, envía un nuevo comando /start." + +# User menu: order +menu_order = "🛒 Ordenar productos" + +# User menu: order status +menu_order_status = "🛍 Mis órdenes" + +# User menu: add credit +menu_add_credit = "💵 Agregar fondos" + +# User menu: bot info +menu_bot_info = "ℹ️ Información del bot" + +# User menu: cash +menu_cash = "💵 Con efectivo" + +# User menu: credit card +menu_credit_card = "💳 Con tarjeta" + +# Admin menu: products +menu_products = "📝️ Productos" + +# Admin menu: orders +menu_orders = "📦 Ordenes" + +# Menu: transactions +menu_transactions = "💳 Lista de transacciones" + +# Menu: edit credit +menu_edit_credit = "💰 Crear transacción" + +# Admin menu: go to user mode +menu_user_mode = "👤 Cambiar a modo cliente" + +# Admin menu: add product +menu_add_product = "✨ Nuevo producto" + +# Admin menu: delete product +menu_delete_product = "❌ Eliminar producto" + +# Menu: cancel +menu_cancel = "🔙 Cancelar" + +# Menu: skip +menu_skip = "⏭ Omitir" + +# Menu: done +menu_done = "✅️ Listo" + +# Menu: pay invoice +menu_pay = "💳 Pagar" + +# Menu: complete +menu_complete = "✅ Completar" + +# Menu: refund +menu_refund = "✴️ Reembolsar" + +# Menu: stop +menu_stop = "🛑 Detener" + +# Menu: add to cart +menu_add_to_cart = "➕ Agregar" + +# Menu: remove from cart +menu_remove_from_cart = "➖ Remover" + +# Menu: help menu +menu_help = "❓ Ayuda / Soporte" + +# Menu: guide +menu_guide = "📖 Guía" + +# Menu: next page +menu_next = "▶️ Siguiente" + +# Menu: previous page +menu_previous = "◀️ Anterior" + +# Menu: contact the shopkeeper +menu_contact_shopkeeper = "👨‍💼 Contactar con la tienda" + +# Menu: generate transactions .csv file +menu_csv = "📄 .csv" + +# Menu: edit admins list +menu_edit_admins = "🏵 Editar Administradores" + +# Menu: language +menu_language = "🇲🇽 Idioma" + +# Emoji: unprocessed order +emoji_not_processed = "*️⃣" + +# Emoji: completed order +emoji_completed = "✅" + +# Emoji: refunded order +emoji_refunded = "✴️" + +# Emoji: yes +emoji_yes = "✅" + +# Emoji: no +emoji_no = "🚫" + +# Text: unprocessed order +text_not_processed = "Pendiente" + +# Text: completed order +text_completed = "Completada" + +# Text: refunded order +text_refunded = "Reembolsada" + +# Add product: name? +ask_product_name = "¿Cuál debería ser el nombre del producto?" + +# Add product: description? +ask_product_description = "¿Cuál debería ser la descripción del producto?" + +# Add product: price? +ask_product_price = "¿Cuál debería ser el precio del producto?\n" \ + "Ingresa una X si quieres que el producto aún no esté a la venta." + +# Add product: image? +ask_product_image = "🖼 ¿Qué imagen quieres que tenga el producto?\n" \ + "\n" \ + "Envía la foto, u Omite esta fase para no agregar ninguna imagen." + +# Order product: notes? +ask_order_notes = "¿Quieres dejar una nota junto con el pedido?\n" \ + "💼 Será visible para los Administradores de la tienda.\n" \ + "\n" \ + "Envía un mensaje con la nota que quieres dejar o presiona el botón Omitir debajo de este" \ + " mensaje para no dejar ninguna." + +# Refund product: reason? +ask_refund_reason = " Adjunta un motivo a este reembolso.\n" \ + "👤 Será visible para el cliente." + +# Edit credit: notes? +ask_transaction_notes = " Adjunta una nota a esta transacción.\n" \ + "👤 Será visible para el cliente al recibir la transacción" \ + " y para los 💼 Administradores en el registro de transacciones." + +# Edit credit: amount? +ask_credit = "¿Cómo quieres cambiar el crédito del cliente?\n" \ + "\n" \ + "Envía un mensaje que contenga la cantidad.\n" \ + "Usa el signo + para aumentar el crédito de la cuenta del cliente," \ + " o el signo - para disminuirlo." + +# Header for the edit admin message +admin_properties = "Permisos de {name}:" + +# Edit admin: can edit products? +prop_edit_products = "Editar productos" + +# Edit admin: can receive orders? +prop_receive_orders = "Recibir órdenes" + +# Edit admin: can create transactions? +prop_create_transactions = "Administrar transacciones" + +# Edit admin: show on help message? +prop_display_on_help = "Mostrarlo al cliente como contacto de ayuda" + +# Thread has started downloading an image and might be unresponsive +downloading_image = "¡Estoy descargando la imágen!\n" \ + "Esto podría tomar tiempo... Por favor, se paciente.\n" \ + "No podré responderte mientras estoy descargando." + +# Edit product: current value +edit_current_value = "El valor actual es:\n" \ + "
{value}
\n" \ + "\n" \ + "Presione el botón Omitir debajo de este mensaje para mantener el mismo valor." + +# Payment: cash payment info +payment_cash = "Puedes pagar en efectivo en la ubicación física de la tienda.\n" \ + "Paga al finalizar la compra y dale este ID al encargado:\n" \ + "{user_cash_id}" + +# Payment: invoice amount +payment_cc_amount = "¿Cuántos fondos quieres agregar a tu cartera?\n" \ + "\n" \ + "Selecciona una cantidad con los botones de abajo, o ingrésala manualmente con el teclado" + +# Payment: add funds invoice title +payment_invoice_title = "Agregar fondos" + +# Payment: add funds invoice description +payment_invoice_description = "Pagar esta factura agregará {amount} a tu cartera." + +# Payment: label of the labeled price on the invoice +payment_invoice_label = "Recargar" + +# Payment: label of the labeled price on the invoice +payment_invoice_fee_label = "Comisión de la transacción" + +# Notification: order has been placed +notification_order_placed = "Se realizó una nueva orden:\n" \ + "{order}" + +# Notification: order has been completed +notification_order_completed = "¡Tu orden ha sido completada!\n" \ + "{order}" + +# Notification: order has been refunded +notification_order_refunded = "¡Tu orden ha sido reembolsada!\n" \ + "{order}" + +# Notification: a manual transaction was applied +notification_transaction_created = "ℹ️ Se ha aplicado una nueva transacción a tu cartera:\n" \ + "{transaction}" + +# Refund reason +refund_reason = "Motivo del reembolso:\n" \ + "{reason}" + +# Info: informazioni sul bot +bot_info = 'Este bot está usando greed,' \ + ' un framework creado por @Steffo para pagos a través de Telegram lanzado bajo la licencia:' \ + ' ' \ + 'Affero General Public License 3.0.\n' + +# Help: guide +help_msg = "La guía de greed está disponible en este enlace:\n" \ + "https://docs.google.com/document/d/1f4MKVr0B7RSQfWTSa_6ZO0LM4nPpky_GX_qdls3EHtQ/" + +# Help: contact shopkeeper +contact_shopkeeper = "Actualmente, el personal disponible para brindar asistencia al cliente está compuesto por:\n" \ + "{shopkeepers}\n" \ + "Haz click o toca uno de sus nombres para contactarlos a través de Telegram." + +# Success: product has been added/edited to the database +success_product_edited = "✅ ¡El producto se ha agregado/modificado satisfactoriamente!" + +# Success: product has been added/edited to the database +success_product_deleted = "✅ ¡El producto se ha eliminado satisfactoriamente!" + +# Success: order has been created +success_order_created = "✅ ¡La orden se envió satisfactoriamente!\n" \ + "\n" \ + "{order}" + +# Success: order was marked as completed +success_order_completed = "✅ Marcaste la orden #{order_id} como completada." + +# Success: order was refunded successfully +success_order_refunded = "✴️ La orden #{order_id} fue reembolsada." + +# Success: transaction was created successfully +success_transaction_created = "✅ ¡La transacción se creó satisfactoriamente!\n" \ + "{transaction}" + +# Error: message received not in a private chat +error_nonprivate_chat = "⚠️ Este bot solo funciona en chats privados." + +# Error: a message was sent in a chat, but no worker exists for that chat. +# Suggest the creation of a new worker with /start +error_no_worker_for_chat = "⚠️ La conversación con el bot fue interrumpida.\n" \ + "Para reiniciarla, envía el comando /start." + +# Error: a message was sent in a chat, but the worker for that chat is not ready. +error_worker_not_ready = "🕒 La conversación con el bot está comenzando.\n" \ + "Por favor, espera unos momentos antes de enviar más comandos." + +# Error: add funds amount over max +error_payment_amount_over_max = "⚠️ La cantidad máxima que se puede agregar en una sola transacción es {max_amount}." + +# Error: add funds amount under min +error_payment_amount_under_min = "⚠️ La cantidad mínima que se puede agregar en una sola transacción es {min_amount}." + +# Error: the invoice has expired and can't be paid +error_invoice_expired = "⚠️ Esta factura venció y fue cancelada. Si aún quieres agregar fondos, usa la opción." \ + " Agregar fondos del menú de opciones." + +# Error: a product with that name already exists +error_duplicate_name = "️⚠️ Ya existe un producto con el mismo nombre." + +# Error: not enough credit to order +error_not_enough_credit = "⚠️ No tienes suficiente crédito para realizar el pedido." + +# Error: order has already been cleared +error_order_already_cleared = "⚠️ Este pedido ya ha sido procesado." + +# Error: no orders have been placed, so none can be shown +error_no_orders = "⚠️ Aún no has realizado ninguna orden, no hay nada que mostrar." + +# Error: selected user does not exist +error_user_does_not_exist = "⚠️ El usuario seleccionado no existe." + +# Fatal: conversation raised an exception +fatal_conversation_exception = "☢️ Oh no! Un error ha interrumpido esta conversación\n" \ + "El error ha sido reportado al propietario del bot para que pueda solucionarlo.\n" \ + "Para reiniciar la conversación, envía el comando /start nuevamente." diff --git a/worker.py b/worker.py index fa68b04..042d23c 100644 --- a/worker.py +++ b/worker.py @@ -1488,6 +1488,10 @@ class Worker(threading.Thread): lang = "🇮🇱 עברית" keyboard.append([telegram.KeyboardButton(lang)]) options[lang] = "he" + if "es_mx" in self.cfg["Language"]["enabled_languages"]: + lang = "🇲🇽 Español" + keyboard.append([telegram.KeyboardButton(lang)]) + options[lang] = "es_mx" # Send the previously created keyboard to the user (ensuring it can be clicked only 1 time) self.bot.send_message(self.chat.id, self.loc.get("conversation_language_select"),