Traducción al español de España de Dungeon Crawl Stone Soup v0.34.1.
🌐 Repositorio público — https://github.com/Ricard1974/dcss-es
| Componente | Archivos | Cobertura | Estado |
|---|---|---|---|
| UI (menús, etc) | 10 | 100% | ✅ |
| Format strings | 1 archivo | 95% | ✅ |
| Descripciones | 23 | 100% | ✅ |
| Base de datos | 23 | 100% | ✅ |
| Parches C++ | ~12 | — | ✅ |
| Total | 70 | 99% | 🎉 |
| Archivo | Entradas | Notas |
|---|---|---|
combat.txt |
900 | Mensajes de combate (716 format strings con %s) |
misc.txt |
~1700 | Cadenas misceláneas, mensajes del juego |
menu.txt |
71 | Menús de creación de personaje |
commands.txt |
179 | Comandos, ayuda de teclas, pantalla |
inventory.txt |
206 | Descripciones de objetos |
ability.txt |
276 | Habilidades raciales y divinas |
religion.txt |
297 | Los 28 dioses — mensajes, poderes, títulos |
skills.txt |
325 | Descripciones de habilidades |
status.txt |
28 | Estados de duración y efectos |
names.txt |
118 | Nombres de especies, clases, modos de juego |
23 archivos con descripciones de monstruos, objetos, hechizos, dioses, razas, clases, tutorial, etc. Todos traducidos al español.
23 archivos con speech de monstruos, FAQ, ayuda, nombres aleatorios, etc. Todos traducidos al español.
| Archivo | Parche | Propósito |
|---|---|---|
translation.cc |
Infraestructura tr() + carga de .txt |
Sistema de traducción completo |
translation.cc |
Fix filtro: %% en vez de % |
Bug fix: no descartar claves con %s |
message.cc |
text = tr(text) en _mpr() |
Traduce mensajes estáticos |
message.cc |
string fmt = tr(format) en do_message_print() |
Traduce format strings con %s ANTES de formatear |
format.cc |
tr() en cprintf() |
Barra de estado |
cio.cc |
tr() en wrapcprintf() |
Panel derecho de stats |
libunix.cc |
tr() en cprintf() |
Menú principal y textos |
startup.cc |
tr(entry.label) |
Modos de juego del menú |
command.cc |
tr(desc) + carga localizada |
Descripciones de teclas, ayuda |
newgame.cc |
tr() en species/jobs/grupos |
Nombres en creación de personaje |
menu.cc |
tr() línea por línea |
Pantalla de ayuda (?) |
Makefile.obj |
+translation.o | Compilar el sistema de traducción |
- Filtro que descartaba %s:
line[0] == '%'eliminaba TODAS las claves que empezaban con%s, dejando inutilizadas 384 traducciones de combate. Fix:line.substr(0,2) == "%%". - Hook post-formateo:
_mpr()recibía el texto ya formateado con nombres de monstruo, haciendo imposible matchear contra las claves con%s. Fix: hook endo_message_print()que traduce el formato antes devsnprintf.
- Configurar el idioma en
~/.crawl/init.txt:
echo "language = es" >> ~/.crawl/init.txt- Ejecutar el juego:
cd ~/proyectos/dcss-squashfs/squashfs-root/usr
./bin/crawlO usando un RC personalizado:
./bin/crawl -rc ~/.crawl/init.txt
⚠️ Importante: NO usarLANGUAGE=escomo variable de entorno. DCSS v0.34.1 usa la opciónlanguagedel archivo de configuración, no la variableLANGUAGE.
cd ~/proyectos/dcss-es
bash scripts/build_con_traducciones.shEsto clona el código fuente de DCSS v0.34.1, aplica parches, copia traducciones,
compila y genera el binario en /tmp/dcss-build-*/crawl-ref/source/crawl.
cd ~/proyectos/dcss-es
python3 scripts/verify.pyEsto verifica:
- Binario: tamaño y parches clave
- Archivos UI: 10 archivos en translations/, dat/ y squashfs
- Traducciones de ayuda: secciones de teclas, menús, nombres
- Archivos descript: 23 archivos con estructura correcta
- Archivos database: 23 archivos presentes
- Problemas textuales: 0 Will, 0 usted, 0 §, 0 fideos, 0 $cmd rotos
- Sincronización: translations/ coincide con dat/
cd ~/proyectos/dcss-es
timeout 300 python3 scripts/bot_qa.pyJuega automáticamente y detecta texto en inglés en pantalla.
La infraestructura de traducción ya está lista. No hace falta modificar código C++
para añadir un nuevo idioma. Los parches existentes (tr() en los puntos de
salida) funcionan para cualquier idioma.
| Grupo | Archivos | Descripción |
|---|---|---|
| UI | 10 | Menús, comandos, barra de estado, nombres, combate |
| Descript | 23 | Descripciones de monstruos, objetos, hechizos, etc. |
| Database | 23 | FAQ, speech de monstruos, nombres, ayuda |
# 1. Crear directorios para el nuevo idioma
# (código ISO 639-1: fr, pt, de, it, etc.)
LANG=pt # cambiar al código deseado
mkdir -p translations/ui/$LANG translations/descript/$LANG
mkdir -p dat/ui/$LANG dat/descript/$LANG dat/database/$LANG
# 2. Copiar originales en inglés como base
cp dat/ui/*.txt translations/ui/$LANG/ 2>/dev/null
cp dat/descript/*.txt translations/descript/$LANG/
cp dat/database/*.txt dat/database/$LANG/
# 3. Traducir los archivos
# Opción A: manualmente (recomendado para calidad)
# Opción B: con LibreTranslate (rápido, requiere revisión)
# Los scripts existentes protegen automáticamente:
# - $cmd[...] / $item[...] (comandos del juego)
# - @The_monster@, @player_name@ (placeholders)
# - <tags> HTML (formato)
# - %%%% (separadores de entrada)
# - %s, %d, %f (format strings)
# 4. Compilar (los parches C++ ya funcionan)
bash scripts/build_con_traducciones.sh
# 5. Configurar el idioma
echo "language = $LANG" >> ~/.crawl/init.txtAl traducir con herramientas automáticas, estos patrones deben protegerse (reemplazar con placeholders antes de traducir y restaurar después):
| Patrón | Ejemplo | Proteger |
|---|---|---|
$cmd[...] |
$cmd[CMD_REST] |
✅ Siempre |
$item[...] |
$item[gold] |
✅ Siempre |
@...@ |
@The_monster@ |
✅ Siempre |
<...> |
<w>, <input>, <bat> |
✅ Siempre |
%%%% |
Separador de entrada | ✅ Siempre |
%s, %d, %f |
Format strings | ✅ Siempre |
<<...>> |
<<query>> |
✅ Siempre |
[[...]] / {{...}} |
Código Lua | ✅ Siempre |
| Método | Tiempo | Calidad |
|---|---|---|
| LibreTranslate automático | ~2-3 horas | Aceptable, requiere revisión |
| Traducción manual | Semanas | Excelente |
| Híbrido (automático + revisión) | ~1 semana | Buena |
- Los archivos
.txtse cargan en tiempo de ejecución (no necesitan recompilación) - Solo los cambios en
source/*.ccnecesitan recompilar - El verificador
scripts/verify.pydetecta problemas estructurales - Las caches SQLite en
~/.crawl/saves/db/deben eliminarse al cambiar de idioma - No usar "usted" en español (tuteo: "tú")
- Las claves de entrada (primera línea tras
%%%%) deben permanecer en inglés - Configurar con
language = esen init.txt, NO con la variableLANGUAGE - Los nombres de monstruo se muestran en inglés (el juego los genera así)
GPLv2+ (igual que Dungeon Crawl Stone Soup)