Files
Shiip-of-Hakinian-Espanol/scripts/sync_languages.py
nickpons666 77268dbf57
Some checks failed
generate-builds / generate-soh-otr (push) Has been cancelled
generate-builds / build-macos (push) Has been cancelled
generate-builds / build-linux (push) Has been cancelled
generate-builds / build-windows (push) Has been cancelled
Convert all remaining hardcoded text to LUS_LOC
- Replace 5 hardcoded text strings with LUS_LOC() calls:
  * ResolutionEditor.cpp: 'Click to resolve' -> BUTTON_CLICK_TO_RESOLVE
  * ResolutionEditor.cpp: ' ' (space) -> TEXT_SPACE
  * SohMenuNetwork.cpp: ':' (colon) -> TEXT_COLON (2 instances)
  * UIWidgets.cpp: '+' (plus) -> TEXT_PLUS
- Add new translation keys to both en_US.json and es_ES.json:
  * BUTTON_CLICK_TO_RESOLVE: 'Click to resolve' / 'Haz clic para resolver'
  * TEXT_SPACE: ' ' / ' '
  * TEXT_COLON: ':' / ':'
  * TEXT_PLUS: '+' / '+'
- All hardcoded UI text now uses localization system
- Compilation successful with only minor format warnings

This completes the immediate task of eliminating hardcoded text strings.
2026-03-28 16:32:42 -06:00

152 lines
5.1 KiB
Python

#!/usr/bin/env python3
"""
Script para sincronizar archivos de traducción JSON
- Detecta claves faltantes en otros idiomas
- Genera reportes sobre traducciones pendientes
- Añade placeholders automáticamente
"""
import json
import sys
from pathlib import Path
from collections import defaultdict
PROJECT_ROOT = Path(__file__).parent.parent
LANGUAGES_DIR = PROJECT_ROOT / "languages"
def load_language_file(filename):
"""Carga un archivo de idioma"""
filepath = LANGUAGES_DIR / filename
if not filepath.exists():
print(f"❌ Archivo no encontrado: {filepath}")
return None
with open(filepath, 'r', encoding='utf-8') as f:
return json.load(f)
def save_language_file(filename, data):
"""Guarda un archivo de idioma"""
filepath = LANGUAGES_DIR / filename
with open(filepath, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4, ensure_ascii=False)
def sync_language_to_reference(ref_lang="en_US.json", target_lang="es_ES.json"):
"""Sincroniza un idioma con el de referencia"""
ref_data = load_language_file(ref_lang)
target_data = load_language_file(target_lang)
if ref_data is None or target_data is None:
return 0, 0
ref_keys = set(ref_data.keys())
target_keys = set(target_data.keys())
missing_keys = ref_keys - target_keys
extra_keys = target_keys - ref_keys
print(f"\n{'='*70}")
print(f"Sincronización: {ref_lang}{target_lang}")
print(f"{'='*70}")
added = 0
if missing_keys:
print(f"\n📝 Claves faltantes en {target_lang}: {len(missing_keys)}")
for key in sorted(missing_keys):
target_data[key] = ref_data[key] # Usar valor inglés como placeholder
added += 1
print(f" + {key}: \"{ref_data[key][:50]}...\"" if len(ref_data[key]) > 50 else f" + {key}: \"{ref_data[key]}\"")
removed = 0
if extra_keys:
print(f"\n🗑️ Claves huérfanas en {target_lang}: {len(extra_keys)}")
print(" (Considere revisar antes de eliminar)")
for key in sorted(extra_keys):
print(f" - {key}: \"{target_data[key][:50]}...\"" if len(target_data[key]) > 50 else f" - {key}: \"{target_data[key]}\"")
if added > 0:
save_language_file(target_lang, target_data)
print(f"\n✓ Guardado: {added} claves añadidas a {target_lang}")
return added, len(extra_keys)
def generate_translation_report():
"""Genera un reporte de progreso de traducciones"""
en_data = load_language_file("en_US.json")
if en_data is None:
return
language_files = list(LANGUAGES_DIR.glob("*.json"))
language_files = [f for f in language_files if f.name != 'shipofharkinian.json']
print(f"\n{'='*70}")
print("📊 REPORTE DE PROGRESO DE TRADUCCIONES")
print(f"{'='*70}\n")
total_keys = len(en_data)
print(f"Total de claves a traducir: {total_keys}\n")
for lang_file in sorted(language_files):
lang_data = load_language_file(lang_file.name)
if lang_data is None:
continue
translated = len([k for k in lang_data.keys() if k in en_data.keys()])
percentage = (translated / total_keys * 100) if total_keys > 0 else 0
bar_length = 40
filled = int(bar_length * percentage / 100)
bar = '' * filled + '' * (bar_length - filled)
print(f"{lang_file.name:15} [{bar}] {percentage:5.1f}% ({translated}/{total_keys})")
print(f"\n{'='*70}")
def group_keys_by_prefix():
"""Agrupa claves por prefijo para mejor visualización"""
en_data = load_language_file("en_US.json")
if en_data is None:
return
prefixes = defaultdict(list)
for key in en_data.keys():
prefix = key.split('_')[0] if '_' in key else 'OTHER'
prefixes[prefix].append(key)
print(f"\n{'='*70}")
print("🏷️ CLAVES AGRUPADAS POR PREFIJO")
print(f"{'='*70}\n")
for prefix in sorted(prefixes.keys()):
count = len(prefixes[prefix])
print(f"{prefix:20} {count:4} claves")
print(f"\n{'='*70}")
def main():
import argparse
parser = argparse.ArgumentParser(description='Sincronizar archivos de traducción')
parser.add_argument('--sync', action='store_true', help='Sincronizar idiomas faltantes')
parser.add_argument('--report', action='store_true', help='Generar reporte de progreso')
parser.add_argument('--prefixes', action='store_true', help='Mostrar claves agrupadas por prefijo')
parser.add_argument('--all', action='store_true', help='Ejecutar todas las operaciones')
args = parser.parse_args()
if not args.sync and not args.report and not args.prefixes and not args.all:
args.all = True
if args.sync or args.all:
total_added, total_extra = sync_language_to_reference()
print(f"\n✓ Sincronización completada")
if args.report or args.all:
generate_translation_report()
if args.prefixes or args.all:
group_keys_by_prefix()
if __name__ == "__main__":
main()