import pandas as pd import os import sys import time import PyLibrary.funciones_comunes as fc from translation_config import TranslationConfig import langid from openpyxl import load_workbook from openpyxl.styles import PatternFill, Alignment # Definir el logger a nivel de módulo logger = None def configurar_detector_idiomas(): codigos_idioma = [code.split("-")[0] for _, code in fc.IDIOMAS.values()] langid.set_languages(codigos_idioma) def detectar_idioma(texto, tipo_PLC): texto_limpio = fc.limpiar_texto(tipo_PLC, texto) if len(texto_limpio.strip()) < 3: # No detectar idioma en textos muy cortos return "unknown" try: idioma, _ = langid.classify(texto_limpio) return idioma except: return "unknown" def obtener_nombre_idioma(codigo_corto): for nombre, codigo in fc.IDIOMAS.values(): if codigo.startswith(codigo_corto): return nombre return "Desconocido" def exportar_para_traduccion(config: TranslationConfig): master_path = config.get_master_path() if not os.path.exists(master_path): print("El archivo maestro no existe.") return configurar_detector_idiomas() df_maestro = fc.read_dataframe_with_cleanup_retries(master_path) df_export = pd.DataFrame() primera_columna = df_maestro.columns[0] df_export[primera_columna] = df_maestro[primera_columna] df_export[config.codigo_idioma_seleccionado] = df_maestro[ config.codigo_idioma_seleccionado ] df_export["Idioma_Detectado"] = "" ruta_export = config.get_translate_path() with pd.ExcelWriter(ruta_export, engine="openpyxl") as writer: df_export.to_excel(writer, index=False, sheet_name="Sheet1") workbook = writer.book worksheet = writer.sheets["Sheet1"] wrap_alignment = Alignment(wrap_text=True, vertical="top") for col in ["A", "B"]: for cell in worksheet[col]: cell.alignment = wrap_alignment worksheet.column_dimensions[col].width = 50 idioma_esperado = fc.idiomas_shortcodefromcode( config.codigo_idioma_seleccionado ) fill = PatternFill(start_color="ADD8E6", end_color="ADD8E6", fill_type="solid") total_rows = worksheet.max_row - 1 # Excluimos la fila de encabezado progress_bar = fc.ProgressBar( total_rows, prefix="Procesando filas:", suffix="Completado" ) for row in range(2, worksheet.max_row + 1): texto = worksheet.cell(row=row, column=2).value if texto: idioma_detectado = detectar_idioma(texto, config.codigo_tipo_PLC) if ( idioma_detectado != "unknown" and idioma_detectado != idioma_esperado ): worksheet.cell(row=row, column=2).fill = fill nombre_idioma = obtener_nombre_idioma(idioma_detectado) worksheet.cell(row=row, column=3).value = nombre_idioma progress_bar.update(row - 1) progress_bar.finish() print(f"\nArchivo exportado para traducción: {ruta_export}") print("Las celdas con idioma incorrecto han sido marcadas en azul.") print( "Se ha añadido el nombre del idioma detectado cuando es diferente del esperado." ) master_path = config.get_master_path() if not os.path.exists(master_path): print("El archivo maestro no existe.") return configurar_detector_idiomas() df_maestro = fc.read_dataframe_with_cleanup_retries(master_path) df_export = pd.DataFrame() primera_columna = df_maestro.columns[0] df_export[primera_columna] = df_maestro[primera_columna] df_export[config.codigo_idioma_seleccionado] = df_maestro[ config.codigo_idioma_seleccionado ] df_export["Idioma_Detectado"] = "" ruta_export = config.get_translate_path() with pd.ExcelWriter(ruta_export, engine="openpyxl") as writer: df_export.to_excel(writer, index=False, sheet_name="Sheet1") workbook = writer.book worksheet = writer.sheets["Sheet1"] wrap_alignment = Alignment(wrap_text=True, vertical="top") for col in ["A", "B"]: for cell in worksheet[col]: cell.alignment = wrap_alignment worksheet.column_dimensions[col].width = 50 idioma_esperado = fc.idiomas_shortcodefromcode( config.codigo_idioma_seleccionado ) fill = PatternFill(start_color="ADD8E6", end_color="ADD8E6", fill_type="solid") total_rows = worksheet.max_row - 1 # Excluimos la fila de encabezado progress_bar = fc.ProgressBar( total_rows, prefix="Progreso:", suffix="Completado" ) for row in range(2, worksheet.max_row + 1): texto = worksheet.cell(row=row, column=2).value if texto: idioma_detectado = detectar_idioma(texto, config.codigo_tipo_PLC) if ( idioma_detectado != "unknown" and idioma_detectado != idioma_esperado ): worksheet.cell(row=row, column=2).fill = fill nombre_idioma = obtener_nombre_idioma(idioma_detectado) worksheet.cell(row=row, column=3).value = nombre_idioma progress_bar.increment() progress_bar.finish() print(f"\nArchivo exportado para traducción: {ruta_export}") print("Las celdas con idioma incorrecto han sido marcadas en azul.") print( "Se ha añadido el nombre del idioma detectado cuando es diferente del esperado." ) def run(config: TranslationConfig): global logger logger = fc.configurar_logger(config.work_dir) script_name = os.path.basename(__file__) print(f"\rIniciando: {script_name}\r") exportar_para_traduccion(config) if __name__ == "__main__": import menu_pasos_traduccion menu_pasos_traduccion.main()