The Problem: Tu bot de Discord no está traduciendo correctamente los nombres de los comandos slash. Estás intentando usar app_commands.locale_str, pero no está funcionando como esperabas. Los nombres de los comandos siguen apareciendo en el idioma base, sin importar el idioma configurado en el cliente Discord del usuario.
TL;DR: The Quick Fix: Debes usar el parámetro name_localizations en lugar de app_commands.locale_str para traducir los nombres de tus comandos slash. app_commands.locale_str solo funciona para descripciones y opciones, no para el nombre del comando en sí. Después de añadir las traducciones, recuerda sincronizar tu árbol de comandos con Discord usando await client.tree.sync().
Understanding the “Why” (The Root Cause):
El parámetro name en el decorador @client.tree.command establece el nombre base del comando. app_commands.locale_str no se puede usar directamente aquí porque este decorador espera una cadena simple para el nombre principal. Para proporcionar traducciones, debes usar el parámetro name_localizations, que es un diccionario que mapea los códigos de idioma de Discord a los nombres traducidos del comando. Discord usará este diccionario para mostrar el nombre correcto según el idioma del usuario.
Step-by-Step Guide:
Paso 1: Modifica tu comando para usar name_localizations:
Reemplaza tu código original con el siguiente:
@client.tree.command(
name="greet", # Nombre base del comando
name_localizations={
app_commands.Locale.es: "saludar", # Traducción al español
app_commands.Locale.fr: "saluer", # Traducción al francés
# Agrega más traducciones según sea necesario
}
)
@app_commands.default_permissions(administrator=True)
async def greet(ctx: Interaction) -> None:
await ctx.response.send_message(content='greeting message')
Paso 2: Sincroniza tu árbol de comandos:
Después de añadir el diccionario name_localizations, debes sincronizar tu árbol de comandos con Discord para que los cambios surtan efecto. Esto se hace usando el método sync() del objeto client.tree:
await client.tree.sync() # Para comandos globales
# O, para comandos de servidor específico:
# await client.tree.sync(guild=my_guild)
Recuerda que my_guild debe ser un objeto discord.Guild representando tu servidor.
Paso 3: Verifica los códigos de idioma:
Asegúrate de usar los códigos de idioma correctos en el diccionario name_localizations. Puedes encontrar una lista completa de los códigos de idioma compatibles con Discord en su documentación.
Common Pitfalls & What to Check Next:
- Caché del Cliente Discord: Los cambios en la localización podrían no ser visibles inmediatamente. Reiniciar el cliente Discord del usuario a menudo es necesario para que los cambios surtan efecto.
- Códigos de idioma: Revisa minuciosamente los códigos de idioma que usas para asegurarte de que son correctos. Un código de idioma incorrecto evitará que la traducción se muestre.
- Permisos: Asegúrate de que tu bot tenga los permisos necesarios en el servidor para que los comandos se muestren correctamente.
- Límites de caracteres: Ten en cuenta los límites de caracteres para los nombres de comandos. Las traducciones podrían ser truncadas si superan el límite.
Still running into issues? Share your (sanitized) config files, the exact command you ran, and any other relevant details. The community is here to help!