Blog

fix_translated_names.py

#!/usr/bin/env python3
“””Fix remaining English artifacts in translated filenames.”””

from __future__ import annotations

import os
import re
import sys

DIR = os.path.dirname(os.path.abspath(__file__))

FIXES: list[tuple[str, str]] = [
(r”^Advantage y exclusivas en Betxico Casino para 2026\.txt$”,
“Ventajas y exclusivas en Betxico Casino para 2026.txt”),
(r”^Advantages y bonos exclusivos al jugar en Playuzu Casino\.txt$”,
“Ventajas y bonos exclusivos al jugar en Playuzu Casino.txt”),
(r”^Discover la experiencia unica de Betxico Casino en linea\.txt$”,
“Descubre la experiencia unica de Betxico Casino en linea.txt”),
(r”Desata la diversion de Betxico Casino Ultimas Offerings\.txt$”,
“Desata la diversion de las ultimas ofertas de Betxico Casino.txt”),
(r”Descubre la emocion con Betxico Casino Unicas Offerings\.txt$”,
“Descubre la emocion con las unicas ofertas de Betxico Casino.txt”),
(r”Descubre Betxico Casino Innovadora Juego Vive en 2026\.txt$”,
“Descubre la innovadora experiencia de juego de Betxico Casino en 2026.txt”),
(r”Descubre Betxico Casino Unicas Juego Vive en 2026\.txt$”,
“Descubre la unica experiencia de juego de Betxico Casino en 2026.txt”),
(r”Explora Betxico Casino Incomparable Juego Vive en 2026\.txt$”,
“Explora la experiencia de juego incomparable de Betxico Casino en 2026.txt”),
(r”Descubre Playuzu Casino emocionantes juegos Proveedores y Bonos\.txt$”,
“Descubre los emocionantes proveedores de juegos y bonos de Playuzu Casino.txt”),
(r”Explora Betxico Casino emocionantes juegos Proveedores y Bonos\.txt$”,
“Explora los emocionantes proveedores de juegos y bonos de Betxico Casino.txt”),
(r”Descubre Betxico Casino emocionantes juegos Seleccion y Promociones\.txt$”,
“Descubre la emocionante seleccion de juegos y promociones de Betxico Casino.txt”),
(r”Explora Betxico Casino emocionantes juegos Seleccion y Promociones\.txt$”,
“Explora la emocionante seleccion de juegos y promociones de Betxico Casino.txt”),
(r”Descubre emocionantes caracteristicas y Promociones en Betxico Casino\.txt$”,
“Descubre emocionantes caracteristicas y promociones en Betxico Casino.txt”),
(r”Descubre Betxico Casino emocionantes juegos y Promociones en 2026\.txt$”,
“Descubre los emocionantes juegos y promociones de Betxico Casino en 2026.txt”),
(r”Descubre Betxico Casino emocionantes juegos y Promociones para 2026\.txt$”,
“Descubre los emocionantes juegos y promociones de Betxico Casino para 2026.txt”),
(r”Explora Betxico Casino emocionantes juegos y Promociones en 2026\.txt$”,
“Explora los emocionantes juegos y promociones de Betxico Casino en 2026.txt”),
(r”Descubre Casino Fundalor emocionantes bonos y Promociones en 2026\.txt$”,
“Descubre los emocionantes bonos y promociones de Casino Fundalor en 2026.txt”),
(r”Descubre Casino Fundalor emocionantes juegos y Promociones en 2026\.txt$”,
“Descubre los emocionantes juegos y promociones de Casino Fundalor en 2026.txt”),
(r”Descubre Fundalor Casino emocionantes juegos y Promociones\.txt$”,
“Descubre los emocionantes juegos y promociones de Fundalor Casino.txt”),
(r”Descubre Playuzu Casino emocionantes juegos Vive en 2026\.txt$”,
“Descubre los emocionantes juegos de Playuzu Casino en 2026.txt”),
(r”Analisis de Fundalor Casino 2026 descubre emocionantes Bonos y juegos\.txt$”,
“Analisis de Fundalor Casino 2026 descubre emocionantes bonos y juegos.txt”),
]

GENERIC: list[tuple[str, str]] = [
(r”\bemocionantes Bonos\b”, “emocionantes bonos”),
(r”\blos mejores Bonos\b”, “los mejores bonos”),
(r”\by Promociones\b”, “y promociones”),
(r”\bJuego Vive\b”, “experiencia de juego”),
(r”\bJuego Seleccion\b”, “seleccion de juegos”),
(r”\bJuego Proveedores\b”, “proveedores de juegos”),
(r”\bOfferings\b”, “ofertas”),
(r”\bIncomparable Juego\b”, “experiencia de juego incomparable”),
(r”\bIncomparable variedad\b”, “variedad incomparable”),
(r”\bTop juegos\b”, “Mejores juegos”),
(r”\bTop estrategias\b”, “Mejores estrategias”),
]

def fix_name(name: str) -> str | None:
for pattern, repl in FIXES:
if re.fullmatch(pattern, name):
return repl
new = name
for pattern, repl in GENERIC:
new2 = re.sub(pattern, repl, new)
if new2 != new:
new = new2
return new if new != name else None

def main() -> int:
if hasattr(sys.stdout, “reconfigure”):
sys.stdout.reconfigure(encoding=”utf-8″, errors=”replace”)

apply = “–apply” in sys.argv
changes: list[tuple[str, str]] = []
for entry in sorted(os.listdir(DIR)):
if not entry.endswith(“.txt”) or entry.startswith(“.__”):
continue
fixed = fix_name(entry)
if fixed and fixed != entry:
changes.append((entry, fixed))

print(f”Fixes: {len(changes)}”)
for old, new in changes:
print(f” {old}”)
print(f” -> {new}”)

if not apply:
print(“\nDry run. Pass –apply to fix.”)
return 0

taken = set(os.listdir(DIR))
for old, new in changes:
target = new
n = 2
stem, ext = os.path.splitext(new)
while target in taken and target != old:
target = f”{stem} ({n}){ext}”
n += 1
os.rename(os.path.join(DIR, old), os.path.join(DIR, target))
taken.discard(old)
taken.add(target)
print(f”Fixed {len(changes)} files.”)
return 0

if __name__ == “__main__”:
raise SystemExit(main())

Leave a Comment

July 2026
M T W T F S S
 12345
6789101112
13141516171819
20212223242526
2728293031  

[wpia id=”1″ title=”yes” language=”auto”]