Mejorada la logica general con Funciones Base

This commit is contained in:
Miguel 2024-08-01 13:53:38 +02:00
parent 4e1dfbdbcd
commit 392ab1b3ad
15 changed files with 739 additions and 313 deletions

Binary file not shown.

Binary file not shown.

View File

@ -1,6 +1,9 @@
import re import re
import time import time
import pandas as pd import pandas as pd
from openpyxl import load_workbook
import logging
import os
# Diccionario de idiomas # Diccionario de idiomas
IDIOMAS = { IDIOMAS = {
@ -13,25 +16,31 @@ IDIOMAS = {
6: ("German", "de-DE"), 6: ("German", "de-DE"),
} }
def mostrar_idiomas(): def mostrar_idiomas():
print("Selecciona el idioma de destino:") print("Selecciona el idioma de destino:")
for numero, (nombre, _) in IDIOMAS.items(): for numero, (nombre, _) in IDIOMAS.items():
print(f"{numero}: {nombre}") print(f"{numero}: {nombre}")
def transformar_texto(texto):
if pd.isnull(texto):
return texto
# Sustituir [[digits]] por <>
texto_transformado = re.sub(r'\[\[digits\]\]', '<>', texto)
# Sustituir cualquier <...> por <#>
texto_transformado = re.sub(r'<.*?>', '<#>', texto_transformado)
return texto_transformado
def configurar_logger():
logger = logging.getLogger("translate_logger")
logger.setLevel(logging.DEBUG)
os.makedirs(".\\logs", exist_ok=True)
fh = logging.FileHandler(".\\logs\\translate_log.log", encoding="utf-8")
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s : ")
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
#
# Salvar archivo Excel controlando que no este abierto. Sino espera.
#
def save_dataframe_with_retries(df, output_path, max_retries=5, retry_delay=5): def save_dataframe_with_retries(df, output_path, max_retries=5, retry_delay=5):
""" """
Guarda un DataFrame en un archivo Excel, reintentando si el archivo está en uso. Guarda un DataFrame en un archivo Excel, reintentando si el archivo está en uso.
:param df: El DataFrame a guardar. :param df: El DataFrame a guardar.
:param output_path: La ruta del archivo donde se guardará el DataFrame. :param output_path: La ruta del archivo donde se guardará el DataFrame.
:param max_retries: El número máximo de reintentos en caso de error. :param max_retries: El número máximo de reintentos en caso de error.
@ -40,12 +49,150 @@ def save_dataframe_with_retries(df, output_path, max_retries=5, retry_delay=5):
retries = 0 retries = 0
while retries < max_retries: while retries < max_retries:
try: try:
df.to_excel(output_path, index=False) df.to_excel(output_path, sheet_name="User Texts", index=False)
print("Archivo guardado exitosamente.") print("Archivo guardado exitosamente.")
return return
except PermissionError as e: except PermissionError as e:
print(f"Error de permiso: {e}. Por favor cierre el archivo. Reintentando en {retry_delay} segundos...") print(
f"Error de permiso: {e}. Por favor cierre el archivo. Reintentando en {retry_delay} segundos..."
)
retries += 1 retries += 1
time.sleep(retry_delay) time.sleep(retry_delay)
print(f"No se pudo guardar el archivo después de {max_retries} intentos.")
def cambiar_nombre_hoja(archivo_excel, nombre_hoja_actual, nombre_hoja_nuevo):
# Cargar el archivo Excel existente
libro = load_workbook(archivo_excel)
# Verificar si la hoja existe en el archivo
if nombre_hoja_actual in libro.sheetnames:
# Obtener la hoja actual
hoja = libro[nombre_hoja_actual]
# Cambiar el nombre de la hoja
hoja.title = nombre_hoja_nuevo
# Guardar los cambios en el archivo Excel
libro.save(archivo_excel)
print(
f"El nombre de la hoja ha sido cambiado de '{nombre_hoja_actual}' a '{nombre_hoja_nuevo}'."
)
else:
print(f"La hoja '{nombre_hoja_actual}' no existe en el archivo.")
# Verificar si la columna es del tipo "xx-YY" usando una expresión regular
def es_columna_tipo_xxYY(columna):
# Verificar si la columna es del tipo "xx-YY" usando una expresión regular
return bool(re.match(r"^[a-z]{2}-[A-Z]{2}$", columna))
#
# Transforma: "A271/47/6 Air - M<field ref="0" /> - Necessaria Manutenzione Filtro" ->
# "A[[digits]]/[[digits]]/[[digits]] Air - M<field ref="[[digits]]" /> - Necessaria Manutenzione Filtro"
#
# Este procesamiento se aplica a las celdas clave
def compactar_celda_clave(celda_original):
if pd.isnull(celda_original):
return celda_original
print(f"No se pudo guardar el archivo después de {max_retries} intentos.") def reemplazar(match):
if match.group(1): # Si hay contenido dentro de <>
return f"<{match.group(1)}>"
return "[[digits]]"
# Reemplaza dígitos fuera de <> con [[digits]], y preserva el contenido dentro de <>
return re.sub(r"<(.*?)>|\d+", reemplazar, str(celda_original))
#
# Transforma: "A[[digits]]/[[digits]]/[[digits]] Air - M<field ref="[[digits]]" /> - Necessaria Manutenzione Filtro" ->
# "A<>/<>/<> Air - M<#>" /> - Necessaria Manutenzione Filtro"
#
# Este procesamiento se aplica a las celdas traducidas
def compactar_celda_traducida(celda_traducida):
if pd.isnull(celda_traducida):
return celda_traducida
celda_traducida = compactar_celda_clave(celda_traducida)
def reemplazar(match):
if match.group(1): # Si hay contenido dentro de <>
return "<#>"
return "<>"
# Reemplaza <...> con <#> y [[digits]] con <>
return re.sub(r"<(.*?)>|\[\[digits\]\]", reemplazar, str(celda_traducida))
# de "A271/47/6 Air - M<field ref="0" /> - Necessaria Manutenzione Filtro" -> [271,47,6]
# Obtener la secuencias de dígitos por [[digits]]
def obtener_digitos_celda_original(celda_original):
if pd.isnull(celda_original):
return []
# Primero, reemplazamos temporalmente el contenido de los tags con un marcador
texto_sin_tags = re.sub(r'<[^>]*>', '<<TAG>>', str(celda_original))
# Ahora buscamos los dígitos
digitos = re.findall(r'\d+', texto_sin_tags)
return digitos
# Original Traducida
# Transforma: "A271/47/6 Air - M<field ref="0" /> - Necessaria Manutenzione Filtro" , "A<>/<>/<> Air - M<#> - Filter Maintenance Required" ->
# "A271/47/6 Air - M<field ref="0" /> - Necessaria Manutenzione Filtro"
#
# Este procesamiento se aplica a las celdas traducidas para regresar al valor original
def decompactar_celda_traducida(celda_original, celda_traducida):
digitos = obtener_digitos_celda_original(celda_original)
celda_destino = celda_traducida
# Replace <> with digits
for d in digitos:
celda_destino = celda_destino.replace("<>", d, 1)
# Replace <#> with original content within <>
original_tags = re.findall(r"<.*?>", celda_original)
translated_tags = re.findall(r"<#>", celda_destino)
for orig, trans in zip(original_tags, translated_tags):
celda_destino = celda_destino.replace(trans, orig, 1)
return celda_destino
def verificar_celda_traducida(celda_clave, celda_traducida):
# Contar los placeholders de dígitos
digitos_clave = celda_clave.count("[[digits]]")
digitos_traducida = celda_traducida.count("<>")
# Contar los placeholders de tags
tags_clave = sum(1 for tag in re.findall(r"<.*?>", celda_clave) if tag != "[[digits]]")
tags_traducida = celda_traducida.count("<#>")
# Verificar si las cantidades coinciden
if digitos_clave == digitos_traducida and tags_clave == tags_traducida:
return True , ""
else:
text_error = f"Error de verificación:" + f" - Celda clave: {celda_clave}" + f" - Celda traducida: {celda_traducida}"
text_error += f" - Dígitos en clave: {digitos_clave}, Dígitos en traducida: {digitos_traducida}"
text_error += f" - Tags en clave: {tags_clave}, Tags en traducida: {tags_traducida}"
return False, text_error
if __name__ == "__main__":
celda_original = 'A271/47/6 Air - M<field ref="0" /> - Necessaria Manutenzione Filtro'
celda_original = 'DB<field ref="0" />/DB<field ref="1" />/DB<field ref="2" />'
celda_original = 'Text<field ref="0" />'
celda_clave = compactar_celda_clave(celda_original)
celda_tradc = compactar_celda_traducida(celda_original) + " TEXTO "
print()
print("Celda Original : " +celda_original)
print("Celda Clave : " + celda_clave)
print("Celda Traducida: " + celda_tradc)
print("Digitos : " + ','.join(obtener_digitos_celda_original(celda_original)))
print("Celda : " + decompactar_celda_traducida(celda_original, celda_tradc))
print("Celda Original : " + celda_original)
print(verificar_celda_traducida(celda_clave=celda_clave, celda_traducida= celda_tradc))

416
logs/translate_log.log Normal file
View File

@ -0,0 +1,416 @@
2024-08-01 13:30:13,249 - INFO - .... :
2024-08-01 13:30:13,249 - INFO - Iniciando actualizacion en C:/Trabajo/VM/22 - 93841 - Sidel - Tilting/Reporte/Translate/TIAProjectTexts.xlsx desde el archivo maestro. Para ru-RU :
2024-08-01 13:30:13,801 - INFO - Fila 304, Columna ru-RU: "### ОШИБКА ###" actualizado a "### ОШИБКА ###" :
2024-08-01 13:30:13,801 - INFO - Fila 305, Columna ru-RU: "### ОШИБКА ###" actualizado a "### ОШИБКА ###" :
2024-08-01 13:30:13,801 - INFO - Fila 306, Columna ru-RU: "### ОШИБКА ###" actualizado a "### ОШИБКА ###" :
2024-08-01 13:30:13,802 - INFO - Fila 307, Columna ru-RU: "### ОШИБКА ###" actualizado a "### ОШИБКА ###" :
2024-08-01 13:30:13,802 - INFO - Fila 308, Columna ru-RU: "### ОШИБКА ###" actualizado a "### ОШИБКА ###" :
2024-08-01 13:30:13,803 - ERROR - Fila 327, Columna ru-RU: "текст 1" valor:"текст <>" no actualizado porque Error de verificación: - Celda clave: ### Output Scorta IN - ERRORE TESTO ### - Celda traducida: текст <> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:13,803 - ERROR - Fila 328, Columna ru-RU: "текст 1" valor:"текст <>" no actualizado porque Error de verificación: - Celda clave: ### Output Scorta OUT - ERRORE TESTO ### - Celda traducida: текст <> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:13,805 - INFO - Fila 351, Columna ru-RU: "#### ОШИБКА ####" actualizado a "#### ОШИБКА ####" :
2024-08-01 13:30:13,805 - INFO - Fila 352, Columna ru-RU: "#### ОШИБКА ####" actualizado a "#### ОШИБКА ####" :
2024-08-01 13:30:13,806 - INFO - Fila 353, Columna ru-RU: "#### ОШИБКА ####" actualizado a "#### ОШИБКА ####" :
2024-08-01 13:30:13,866 - ERROR - Fila 1899, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,866 - ERROR - Fila 1900, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,867 - ERROR - Fila 1901, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,868 - ERROR - Fila 1902, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,868 - ERROR - Fila 1904, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,868 - ERROR - Fila 1905, Columna ru-RU: "этикетировочные<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,869 - ERROR - Fila 1906, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,869 - ERROR - Fila 1907, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,869 - ERROR - Fila 1908, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,870 - ERROR - Fila 1909, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,870 - ERROR - Fila 1910, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,870 - ERROR - Fila 1911, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,870 - ERROR - Fila 1912, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:13,871 - ERROR - Fila 1914, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:30:14,067 - ERROR - Fila 5263, Columna ru-RU: "реле давления S1M03 - OK" valor:"реле давления S<>M<> - OK" no actualizado porque Error de verificación: - Celda clave: Abilitazione - Celda traducida: реле давления S<>M<> - OK - Dígitos en clave: 0, Dígitos en traducida: 2 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:14,076 - INFO - Fila 5306, Columna ru-RU: "Накопление Вход DOS" actualizado a "Накопление Вход DOS" :
2024-08-01 13:30:14,081 - INFO - Fila 5335, Columna ru-RU: "Текст" actualizado a "Текст" :
2024-08-01 13:30:14,083 - INFO - Fila 5342, Columna ru-RU: "Сигнализация Watchdog Modbus" actualizado a "Сигнализация Watchdog Modbus" :
2024-08-01 13:30:14,083 - INFO - Fila 5343, Columna ru-RU: "Сигнализация тайм-аута процедуры автотюнинга электрических параметров" actualizado a "Сигнализация тайм-аута процедуры автотюнинга электрических параметров" :
2024-08-01 13:30:14,083 - INFO - Fila 5344, Columna ru-RU: "Сигнализация Encoder SPI многооборотной части, многооборотная позиция больше не надежна" actualizado a "Сигнализация Encoder SPI многооборотной части, многооборотная позиция больше не надежна" :
2024-08-01 13:30:14,083 - INFO - Fila 5345, Columna ru-RU: "Сигнализация Encoder SPI однородной части, однородная позиция больше не надежна" actualizado a "Сигнализация Encoder SPI однородной части, однородная позиция больше не надежна" :
2024-08-01 13:30:14,084 - INFO - Fila 5346, Columna ru-RU: "Сигнализация неисправности флеш-памяти" actualizado a "Сигнализация неисправности флеш-памяти" :
2024-08-01 13:30:14,084 - INFO - Fila 5347, Columna ru-RU: "Сигнализация чтения энкодера SPI" actualizado a "Сигнализация чтения энкодера SPI" :
2024-08-01 13:30:14,084 - INFO - Fila 5348, Columna ru-RU: "Сигнализация недоступной или поврежденной памяти параметров" actualizado a "Сигнализация недоступной или поврежденной памяти параметров" :
2024-08-01 13:30:14,085 - INFO - Fila 5349, Columna ru-RU: "Сигнализация Не Присутствует" actualizado a "Сигнализация Не Присутствует" :
2024-08-01 13:30:14,085 - INFO - Fila 5350, Columna ru-RU: "Сигнализация аппаратного перенапряжения" actualizado a "Сигнализация аппаратного перенапряжения" :
2024-08-01 13:30:14,085 - INFO - Fila 5351, Columna ru-RU: "Сигнализация программного перенапряжения" actualizado a "Сигнализация программного перенапряжения" :
2024-08-01 13:30:14,085 - INFO - Fila 5352, Columna ru-RU: "Сигнализация перегрева двигателя" actualizado a "Сигнализация перегрева двигателя" :
2024-08-01 13:30:14,086 - INFO - Fila 5353, Columna ru-RU: "Сигнал тревоги о перегреве платы" actualizado a "Сигнал тревоги о перегреве платы" :
2024-08-01 13:30:14,086 - INFO - Fila 5354, Columna ru-RU: "Сигнал тревоги о перенапряжении" actualizado a "Сигнал тревоги о перенапряжении" :
2024-08-01 13:30:14,086 - INFO - Fila 5355, Columna ru-RU: "Сигнал тревоги о неправильном значении параметра" actualizado a "Сигнал тревоги о неправильном значении параметра" :
2024-08-01 13:30:14,086 - INFO - Fila 5356, Columna ru-RU: "Сигнал тревоги о неудачном восстановлении параметров по умолчанию" actualizado a "Сигнал тревоги о неудачном восстановлении параметров по умолчанию" :
2024-08-01 13:30:14,087 - INFO - Fila 5357, Columna ru-RU: "Сигнал тревоги о неудачном восстановлении параметров двигателя по умолчанию" actualizado a "Сигнал тревоги о неудачном восстановлении параметров двигателя по умолчанию" :
2024-08-01 13:30:14,087 - INFO - Fila 5358, Columna ru-RU: "Сигнал тревоги о пониженном напряжении" actualizado a "Сигнал тревоги о пониженном напряжении" :
2024-08-01 13:30:14,087 - INFO - Fila 5359, Columna ru-RU: "Сигнал тревоги пользователя" actualizado a "Сигнал тревоги пользователя" :
2024-08-01 13:30:14,087 - INFO - Fila 5360, Columna ru-RU: "Сигнал тревоги пользователя от цифрового входа" actualizado a "Сигнал тревоги пользователя от цифрового входа" :
2024-08-01 13:30:14,092 - INFO - Fila 5375, Columna ru-RU: "ALLARM: DX Channel Valve Sensors Gate A" actualizado a "ALLARM: DX Channel Valve Sensors Gate A" :
2024-08-01 13:30:14,092 - ERROR - Fila 5380, Columna ru-RU: "аварийные сигналы - делителя [DB1071]" valor:"аварийные сигналы - делителя [DB<>]" no actualizado porque Error de verificación: - Celda clave: Allarmi - SKID - Celda traducida: аварийные сигналы - делителя [DB<>] - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:14,092 - ERROR - Fila 5381, Columna ru-RU: "аварийные сигналы - Geosync [DB10171]" valor:"аварийные сигналы - Geosync [DB<>]" no actualizado porque Error de verificación: - Celda clave: Allarmi - Tilter - Celda traducida: аварийные сигналы - Geosync [DB<>] - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:14,108 - INFO - Fila 5535, Columna ru-RU: "Подъемный механизм" actualizado a "Подъемный механизм" :
2024-08-01 13:30:14,108 - INFO - Fila 5539, Columna ru-RU: "Низкий [Подъемный механизм]" actualizado a "Низкий [Подъемный механизм]" :
2024-08-01 13:30:14,108 - INFO - Fila 5540, Columna ru-RU: "Низкий [Платформа]" actualizado a "Низкий [Платформа]" :
2024-08-01 13:30:14,111 - INFO - Fila 5553, Columna ru-RU: "Обход" actualizado a "Обход" :
2024-08-01 13:30:14,112 - INFO - Fila 5558, Columna ru-RU: "Канал A" actualizado a "Канал A" :
2024-08-01 13:30:14,112 - INFO - Fila 5559, Columna ru-RU: "Канал B" actualizado a "Канал B" :
2024-08-01 13:30:14,117 - INFO - Fila 5589, Columna ru-RU: "Вызов пакетов" actualizado a "Вызов пакетов" :
2024-08-01 13:30:14,117 - INFO - Fila 5590, Columna ru-RU: "Вызов пакетов" actualizado a "Вызов пакетов" :
2024-08-01 13:30:14,118 - INFO - Fila 5591, Columna ru-RU: "Вызванные пакеты канала справа (B)" actualizado a "Вызванные пакеты канала справа (B)" :
2024-08-01 13:30:14,118 - INFO - Fila 5592, Columna ru-RU: "Packs Request on Left Channel (A)" actualizado a "Packs Request on Left Channel (A)" :
2024-08-01 13:30:14,130 - INFO - Fila 5672, Columna ru-RU: "Manual Divider Infeed Wrappers" actualizado a "Manual Divider Infeed Wrappers" :
2024-08-01 13:30:14,132 - INFO - Fila 5682, Columna ru-RU: "Pack Divider" actualizado a "Pack Divider" :
2024-08-01 13:30:14,138 - INFO - Fila 5759, Columna ru-RU: "Encoder not aligned yet" actualizado a "Encoder not aligned yet" :
2024-08-01 13:30:14,138 - INFO - Fila 5760, Columna ru-RU: "Encoder does not detect movement" actualizado a "Encoder does not detect movement" :
2024-08-01 13:30:14,138 - INFO - Fila 5761, Columna ru-RU: "Encoder detects wrong side movement" actualizado a "Encoder detects wrong side movement" :
2024-08-01 13:30:14,139 - INFO - Fila 5767, Columna ru-RU: "Hmi Error" actualizado a "Hmi Error" :
2024-08-01 13:30:14,140 - INFO - Fila 5768, Columna ru-RU: "Hmi Error" actualizado a "Hmi Error" :
2024-08-01 13:30:14,140 - INFO - Fila 5769, Columna ru-RU: "Hmi Error" actualizado a "Hmi Error" :
2024-08-01 13:30:14,140 - INFO - Fila 5770, Columna ru-RU: "Hmi Error" actualizado a "Hmi Error" :
2024-08-01 13:30:14,141 - INFO - Fila 5771, Columna ru-RU: "Hmi Error" actualizado a "Hmi Error" :
2024-08-01 13:30:14,141 - INFO - Fila 5772, Columna ru-RU: "CSP mode position reference error" actualizado a "CSP mode position reference error" :
2024-08-01 13:30:14,141 - INFO - Fila 5773, Columna ru-RU: "Error in CSP synchronization" actualizado a "Error in CSP synchronization" :
2024-08-01 13:30:14,142 - INFO - Fila 5781, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,144 - INFO - Fila 5782, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,144 - INFO - Fila 5783, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,144 - INFO - Fila 5784, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,152 - INFO - Fila 5869, Columna ru-RU: "Out Of Position" actualizado a "Out Of Position" :
2024-08-01 13:30:14,153 - INFO - Fila 5870, Columna ru-RU: "Out Of Position" actualizado a "Out Of Position" :
2024-08-01 13:30:14,153 - INFO - Fila 5871, Columna ru-RU: "Out Of Position" actualizado a "Out Of Position" :
2024-08-01 13:30:14,155 - INFO - Fila 5879, Columna ru-RU: "Geosync DOS" actualizado a "Geosync DOS" :
2024-08-01 13:30:14,157 - INFO - Fila 5899, Columna ru-RU: "Hardware DRS" actualizado a "Hardware DRS" :
2024-08-01 13:30:14,159 - INFO - Fila 5919, Columna ru-RU: "Normal Work" actualizado a "Normal Work" :
2024-08-01 13:30:14,159 - INFO - Fila 5920, Columna ru-RU: "Normal Work" actualizado a "Normal Work" :
2024-08-01 13:30:14,160 - INFO - Fila 5921, Columna ru-RU: "Normal Work" actualizado a "Normal Work" :
2024-08-01 13:30:14,166 - INFO - Fila 5951, Columna ru-RU: "Higher Infeed Platform Belt" actualizado a "Higher Infeed Platform Belt" :
2024-08-01 13:30:14,166 - INFO - Fila 5952, Columna ru-RU: "Hinge Conveyor Infeed" actualizado a "Hinge Conveyor Infeed" :
2024-08-01 13:30:14,166 - INFO - Fila 5953, Columna ru-RU: "Lower Infeed Platform Accumulation" actualizado a "Lower Infeed Platform Accumulation" :
2024-08-01 13:30:14,167 - INFO - Fila 5954, Columna ru-RU: "Lower Infeed Platform Belt" actualizado a "Lower Infeed Platform Belt" :
2024-08-01 13:30:14,167 - INFO - Fila 5956, Columna ru-RU: "Pack Divider Infeed" actualizado a "Pack Divider Infeed" :
2024-08-01 13:30:14,169 - INFO - Fila 5970, Columna ru-RU: "Pal Infeed Channel A (Left)" actualizado a "Pal Infeed Channel A (Left)" :
2024-08-01 13:30:14,169 - INFO - Fila 5971, Columna ru-RU: "Pal Infeed Channel B (Right)" actualizado a "Pal Infeed Channel B (Right)" :
2024-08-01 13:30:14,170 - INFO - Fila 5972, Columna ru-RU: "Initialization" actualizado a "Initialization" :
2024-08-01 13:30:14,171 - INFO - Fila 5988, Columna ru-RU: "Positioning interruption" actualizado a "Positioning interruption" :
2024-08-01 13:30:14,172 - INFO - Fila 5989, Columna ru-RU: "Oil aging overtemperature" actualizado a "Oil aging overtemperature" :
2024-08-01 13:30:14,172 - INFO - Fila 5992, Columna ru-RU: "Ion_Alm" actualizado a "Ion_Alm" :
2024-08-01 13:30:14,173 - INFO - Fila 5993, Columna ru-RU: "Ion_Level" actualizado a "Ion_Level" :
2024-08-01 13:30:14,173 - INFO - Fila 5994, Columna ru-RU: "Ion_Sts_Alm" actualizado a "Ion_Sts_Alm" :
2024-08-01 13:30:14,173 - INFO - Fila 5995, Columna ru-RU: "IPOS-ILLOP" actualizado a "IPOS-ILLOP" :
2024-08-01 13:30:14,175 - INFO - Fila 6007, Columna ru-RU: "KRONES" actualizado a "KRONES" :
2024-08-01 13:30:14,176 - INFO - Fila 6010, Columna ru-RU: "Labeller Selected" actualizado a "Labeller Selected" :
2024-08-01 13:30:14,178 - INFO - Fila 6027, Columna ru-RU: "EcoLab Lubrification" actualizado a "EcoLab Lubrification" :
2024-08-01 13:30:14,196 - INFO - Fila 6386, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,196 - INFO - Fila 6387, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,197 - INFO - Fila 6388, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,197 - INFO - Fila 6389, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,217 - INFO - Fila 6516, Columna ru-RU: "Fieldbus mode incompatible with hardware present" actualizado a "Fieldbus mode incompatible with hardware present" :
2024-08-01 13:30:14,221 - INFO - Fila 6539, Columna ru-RU: "No Request" actualizado a "No Request" :
2024-08-01 13:30:14,221 - INFO - Fila 6540, Columna ru-RU: "No Request" actualizado a "No Request" :
2024-08-01 13:30:14,222 - INFO - Fila 6541, Columna ru-RU: "No Request" actualizado a "No Request" :
2024-08-01 13:30:14,222 - INFO - Fila 6542, Columna ru-RU: "No Request" actualizado a "No Request" :
2024-08-01 13:30:14,222 - INFO - Fila 6543, Columna ru-RU: "No Request" actualizado a "No Request" :
2024-08-01 13:30:14,223 - INFO - Fila 6544, Columna ru-RU: "No Allarm: In Production" actualizado a "No Allarm: In Production" :
2024-08-01 13:30:14,223 - INFO - Fila 6545, Columna ru-RU: "No Allarm: In Production" actualizado a "No Allarm: In Production" :
2024-08-01 13:30:14,223 - INFO - Fila 6546, Columna ru-RU: "No Allarm: In Production" actualizado a "No Allarm: In Production" :
2024-08-01 13:30:14,223 - INFO - Fila 6547, Columna ru-RU: "No Allarm: In Production" actualizado a "No Allarm: In Production" :
2024-08-01 13:30:14,224 - INFO - Fila 6548, Columna ru-RU: "No Allarm: In Production" actualizado a "No Allarm: In Production" :
2024-08-01 13:30:14,224 - INFO - Fila 6549, Columna ru-RU: "No Allarm: In Production" actualizado a "No Allarm: In Production" :
2024-08-01 13:30:14,224 - INFO - Fila 6550, Columna ru-RU: "Nessuna Selezione" actualizado a "Nessuna Selezione" :
2024-08-01 13:30:14,224 - INFO - Fila 6551, Columna ru-RU: "Nessuna Selezione" actualizado a "Nessuna Selezione" :
2024-08-01 13:30:14,237 - INFO - Fila 6690, Columna ru-RU: "Palletizer" actualizado a "Palletizer" :
2024-08-01 13:30:14,268 - ERROR - Fila 6931, Columna ru-RU: "Recipe_element_14" valor:"Recipe_element_<>" no actualizado porque Error de verificación: - Celda clave: RCP\CONSENSI\DISCHARGE\SYNCHROBLOC - Celda traducida: Recipe_element_<> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:14,268 - ERROR - Fila 6932, Columna ru-RU: "Recipe_element_13" valor:"Recipe_element_<>" no actualizado porque Error de verificación: - Celda clave: RCP\CONSENSI\INFEED\SYNCHROBLOC - Celda traducida: Recipe_element_<> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:14,274 - INFO - Fila 6966, Columna ru-RU: "Filler" actualizado a "Filler" :
2024-08-01 13:30:14,274 - INFO - Fila 6967, Columna ru-RU: "Filler" actualizado a "Filler" :
2024-08-01 13:30:14,274 - INFO - Fila 6968, Columna ru-RU: "Filler" actualizado a "Filler" :
2024-08-01 13:30:14,275 - INFO - Fila 6969, Columna ru-RU: "Filler" actualizado a "Filler" :
2024-08-01 13:30:14,275 - INFO - Fila 6970, Columna ru-RU: "Filler" actualizado a "Filler" :
2024-08-01 13:30:14,275 - INFO - Fila 6971, Columna ru-RU: "Filler" actualizado a "Filler" :
2024-08-01 13:30:14,275 - INFO - Fila 6972, Columna ru-RU: "Filler" actualizado a "Filler" :
2024-08-01 13:30:14,276 - INFO - Fila 6973, Columna ru-RU: "Labeller Reference" actualizado a "Labeller Reference" :
2024-08-01 13:30:14,276 - INFO - Fila 6974, Columna ru-RU: "Labeller Reference" actualizado a "Labeller Reference" :
2024-08-01 13:30:14,276 - INFO - Fila 6983, Columna ru-RU: "Pal Reference" actualizado a "Pal Reference" :
2024-08-01 13:30:14,277 - INFO - Fila 6984, Columna ru-RU: "Pal Reference" actualizado a "Pal Reference" :
2024-08-01 13:30:14,277 - INFO - Fila 6985, Columna ru-RU: "Filler Reference" actualizado a "Filler Reference" :
2024-08-01 13:30:14,278 - INFO - Fila 6986, Columna ru-RU: "Filler Reference" actualizado a "Filler Reference" :
2024-08-01 13:30:14,278 - INFO - Fila 6987, Columna ru-RU: "Filler Reference" actualizado a "Filler Reference" :
2024-08-01 13:30:14,278 - INFO - Fila 6988, Columna ru-RU: "VDOS Reference" actualizado a "VDOS Reference" :
2024-08-01 13:30:14,279 - INFO - Fila 6989, Columna ru-RU: "VREC Reference" actualizado a "VREC Reference" :
2024-08-01 13:30:14,279 - INFO - Fila 6990, Columna ru-RU: "VREC Reference" actualizado a "VREC Reference" :
2024-08-01 13:30:14,279 - INFO - Fila 6991, Columna ru-RU: "VREC Reference" actualizado a "VREC Reference" :
2024-08-01 13:30:14,279 - INFO - Fila 6992, Columna ru-RU: "VREC Reference" actualizado a "VREC Reference" :
2024-08-01 13:30:14,280 - INFO - Fila 6993, Columna ru-RU: "VSFI Reference" actualizado a "VSFI Reference" :
2024-08-01 13:30:14,280 - INFO - Fila 6994, Columna ru-RU: "VSFI Reference" actualizado a "VSFI Reference" :
2024-08-01 13:30:14,280 - INFO - Fila 6995, Columna ru-RU: "Labeller Early Restart" actualizado a "Labeller Early Restart" :
2024-08-01 13:30:14,280 - INFO - Fila 6996, Columna ru-RU: "Sinchrobloc Early Restart" actualizado a "Sinchrobloc Early Restart" :
2024-08-01 13:30:14,281 - INFO - Fila 6997, Columna ru-RU: "Filler Early Restart" actualizado a "Filler Early Restart" :
2024-08-01 13:30:14,295 - INFO - Fila 7190, Columna ru-RU: "Fieldbus card not consistent with the selected one" actualizado a "Fieldbus card not consistent with the selected one" :
2024-08-01 13:30:14,295 - INFO - Fila 7191, Columna ru-RU: "Fieldbus card not initialised correctly" actualizado a "Fieldbus card not initialised correctly" :
2024-08-01 13:30:14,295 - INFO - Fila 7192, Columna ru-RU: "Wireless card not working" actualizado a "Wireless card not working" :
2024-08-01 13:30:14,296 - INFO - Fila 7193, Columna ru-RU: "Wireless card not working" actualizado a "Wireless card not working" :
2024-08-01 13:30:14,323 - INFO - Fila 7339, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,324 - INFO - Fila 7340, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,324 - INFO - Fila 7341, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,325 - INFO - Fila 7342, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,325 - INFO - Fila 7343, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,325 - INFO - Fila 7344, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,325 - INFO - Fila 7345, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,326 - INFO - Fila 7346, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,326 - INFO - Fila 7347, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,326 - INFO - Fila 7348, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,326 - INFO - Fila 7349, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,327 - INFO - Fila 7350, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,327 - INFO - Fila 7351, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,327 - INFO - Fila 7352, Columna ru-RU: "стоп Carico Preforme" actualizado a "стоп Carico Preforme" :
2024-08-01 13:30:14,338 - INFO - Fila 7418, Columna ru-RU: "Security memory fieldbus card not working" actualizado a "Security memory fieldbus card not working" :
2024-08-01 13:30:14,345 - ERROR - Fila 7467, Columna ru-RU: "Настройка смазки — зона 1 [Mxx-Myy]" valor:"Настройка смазки — зона <> [Mxx-Myy]" no actualizado porque Error de verificación: - Celda clave: Setup Lubrificazione a Secco - Celda traducida: Настройка смазки — зона <> [Mxx-Myy] - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:14,351 - INFO - Fila 7507, Columna ru-RU: "Sleever" actualizado a "Sleever" :
2024-08-01 13:30:14,351 - INFO - Fila 7509, Columna ru-RU: "Blower" actualizado a "Blower" :
2024-08-01 13:30:14,353 - INFO - Fila 7531, Columna ru-RU: "фактическая скор. Hz" actualizado a "фактическая скор. Hz" :
2024-08-01 13:30:14,354 - INFO - Fila 7532, Columna ru-RU: "фактическая скор. Hz" actualizado a "фактическая скор. Hz" :
2024-08-01 13:30:14,354 - INFO - Fila 7535, Columna ru-RU: "требуемая ско. Hz" actualizado a "требуемая ско. Hz" :
2024-08-01 13:30:14,355 - INFO - Fila 7536, Columna ru-RU: "требуемая ско. Hz" actualizado a "требуемая ско. Hz" :
2024-08-01 13:30:14,359 - INFO - Fila 7570, Columna ru-RU: "история тревоги" actualizado a "история тревоги" :
2024-08-01 13:30:14,361 - INFO - Fila 7592, Columna ru-RU: "Homing switches not configured correctly" actualizado a "Homing switches not configured correctly" :
2024-08-01 13:30:14,384 - ERROR - Fila 8015, Columna ru-RU: "Recipe_element_2" valor:"Recipe_element_<>" no actualizado porque Error de verificación: - Celda clave: TILTER/PID_RCP - Celda traducida: Recipe_element_<> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:14,384 - ERROR - Fila 8016, Columna ru-RU: "Recipe_element_1" valor:"Recipe_element_<>" no actualizado porque Error de verificación: - Celda clave: TILTER/RCP - Celda traducida: Recipe_element_<> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:30:14,386 - INFO - Fila 8028, Columna ru-RU: "Timeout during Homing procedure" actualizado a "Timeout during Homing procedure" :
2024-08-01 13:30:14,389 - INFO - Fila 8056, Columna ru-RU: "Engine Type Not Selected" actualizado a "Engine Type Not Selected" :
2024-08-01 13:30:14,394 - INFO - Fila 8090, Columna ru-RU: "Infeed Pack Conveyors Running" actualizado a "Infeed Pack Conveyors Running" :
2024-08-01 13:30:14,395 - INFO - Fila 8095, Columna ru-RU: "Left (A) Infeed Conveyors Running" actualizado a "Left (A) Infeed Conveyors Running" :
2024-08-01 13:30:14,395 - INFO - Fila 8096, Columna ru-RU: "Left (A) Infeed Conveyors Running" actualizado a "Left (A) Infeed Conveyors Running" :
2024-08-01 13:30:14,397 - INFO - Fila 8105, Columna ru-RU: "Higher Conveyor Platform" actualizado a "Higher Conveyor Platform" :
2024-08-01 13:30:14,397 - INFO - Fila 8106, Columna ru-RU: "Lower Conveyor Platform" actualizado a "Lower Conveyor Platform" :
2024-08-01 13:30:14,400 - INFO - Fila 8151, Columna ru-RU: "Higher Discharge Hinge Conveyor" actualizado a "Higher Discharge Hinge Conveyor" :
2024-08-01 13:30:14,401 - INFO - Fila 8154, Columna ru-RU: "Lower Discharge Hinge Conveyor" actualizado a "Lower Discharge Hinge Conveyor" :
2024-08-01 13:30:14,401 - INFO - Fila 8155, Columna ru-RU: "Pack Divider Discharge" actualizado a "Pack Divider Discharge" :
2024-08-01 13:30:14,401 - INFO - Fila 8156, Columna ru-RU: "Pack Divider Discharge Right" actualizado a "Pack Divider Discharge Right" :
2024-08-01 13:30:14,401 - INFO - Fila 8157, Columna ru-RU: "Pack Divider Discharge Left" actualizado a "Pack Divider Discharge Left" :
2024-08-01 13:30:14,402 - INFO - Fila 8158, Columna ru-RU: "Labeller Discharge" actualizado a "Labeller Discharge" :
2024-08-01 13:30:14,403 - INFO - Fila 8162, Columna ru-RU: "Labeller Discharge (Slowing Conveyor)" actualizado a "Labeller Discharge (Slowing Conveyor)" :
2024-08-01 13:30:14,403 - INFO - Fila 8172, Columna ru-RU: "Handler Discharge (Accumulation, Right)" actualizado a "Handler Discharge (Accumulation, Right)" :
2024-08-01 13:30:14,404 - INFO - Fila 8173, Columna ru-RU: "Handler Discharge (Accumulation, Left)" actualizado a "Handler Discharge (Accumulation, Left)" :
2024-08-01 13:30:14,404 - INFO - Fila 8174, Columna ru-RU: "Platform Discharge" actualizado a "Platform Discharge" :
2024-08-01 13:30:14,404 - INFO - Fila 8175, Columna ru-RU: "Platform Discharge Accumulation" actualizado a "Platform Discharge Accumulation" :
2024-08-01 13:30:14,404 - INFO - Fila 8176, Columna ru-RU: "Sinchrobloc Discharge" actualizado a "Sinchrobloc Discharge" :
2024-08-01 13:30:14,405 - INFO - Fila 8177, Columna ru-RU: "Sinchrobloc Discharge (Reject Table)" actualizado a "Sinchrobloc Discharge (Reject Table)" :
2024-08-01 13:30:14,405 - INFO - Fila 8179, Columna ru-RU: "Sinchrobloc Discharge (Slowing Conveyor)" actualizado a "Sinchrobloc Discharge (Slowing Conveyor)" :
2024-08-01 13:30:14,410 - INFO - Fila 8245, Columna ru-RU: "максимальная скорость" actualizado a "максимальная скорость" :
2024-08-01 13:30:14,417 - INFO - Fila 8282, Columna ru-RU: "Check With Format" actualizado a "Check With Format" :
2024-08-01 13:30:14,419 - INFO - Fila 8283, Columna ru-RU: "Check With Format" actualizado a "Check With Format" :
2024-08-01 13:30:14,419 - INFO - Fila 8284, Columna ru-RU: "Check With Format" actualizado a "Check With Format" :
2024-08-01 13:30:14,419 - INFO - Fila 8285, Columna ru-RU: "Check With Format" actualizado a "Check With Format" :
2024-08-01 13:30:14,420 - INFO - Fila 8286, Columna ru-RU: "Check With Format" actualizado a "Check With Format" :
2024-08-01 13:30:20,906 - INFO - Se han actualizado las filas en C:/Trabajo/VM/22 - 93841 - Sidel - Tilting/Reporte/Translate/TIAProjectTexts.xlsx desde el archivo maestro. :
2024-08-01 13:30:20,906 - INFO - .... :
2024-08-01 13:38:37,368 - INFO - .... :
2024-08-01 13:38:37,369 - INFO - Iniciando actualizacion en C:/Trabajo/VM/22 - 93841 - Sidel - Tilting/Reporte/Translate/TIAProjectTexts.xlsx desde el archivo maestro. Para ru-RU :
2024-08-01 13:39:20,406 - INFO - .... :
2024-08-01 13:39:20,407 - INFO - Iniciando actualizacion en C:/Trabajo/VM/22 - 93841 - Sidel - Tilting/Reporte/Translate/TIAProjectTexts.xlsx desde el archivo maestro. Para ru-RU :
2024-08-01 13:49:34,956 - INFO - .... :
2024-08-01 13:49:34,956 - INFO - Iniciando actualizacion en C:/Trabajo/VM/22 - 93841 - Sidel - Tilting/Reporte/Translate/TIAProjectTexts.xlsx desde el archivo maestro. Para ru-RU :
2024-08-01 13:49:35,517 - INFO - Fila 304 : Clave: ### ERRORE ###, Columna ru-RU: "nan" actualizado a "### ОШИБКА ###" :
2024-08-01 13:49:35,518 - INFO - Fila 305 : Clave: ### ERRORE ###, Columna ru-RU: "текст 1" actualizado a "### ОШИБКА ###" :
2024-08-01 13:49:35,518 - INFO - Fila 306 : Clave: ### ERRORE ###, Columna ru-RU: "текст 1" actualizado a "### ОШИБКА ###" :
2024-08-01 13:49:35,518 - INFO - Fila 307 : Clave: ### ERRORE ###, Columna ru-RU: "nan" actualizado a "### ОШИБКА ###" :
2024-08-01 13:49:35,519 - INFO - Fila 308 : Clave: ### ERRORE ###, Columna ru-RU: "nan" actualizado a "### ОШИБКА ###" :
2024-08-01 13:49:35,520 - ERROR - Fila 327, Columna ru-RU: "текст 1" valor:"текст <>" no actualizado porque Error de verificación: - Celda clave: ### Output Scorta IN - ERRORE TESTO ### - Celda traducida: текст <> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:35,520 - ERROR - Fila 328, Columna ru-RU: "текст 1" valor:"текст <>" no actualizado porque Error de verificación: - Celda clave: ### Output Scorta OUT - ERRORE TESTO ### - Celda traducida: текст <> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:35,522 - INFO - Fila 351 : Clave: #### ERRORE ####, Columna ru-RU: "nan" actualizado a "#### ОШИБКА ####" :
2024-08-01 13:49:35,522 - INFO - Fila 352 : Clave: #### ERRORE ####, Columna ru-RU: "nan" actualizado a "#### ОШИБКА ####" :
2024-08-01 13:49:35,523 - INFO - Fila 353 : Clave: #### ERRORE ####, Columna ru-RU: "текст 1" actualizado a "#### ОШИБКА ####" :
2024-08-01 13:49:35,583 - ERROR - Fila 1899, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,584 - ERROR - Fila 1900, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,584 - ERROR - Fila 1901, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,584 - ERROR - Fila 1902, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,585 - ERROR - Fila 1904, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,585 - ERROR - Fila 1905, Columna ru-RU: "этикетировочные<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,585 - ERROR - Fila 1906, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,586 - ERROR - Fila 1907, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,586 - ERROR - Fila 1908, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,586 - ERROR - Fila 1909, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,586 - ERROR - Fila 1910, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,587 - ERROR - Fila 1911, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,587 - ERROR - Fila 1912, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,587 - ERROR - Fila 1914, Columna ru-RU: "<field ref="0" />" valor:"Text<field ref="0" />" no actualizado porque Error de verificación: - Celda clave: <field ref="0" /> - Celda traducida: Text<field ref="0" /> - Dígitos en clave: 0, Dígitos en traducida: 0 - Tags en clave: 1, Tags en traducida: 0 :
2024-08-01 13:49:35,783 - ERROR - Fila 5263, Columna ru-RU: "реле давления S1M03 - OK" valor:"реле давления S<>M<> - OK" no actualizado porque Error de verificación: - Celda clave: Abilitazione - Celda traducida: реле давления S<>M<> - OK - Dígitos en clave: 0, Dígitos en traducida: 2 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:35,792 - INFO - Fila 5306 : Clave: Accumulo Ingresso DOS, Columna ru-RU: "nan" actualizado a "Накопление Вход DOS" :
2024-08-01 13:49:35,797 - INFO - Fila 5335 : Clave: Allarme, Columna ru-RU: "реле давления S1M03 - OK" actualizado a "Текст" :
2024-08-01 13:49:35,799 - INFO - Fila 5342 : Clave: Allarme del Watchdog Modbus, Columna ru-RU: "nan" actualizado a "Сигнализация Watchdog Modbus" :
2024-08-01 13:49:35,799 - INFO - Fila 5343 : Clave: Allarme di time-out procedura di autotuning parametri elettrici, Columna ru-RU: "nan" actualizado a "Сигнализация тайм-аута процедуры автотюнинга электрических параметров" :
2024-08-01 13:49:35,799 - INFO - Fila 5344 : Clave: Allarme Encoder SPI della parte Multi Turn, la posizione multigiro non è più affidabile, Columna ru-RU: "nan" actualizado a "Сигнализация Encoder SPI многооборотной части, многооборотная позиция больше не надежна" :
2024-08-01 13:49:35,800 - INFO - Fila 5345 : Clave: Allarme Encoder SPI della parte Single Turn, la posizione singolo giro non è più affidabile, Columna ru-RU: "nan" actualizado a "Сигнализация Encoder SPI однородной части, однородная позиция больше не надежна" :
2024-08-01 13:49:35,800 - INFO - Fila 5346 : Clave: Allarme flash dati non funzionante, Columna ru-RU: "nan" actualizado a "Сигнализация неисправности флеш-памяти" :
2024-08-01 13:49:35,800 - INFO - Fila 5347 : Clave: Allarme lettura encoder SPI , Columna ru-RU: "nan" actualizado a "Сигнализация чтения энкодера SPI" :
2024-08-01 13:49:35,801 - INFO - Fila 5348 : Clave: Allarme memoria parametri non accessibile o corrotta, Columna ru-RU: "nan" actualizado a "Сигнализация недоступной или поврежденной памяти параметров" :
2024-08-01 13:49:35,801 - INFO - Fila 5349 : Clave: Allarme Non Presente, Columna ru-RU: "nan" actualizado a "Сигнализация Не Присутствует" :
2024-08-01 13:49:35,801 - INFO - Fila 5350 : Clave: Allarme overcurrent hardware, Columna ru-RU: "nan" actualizado a "Сигнализация аппаратного перенапряжения" :
2024-08-01 13:49:35,802 - INFO - Fila 5351 : Clave: Allarme overcurrent software, Columna ru-RU: "nan" actualizado a "Сигнализация программного перенапряжения" :
2024-08-01 13:49:35,802 - INFO - Fila 5352 : Clave: Allarme overtemperature motore, Columna ru-RU: "nan" actualizado a "Сигнализация перегрева двигателя" :
2024-08-01 13:49:35,803 - INFO - Fila 5353 : Clave: Allarme overtemperature scheda, Columna ru-RU: "nan" actualizado a "Сигнал тревоги о перегреве платы" :
2024-08-01 13:49:35,804 - INFO - Fila 5354 : Clave: Allarme overvoltage , Columna ru-RU: "nan" actualizado a "Сигнал тревоги о перенапряжении" :
2024-08-01 13:49:35,804 - INFO - Fila 5355 : Clave: Allarme parametro con valore sbagliato, Columna ru-RU: "nan" actualizado a "Сигнал тревоги о неправильном значении параметра" :
2024-08-01 13:49:35,804 - INFO - Fila 5356 : Clave: Allarme restore parametri default fallita, Columna ru-RU: "nan" actualizado a "Сигнал тревоги о неудачном восстановлении параметров по умолчанию" :
2024-08-01 13:49:35,805 - INFO - Fila 5357 : Clave: Allarme restore parametri motore default fallita, Columna ru-RU: "nan" actualizado a "Сигнал тревоги о неудачном восстановлении параметров двигателя по умолчанию" :
2024-08-01 13:49:35,805 - INFO - Fila 5358 : Clave: Allarme undervoltage, Columna ru-RU: "nan" actualizado a "Сигнал тревоги о пониженном напряжении" :
2024-08-01 13:49:35,806 - INFO - Fila 5359 : Clave: Allarme Utente, Columna ru-RU: "nan" actualizado a "Сигнал тревоги пользователя" :
2024-08-01 13:49:35,806 - INFO - Fila 5360 : Clave: Allarme utente da ingresso digitale, Columna ru-RU: "nan" actualizado a "Сигнал тревоги пользователя от цифрового входа" :
2024-08-01 13:49:35,809 - INFO - Fila 5375 : Clave: ALLARME: Sicurezza non attivata, Columna ru-RU: "JAM OUTFEED CONE" actualizado a "ALLARM: DX Channel Valve Sensors Gate A" :
2024-08-01 13:49:35,810 - ERROR - Fila 5380, Columna ru-RU: "аварийные сигналы - делителя [DB1071]" valor:"аварийные сигналы - делителя [DB<>]" no actualizado porque Error de verificación: - Celda clave: Allarmi - SKID - Celda traducida: аварийные сигналы - делителя [DB<>] - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:35,810 - ERROR - Fila 5381, Columna ru-RU: "аварийные сигналы - Geosync [DB10171]" valor:"аварийные сигналы - Geosync [DB<>]" no actualizado porque Error de verificación: - Celda clave: Allarmi - Tilter - Celda traducida: аварийные сигналы - Geosync [DB<>] - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:35,825 - INFO - Fila 5535 : Clave: Basculante, Columna ru-RU: "nan" actualizado a "Подъемный механизм" :
2024-08-01 13:49:35,825 - INFO - Fila 5539 : Clave: Basso [Basculante], Columna ru-RU: "nan" actualizado a "Низкий [Подъемный механизм]" :
2024-08-01 13:49:35,826 - INFO - Fila 5540 : Clave: Basso [Piattaforma], Columna ru-RU: "nan" actualizado a "Низкий [Платформа]" :
2024-08-01 13:49:35,828 - INFO - Fila 5553 : Clave: Bypass, Columna ru-RU: "nan" actualizado a "Обход" :
2024-08-01 13:49:35,829 - INFO - Fila 5558 : Clave: Canale A, Columna ru-RU: "nan" actualizado a "Канал A" :
2024-08-01 13:49:35,829 - INFO - Fila 5559 : Clave: Canale B, Columna ru-RU: "nan" actualizado a "Канал B" :
2024-08-01 13:49:35,836 - INFO - Fila 5589 : Clave: Chiamata Fardelli, Columna ru-RU: "nan" actualizado a "Вызов пакетов" :
2024-08-01 13:49:35,836 - INFO - Fila 5590 : Clave: Chiamata Fardelli, Columna ru-RU: "стоп Carico Preforme" actualizado a "Вызов пакетов" :
2024-08-01 13:49:35,836 - INFO - Fila 5591 : Clave: Chiamati Pacchi Canale Destro (B), Columna ru-RU: "nan" actualizado a "Вызванные пакеты канала справа (B)" :
2024-08-01 13:49:35,837 - INFO - Fila 5592 : Clave: Chiamati Pacchi Canale Sinistro (A), Columna ru-RU: "nan" actualizado a "Packs Request on Left Channel (A)" :
2024-08-01 13:49:35,849 - INFO - Fila 5672 : Clave: Devio Ingresso Fardellatrici, Columna ru-RU: "nan" actualizado a "Manual Divider Infeed Wrappers" :
2024-08-01 13:49:35,851 - INFO - Fila 5682 : Clave: Divisore Pacchi, Columna ru-RU: "nan" actualizado a "Pack Divider" :
2024-08-01 13:49:35,858 - INFO - Fila 5759 : Clave: Encoder non ancora allineato, Columna ru-RU: "nan" actualizado a "Encoder not aligned yet" :
2024-08-01 13:49:35,858 - INFO - Fila 5760 : Clave: Encoder non rileva movimento, Columna ru-RU: "nan" actualizado a "Encoder does not detect movement" :
2024-08-01 13:49:35,858 - INFO - Fila 5761 : Clave: Encoder rileva movimento lato sbagliato, Columna ru-RU: "nan" actualizado a "Encoder detects wrong side movement" :
2024-08-01 13:49:35,859 - INFO - Fila 5767 : Clave: Errore Hmi, Columna ru-RU: "nan" actualizado a "Hmi Error" :
2024-08-01 13:49:35,860 - INFO - Fila 5768 : Clave: Errore Hmi, Columna ru-RU: "nan" actualizado a "Hmi Error" :
2024-08-01 13:49:35,860 - INFO - Fila 5769 : Clave: Errore Hmi, Columna ru-RU: "nan" actualizado a "Hmi Error" :
2024-08-01 13:49:35,861 - INFO - Fila 5770 : Clave: Errore Hmi, Columna ru-RU: "nan" actualizado a "Hmi Error" :
2024-08-01 13:49:35,861 - INFO - Fila 5771 : Clave: Errore Hmi, Columna ru-RU: "nan" actualizado a "Hmi Error" :
2024-08-01 13:49:35,862 - INFO - Fila 5772 : Clave: Errore nel riferimento di posizione del modo CSP, Columna ru-RU: "nan" actualizado a "CSP mode position reference error" :
2024-08-01 13:49:35,862 - INFO - Fila 5773 : Clave: Errore nella sincronizzazione CSP, Columna ru-RU: "nan" actualizado a "Error in CSP synchronization" :
2024-08-01 13:49:35,864 - INFO - Fila 5781 : Clave: Etichettatrice, Columna ru-RU: "nan" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:35,864 - INFO - Fila 5782 : Clave: Etichettatrice, Columna ru-RU: "nan" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:35,864 - INFO - Fila 5783 : Clave: Etichettatrice, Columna ru-RU: "этикетировочные" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:35,865 - INFO - Fila 5784 : Clave: Etichettatrice, Columna ru-RU: "этикетировочные" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:35,873 - INFO - Fila 5869 : Clave: Fuori Posizione, Columna ru-RU: "nan" actualizado a "Out Of Position" :
2024-08-01 13:49:35,873 - INFO - Fila 5870 : Clave: Fuori Posizione, Columna ru-RU: "nan" actualizado a "Out Of Position" :
2024-08-01 13:49:35,873 - INFO - Fila 5871 : Clave: Fuori Posizione, Columna ru-RU: "nan" actualizado a "Out Of Position" :
2024-08-01 13:49:35,875 - INFO - Fila 5879 : Clave: Geosync DOS, Columna ru-RU: "nan" actualizado a "Geosync DOS" :
2024-08-01 13:49:35,877 - INFO - Fila 5899 : Clave: Hardware DRS, Columna ru-RU: "nan" actualizado a "Hardware DRS" :
2024-08-01 13:49:35,879 - INFO - Fila 5919 : Clave: In Funzione, Columna ru-RU: "nan" actualizado a "Normal Work" :
2024-08-01 13:49:35,879 - INFO - Fila 5920 : Clave: In Funzione, Columna ru-RU: "Готовый" actualizado a "Normal Work" :
2024-08-01 13:49:35,880 - INFO - Fila 5921 : Clave: In Funzione, Columna ru-RU: "nan" actualizado a "Normal Work" :
2024-08-01 13:49:35,886 - INFO - Fila 5951 : Clave: Ingresso Alto Piattaforma Tappeto, Columna ru-RU: "nan" actualizado a "Higher Infeed Platform Belt" :
2024-08-01 13:49:35,886 - INFO - Fila 5952 : Clave: Ingresso Basculante, Columna ru-RU: "nan" actualizado a "Hinge Conveyor Infeed" :
2024-08-01 13:49:35,887 - INFO - Fila 5953 : Clave: Ingresso Basso Piattaforma Accumulo, Columna ru-RU: "nan" actualizado a "Lower Infeed Platform Accumulation" :
2024-08-01 13:49:35,887 - INFO - Fila 5954 : Clave: Ingresso Basso Piattaforma Tappeto, Columna ru-RU: "nan" actualizado a "Lower Infeed Platform Belt" :
2024-08-01 13:49:35,888 - INFO - Fila 5956 : Clave: Ingresso Divisore Pacchi, Columna ru-RU: "nan" actualizado a "Pack Divider Infeed" :
2024-08-01 13:49:35,889 - INFO - Fila 5970 : Clave: Ingresso Pal Canale A (Sinistra), Columna ru-RU: "nan" actualizado a "Pal Infeed Channel A (Left)" :
2024-08-01 13:49:35,889 - INFO - Fila 5971 : Clave: Ingresso Pal Canale B (Destra), Columna ru-RU: "nan" actualizado a "Pal Infeed Channel B (Right)" :
2024-08-01 13:49:35,889 - INFO - Fila 5972 : Clave: Inizializzazione, Columna ru-RU: "nan" actualizado a "Initialization" :
2024-08-01 13:49:35,891 - INFO - Fila 5988 : Clave: Interruzione posizionamento, Columna ru-RU: "nan" actualizado a "Positioning interruption" :
2024-08-01 13:49:35,891 - INFO - Fila 5989 : Clave: Invecchiamento/sovratemperatura olio, Columna ru-RU: "nan" actualizado a "Oil aging overtemperature" :
2024-08-01 13:49:35,892 - INFO - Fila 5992 : Clave: Ion_Alm, Columna ru-RU: "nan" actualizado a "Ion_Alm" :
2024-08-01 13:49:35,892 - INFO - Fila 5993 : Clave: Ion_Level, Columna ru-RU: "nan" actualizado a "Ion_Level" :
2024-08-01 13:49:35,893 - INFO - Fila 5994 : Clave: Ion_Sts_Alm, Columna ru-RU: "nan" actualizado a "Ion_Sts_Alm" :
2024-08-01 13:49:35,893 - INFO - Fila 5995 : Clave: IPOS-ILLOP, Columna ru-RU: "nan" actualizado a "IPOS-ILLOP" :
2024-08-01 13:49:35,895 - INFO - Fila 6007 : Clave: KRONES, Columna ru-RU: "nan" actualizado a "KRONES" :
2024-08-01 13:49:35,895 - INFO - Fila 6010 : Clave: Labeller Selected, Columna ru-RU: "nan" actualizado a "Labeller Selected" :
2024-08-01 13:49:35,899 - INFO - Fila 6027 : Clave: Lubrificazione EcoLab, Columna ru-RU: "nan" actualizado a "EcoLab Lubrification" :
2024-08-01 13:49:35,916 - INFO - Fila 6386 : Clave: Macchina Vuota, Columna ru-RU: "пустая машина" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:35,916 - INFO - Fila 6387 : Clave: Macchina Vuota, Columna ru-RU: "пустая машина" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:35,917 - INFO - Fila 6388 : Clave: Macchina Vuota, Columna ru-RU: "пустая машина" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:35,917 - INFO - Fila 6389 : Clave: Macchina Vuota, Columna ru-RU: "пустая машина" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:35,937 - INFO - Fila 6516 : Clave: Modalità fieldbus incompatibile con hardware presente, Columna ru-RU: "nan" actualizado a "Fieldbus mode incompatible with hardware present" :
2024-08-01 13:49:35,941 - INFO - Fila 6539 : Clave: Nessuna Richiesta, Columna ru-RU: "nan" actualizado a "No Request" :
2024-08-01 13:49:35,941 - INFO - Fila 6540 : Clave: Nessuna Richiesta, Columna ru-RU: "nan" actualizado a "No Request" :
2024-08-01 13:49:35,942 - INFO - Fila 6541 : Clave: Nessuna Richiesta, Columna ru-RU: "nan" actualizado a "No Request" :
2024-08-01 13:49:35,942 - INFO - Fila 6542 : Clave: Nessuna Richiesta, Columna ru-RU: "nan" actualizado a "No Request" :
2024-08-01 13:49:35,942 - INFO - Fila 6543 : Clave: Nessuna Richiesta, Columna ru-RU: "nan" actualizado a "No Request" :
2024-08-01 13:49:35,943 - INFO - Fila 6544 : Clave: Nessuna Segnalazione, Columna ru-RU: "nan" actualizado a "No Allarm: In Production" :
2024-08-01 13:49:35,943 - INFO - Fila 6545 : Clave: Nessuna Segnalazione: In Produzione, Columna ru-RU: "nan" actualizado a "No Allarm: In Production" :
2024-08-01 13:49:35,943 - INFO - Fila 6546 : Clave: Nessuna Segnalazione: In Produzione, Columna ru-RU: "nan" actualizado a "No Allarm: In Production" :
2024-08-01 13:49:35,943 - INFO - Fila 6547 : Clave: Nessuna Segnalazione: In Produzione, Columna ru-RU: "nan" actualizado a "No Allarm: In Production" :
2024-08-01 13:49:35,944 - INFO - Fila 6548 : Clave: Nessuna Segnalazione: In Produzione, Columna ru-RU: "nan" actualizado a "No Allarm: In Production" :
2024-08-01 13:49:35,944 - INFO - Fila 6549 : Clave: Nessuna Segnalazione: In Produzione, Columna ru-RU: "nan" actualizado a "No Allarm: In Production" :
2024-08-01 13:49:35,944 - INFO - Fila 6550 : Clave: Nessuna Selezione, Columna ru-RU: "nan" actualizado a "Nessuna Selezione" :
2024-08-01 13:49:35,945 - INFO - Fila 6551 : Clave: Nessuna Selezione, Columna ru-RU: "nan" actualizado a "Nessuna Selezione" :
2024-08-01 13:49:35,959 - INFO - Fila 6690 : Clave: Paletizzatore, Columna ru-RU: "nan" actualizado a "Palletizer" :
2024-08-01 13:49:35,992 - ERROR - Fila 6931, Columna ru-RU: "Recipe_element_14" valor:"Recipe_element_<>" no actualizado porque Error de verificación: - Celda clave: RCP\CONSENSI\DISCHARGE\SYNCHROBLOC - Celda traducida: Recipe_element_<> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:35,992 - ERROR - Fila 6932, Columna ru-RU: "Recipe_element_13" valor:"Recipe_element_<>" no actualizado porque Error de verificación: - Celda clave: RCP\CONSENSI\INFEED\SYNCHROBLOC - Celda traducida: Recipe_element_<> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:35,998 - INFO - Fila 6966 : Clave: Riempitrice, Columna ru-RU: "nan" actualizado a "Filler" :
2024-08-01 13:49:35,998 - INFO - Fila 6967 : Clave: Riempitrice, Columna ru-RU: "наполнитель" actualizado a "Filler" :
2024-08-01 13:49:35,998 - INFO - Fila 6968 : Clave: Riempitrice, Columna ru-RU: "наполнитель" actualizado a "Filler" :
2024-08-01 13:49:35,999 - INFO - Fila 6969 : Clave: Riempitrice, Columna ru-RU: "наполнитель" actualizado a "Filler" :
2024-08-01 13:49:35,999 - INFO - Fila 6970 : Clave: Riempitrice, Columna ru-RU: "наполнитель" actualizado a "Filler" :
2024-08-01 13:49:35,999 - INFO - Fila 6971 : Clave: Riempitrice, Columna ru-RU: "наполнитель" actualizado a "Filler" :
2024-08-01 13:49:36,000 - INFO - Fila 6972 : Clave: Riempitrice, Columna ru-RU: "наполнитель" actualizado a "Filler" :
2024-08-01 13:49:36,000 - INFO - Fila 6973 : Clave: Riferimento Etichettatrice, Columna ru-RU: "nan" actualizado a "Labeller Reference" :
2024-08-01 13:49:36,000 - INFO - Fila 6974 : Clave: Riferimento Etichettatrice, Columna ru-RU: "nan" actualizado a "Labeller Reference" :
2024-08-01 13:49:36,001 - INFO - Fila 6983 : Clave: Riferimento Pal, Columna ru-RU: "nan" actualizado a "Pal Reference" :
2024-08-01 13:49:36,001 - INFO - Fila 6984 : Clave: Riferimento Pal, Columna ru-RU: "nan" actualizado a "Pal Reference" :
2024-08-01 13:49:36,001 - INFO - Fila 6985 : Clave: Riferimento Riempitrice, Columna ru-RU: "nan" actualizado a "Filler Reference" :
2024-08-01 13:49:36,002 - INFO - Fila 6986 : Clave: Riferimento Riempitrice, Columna ru-RU: "nan" actualizado a "Filler Reference" :
2024-08-01 13:49:36,002 - INFO - Fila 6987 : Clave: Riferimento Riempitrice, Columna ru-RU: "nan" actualizado a "Filler Reference" :
2024-08-01 13:49:36,002 - INFO - Fila 6988 : Clave: Riferimento VDOS, Columna ru-RU: "nan" actualizado a "VDOS Reference" :
2024-08-01 13:49:36,003 - INFO - Fila 6989 : Clave: Riferimento VREC, Columna ru-RU: "nan" actualizado a "VREC Reference" :
2024-08-01 13:49:36,003 - INFO - Fila 6990 : Clave: Riferimento VREC, Columna ru-RU: "nan" actualizado a "VREC Reference" :
2024-08-01 13:49:36,003 - INFO - Fila 6991 : Clave: Riferimento VREC, Columna ru-RU: "nan" actualizado a "VREC Reference" :
2024-08-01 13:49:36,003 - INFO - Fila 6992 : Clave: Riferimento VREC, Columna ru-RU: "nan" actualizado a "VREC Reference" :
2024-08-01 13:49:36,004 - INFO - Fila 6993 : Clave: Riferimento VSFI, Columna ru-RU: "nan" actualizado a "VSFI Reference" :
2024-08-01 13:49:36,004 - INFO - Fila 6994 : Clave: Riferimento VSFI, Columna ru-RU: "nan" actualizado a "VSFI Reference" :
2024-08-01 13:49:36,004 - INFO - Fila 6995 : Clave: Ripartenza Anticipata Etichettatrice, Columna ru-RU: "nan" actualizado a "Labeller Early Restart" :
2024-08-01 13:49:36,005 - INFO - Fila 6996 : Clave: Ripartenza Anticipata Monoblocco, Columna ru-RU: "nan" actualizado a "Sinchrobloc Early Restart" :
2024-08-01 13:49:36,005 - INFO - Fila 6997 : Clave: Ripartenza Anticipata Riempitrice, Columna ru-RU: "nan" actualizado a "Filler Early Restart" :
2024-08-01 13:49:36,019 - INFO - Fila 7190 : Clave: Scheda fieldbus non coerente con quella selezionata, Columna ru-RU: "nan" actualizado a "Fieldbus card not consistent with the selected one" :
2024-08-01 13:49:36,019 - INFO - Fila 7191 : Clave: Scheda fieldbus non inizializzata correttamente, Columna ru-RU: "nan" actualizado a "Fieldbus card not initialised correctly" :
2024-08-01 13:49:36,019 - INFO - Fila 7192 : Clave: Scheda wireless non funzionante, Columna ru-RU: "nan" actualizado a "Wireless card not working" :
2024-08-01 13:49:36,020 - INFO - Fila 7193 : Clave: Scheda wireless non funzionante, Columna ru-RU: "nan" actualizado a "Wireless card not working" :
2024-08-01 13:49:36,048 - INFO - Fila 7339 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,048 - INFO - Fila 7340 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,049 - INFO - Fila 7341 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,049 - INFO - Fila 7342 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,049 - INFO - Fila 7343 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,050 - INFO - Fila 7344 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,050 - INFO - Fila 7345 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,050 - INFO - Fila 7346 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,051 - INFO - Fila 7347 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,051 - INFO - Fila 7348 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,051 - INFO - Fila 7349 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,052 - INFO - Fila 7350 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,052 - INFO - Fila 7351 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,052 - INFO - Fila 7352 : Clave: Scorta, Columna ru-RU: "запасной" actualizado a "стоп Carico Preforme" :
2024-08-01 13:49:36,064 - INFO - Fila 7418 : Clave: Secury memory scheda fieldbus non funzionante, Columna ru-RU: "nan" actualizado a "Security memory fieldbus card not working" :
2024-08-01 13:49:36,070 - ERROR - Fila 7467, Columna ru-RU: "Настройка смазки — зона 1 [Mxx-Myy]" valor:"Настройка смазки — зона <> [Mxx-Myy]" no actualizado porque Error de verificación: - Celda clave: Setup Lubrificazione a Secco - Celda traducida: Настройка смазки — зона <> [Mxx-Myy] - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:36,076 - INFO - Fila 7507 : Clave: Sleever, Columna ru-RU: "nan" actualizado a "Sleever" :
2024-08-01 13:49:36,076 - INFO - Fila 7509 : Clave: Soffiatrice, Columna ru-RU: "nan" actualizado a "Blower" :
2024-08-01 13:49:36,079 - INFO - Fila 7531 : Clave: SPEED - Actual Hz, Columna ru-RU: "скорость - актual Hz" actualizado a "фактическая скор. Hz" :
2024-08-01 13:49:36,079 - INFO - Fila 7532 : Clave: SPEED - Actual Hz, Columna ru-RU: "фактическая скор Hz" actualizado a "фактическая скор. Hz" :
2024-08-01 13:49:36,080 - INFO - Fila 7535 : Clave: SPEED - Req Hz, Columna ru-RU: "скорость - обязательный Hz" actualizado a "требуемая ско. Hz" :
2024-08-01 13:49:36,080 - INFO - Fila 7536 : Clave: SPEED - Req Hz, Columna ru-RU: "требуемая ско Hz" actualizado a "требуемая ско. Hz" :
2024-08-01 13:49:36,084 - INFO - Fila 7570 : Clave: Storico Allarmi, Columna ru-RU: "история аварий" actualizado a "история тревоги" :
2024-08-01 13:49:36,086 - INFO - Fila 7592 : Clave: Switch di homing non configurati correttamente, Columna ru-RU: "nan" actualizado a "Homing switches not configured correctly" :
2024-08-01 13:49:36,111 - ERROR - Fila 8015, Columna ru-RU: "Recipe_element_2" valor:"Recipe_element_<>" no actualizado porque Error de verificación: - Celda clave: TILTER/PID_RCP - Celda traducida: Recipe_element_<> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:36,111 - ERROR - Fila 8016, Columna ru-RU: "Recipe_element_1" valor:"Recipe_element_<>" no actualizado porque Error de verificación: - Celda clave: TILTER/RCP - Celda traducida: Recipe_element_<> - Dígitos en clave: 0, Dígitos en traducida: 1 - Tags en clave: 0, Tags en traducida: 0 :
2024-08-01 13:49:36,114 - INFO - Fila 8028 : Clave: Timeout durante procedura Homing, Columna ru-RU: "nan" actualizado a "Timeout during Homing procedure" :
2024-08-01 13:49:36,115 - INFO - Fila 8056 : Clave: Tipo di Motore non Selezionato, Columna ru-RU: "nan" actualizado a "Engine Type Not Selected" :
2024-08-01 13:49:36,121 - INFO - Fila 8090 : Clave: Trasportatori Pacchi In Ingresso In Marcia, Columna ru-RU: "nan" actualizado a "Infeed Pack Conveyors Running" :
2024-08-01 13:49:36,122 - INFO - Fila 8095 : Clave: Trasporti In Igresso Canale Sinistro (A) In Marcia, Columna ru-RU: "nan" actualizado a "Left (A) Infeed Conveyors Running" :
2024-08-01 13:49:36,123 - INFO - Fila 8096 : Clave: Trasporti In Igresso Canale Sinistro (A) In Marcia, Columna ru-RU: "nan" actualizado a "Left (A) Infeed Conveyors Running" :
2024-08-01 13:49:36,125 - INFO - Fila 8105 : Clave: Trasporto Alto Piattaforma, Columna ru-RU: "nan" actualizado a "Higher Conveyor Platform" :
2024-08-01 13:49:36,126 - INFO - Fila 8106 : Clave: Trasporto Basso Piattaforma, Columna ru-RU: "nan" actualizado a "Lower Conveyor Platform" :
2024-08-01 13:49:36,129 - INFO - Fila 8151 : Clave: Uscita Alta Basculante, Columna ru-RU: "nan" actualizado a "Higher Discharge Hinge Conveyor" :
2024-08-01 13:49:36,129 - INFO - Fila 8154 : Clave: Uscita Bassa Basculante, Columna ru-RU: "nan" actualizado a "Lower Discharge Hinge Conveyor" :
2024-08-01 13:49:36,130 - INFO - Fila 8155 : Clave: Uscita Divisore Pacchi, Columna ru-RU: "nan" actualizado a "Pack Divider Discharge" :
2024-08-01 13:49:36,130 - INFO - Fila 8156 : Clave: Uscita Divisore Pacchi Destra, Columna ru-RU: "nan" actualizado a "Pack Divider Discharge Right" :
2024-08-01 13:49:36,130 - INFO - Fila 8157 : Clave: Uscita Divisore Pacchi Sinistra, Columna ru-RU: "nan" actualizado a "Pack Divider Discharge Left" :
2024-08-01 13:49:36,130 - INFO - Fila 8158 : Clave: Uscita Etichettatrice, Columna ru-RU: "nan" actualizado a "Labeller Discharge" :
2024-08-01 13:49:36,131 - INFO - Fila 8162 : Clave: Uscita Etichettatrice (Rallentatore), Columna ru-RU: "nan" actualizado a "Labeller Discharge (Slowing Conveyor)" :
2024-08-01 13:49:36,132 - INFO - Fila 8172 : Clave: Uscita Manigliatrice (Accumulo, Destro), Columna ru-RU: "nan" actualizado a "Handler Discharge (Accumulation, Right)" :
2024-08-01 13:49:36,132 - INFO - Fila 8173 : Clave: Uscita Manigliatrice (Accumulo, Sinistro), Columna ru-RU: "nan" actualizado a "Handler Discharge (Accumulation, Left)" :
2024-08-01 13:49:36,132 - INFO - Fila 8174 : Clave: Uscita Piattaforma, Columna ru-RU: "nan" actualizado a "Platform Discharge" :
2024-08-01 13:49:36,132 - INFO - Fila 8175 : Clave: Uscita Piattaforma Accumulo, Columna ru-RU: "nan" actualizado a "Platform Discharge Accumulation" :
2024-08-01 13:49:36,133 - INFO - Fila 8176 : Clave: Uscita Sinchrobloc, Columna ru-RU: "nan" actualizado a "Sinchrobloc Discharge" :
2024-08-01 13:49:36,133 - INFO - Fila 8177 : Clave: Uscita Sinchrobloc (Bancale di Scarto), Columna ru-RU: "nan" actualizado a "Sinchrobloc Discharge (Reject Table)" :
2024-08-01 13:49:36,133 - INFO - Fila 8179 : Clave: Uscita Sinchrobloc (Rallentatore), Columna ru-RU: "nan" actualizado a "Sinchrobloc Discharge (Slowing Conveyor)" :
2024-08-01 13:49:36,140 - INFO - Fila 8245 : Clave: Velocità Attuale, Columna ru-RU: "диаметр бутылок " actualizado a "максимальная скорость" :
2024-08-01 13:49:36,147 - INFO - Fila 8282 : Clave: Verificare Con Formato, Columna ru-RU: "nan" actualizado a "Check With Format" :
2024-08-01 13:49:36,147 - INFO - Fila 8283 : Clave: Verificare Con Formato, Columna ru-RU: "nan" actualizado a "Check With Format" :
2024-08-01 13:49:36,147 - INFO - Fila 8284 : Clave: Verificare Con Formato, Columna ru-RU: "nan" actualizado a "Check With Format" :
2024-08-01 13:49:36,147 - INFO - Fila 8285 : Clave: Verificare Con Formato, Columna ru-RU: "nan" actualizado a "Check With Format" :
2024-08-01 13:49:36,148 - INFO - Fila 8286 : Clave: Verificare Con Formato, Columna ru-RU: "nan" actualizado a "Check With Format" :
2024-08-01 13:49:42,755 - INFO - Se han actualizado las filas en C:/Trabajo/VM/22 - 93841 - Sidel - Tilting/Reporte/Translate/TIAProjectTexts.xlsx desde el archivo maestro. :
2024-08-01 13:49:42,755 - INFO - .... :

View File

@ -13,8 +13,8 @@ def select_file(extension = "txt"):
# Open file dialog and return the selected file path # Open file dialog and return the selected file path
file_path = filedialog.askopenfilename( file_path = filedialog.askopenfilename(
title="Select a .db file", title=f"Select a .{extension} file",
filetypes=(("DB files", f"*.{extension}"), ("All files", "*.*")) filetypes=((f"{extension} files", f"*.{extension}"), ("All files", "*.*"))
) )
return file_path return file_path

View File

@ -2,34 +2,27 @@ import pandas as pd
import os import os
import re import re
from manejoArchivos import select_file from manejoArchivos import select_file
import funciones_comunes import funciones_comunes as fc
def es_columna_tipo_xxYY(columna):
# Verificar si la columna es del tipo "xx-YY" usando una expresión regular
return bool(re.match(r'^[a-z]{2}-[A-Z]{2}$', columna))
def sustituir_digitos(celda):
# Convertir a cadena y sustituir secuencias de dígitos por [[digits]]
if pd.isnull(celda):
return celda
return re.sub(r'\d+', '[[digits]]', str(celda))
def preprocesar_importacion(df_importacion): def preprocesar_importacion(df_importacion):
# Iterar sobre las filas del DataFrame de importación # Iterar sobre las filas del DataFrame de importación
for index, fila in df_importacion.iterrows(): for index, fila in df_importacion.iterrows():
clave_original = str(fila['it-IT']) clave_original = str(fila["it-IT"])
clave_sustituida = sustituir_digitos(clave_original) clave_sustituida = fc.compactar_celda_clave(clave_original)
# Sustituir en las demás columnas del tipo "xx-YY" # Sustituir en las demás columnas del tipo "xx-YY"
for columna in df_importacion.columns: for columna in df_importacion.columns:
if columna != 'it-IT' and es_columna_tipo_xxYY(columna): if columna != "it-IT" and fc.es_columna_tipo_xxYY(columna):
df_importacion.at[index, columna] = funciones_comunes.transformar_texto(sustituir_digitos(fila[columna])) df_importacion.at[index, columna] = (
fc.compactar_celda_traducida(fila[columna])
)
# Guardar la clave sustituida # Guardar la clave sustituida
df_importacion.at[index, 'it-IT'] = clave_sustituida df_importacion.at[index, "it-IT"] = clave_sustituida
return df_importacion return df_importacion
def importar(archivo_maestro, archivo_importacion): def importar(archivo_maestro, archivo_importacion):
if not os.path.exists(archivo_maestro): if not os.path.exists(archivo_maestro):
# Crear un DataFrame maestro vacío con la columna "it-IT" # Crear un DataFrame maestro vacío con la columna "it-IT"
@ -59,7 +52,10 @@ def importar(archivo_maestro, archivo_importacion):
# Agregar columnas del tipo "xx-YY" que no existen en el archivo maestro # Agregar columnas del tipo "xx-YY" que no existen en el archivo maestro
for columna in nuevas_filas.columns: for columna in nuevas_filas.columns:
if es_columna_tipo_xxYY(columna) and columna not in df_maestro.columns: if (
fc.es_columna_tipo_xxYY(columna)
and columna not in df_maestro.columns
):
df_maestro[columna] = None df_maestro[columna] = None
# Crear una lista de diccionarios para las filas que se van a agregar # Crear una lista de diccionarios para las filas que se van a agregar
@ -71,7 +67,11 @@ def importar(archivo_maestro, archivo_importacion):
if clave not in claves_maestro: if clave not in claves_maestro:
claves_maestro.add(clave) claves_maestro.add(clave)
# Solo agregar las columnas del tipo "xx-YY" y "it-IT" # Solo agregar las columnas del tipo "xx-YY" y "it-IT"
fila_filtrada = {col: fila[col] for col in fila.index if col == "it-IT" or es_columna_tipo_xxYY(col)} fila_filtrada = {
col: fila[col]
for col in fila.index
if col == "it-IT" or fc.es_columna_tipo_xxYY(col)
}
filas_a_agregar.append(fila_filtrada) filas_a_agregar.append(fila_filtrada)
# Concatenar las nuevas filas al DataFrame maestro # Concatenar las nuevas filas al DataFrame maestro
@ -83,6 +83,7 @@ def importar(archivo_maestro, archivo_importacion):
df_maestro.to_excel(archivo_maestro, index=False) df_maestro.to_excel(archivo_maestro, index=False)
print(f"Se han agregado {len(filas_a_agregar)} nuevas filas al archivo maestro.") print(f"Se han agregado {len(filas_a_agregar)} nuevas filas al archivo maestro.")
if __name__ == "__main__": if __name__ == "__main__":
# Cargar el archivo maestro y el archivo de importación # Cargar el archivo maestro y el archivo de importación
archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx" archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx"

View File

@ -1,9 +1,9 @@
import pandas as pd import pandas as pd
import os import os
from manejoArchivos import select_file from manejoArchivos import select_file
import funciones_comunes import funciones_comunes as fc
def exportar_para_traduccion(archivo_maestro): def exportar_para_traduccion(archivo_maestro, target_lang_code):
if not os.path.exists(archivo_maestro): if not os.path.exists(archivo_maestro):
print("El archivo maestro no existe.") print("El archivo maestro no existe.")
return return
@ -15,16 +15,20 @@ def exportar_para_traduccion(archivo_maestro):
# Copiar la primera columna tal cual # Copiar la primera columna tal cual
df_export[df_maestro.columns[0]] = df_maestro[df_maestro.columns[0]] df_export[df_maestro.columns[0]] = df_maestro[df_maestro.columns[0]]
df_export[target_lang_code] = df_maestro[target_lang_code]
# Transformar las demás columnas
for columna in df_maestro.columns[1:]:
df_export[columna] = df_maestro[columna].apply(lambda x: funciones_comunes.transformar_texto(str(x)) if pd.notnull(x) else x)
# Guardar el archivo exportado # Guardar el archivo exportado
ruta_export = os.path.join(os.path.dirname(archivo_maestro), '2_master_export2translate.xlsx') ruta_export = os.path.join(os.path.dirname(archivo_maestro), '2_master_export2translate.xlsx')
df_export.to_excel(ruta_export, index=False) fc.save_dataframe_with_retries(df_export,output_path=ruta_export)
print(f"Archivo exportado para traducción: {ruta_export}") print(f"Archivo exportado para traducción: {ruta_export}")
if __name__ == "__main__": if __name__ == "__main__":
archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx" archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx"
exportar_para_traduccion(archivo_maestro) fc.mostrar_idiomas()
seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
if seleccion_idioma not in fc.IDIOMAS:
print("Selección inválida.")
else:
_, target_lang_code = fc.IDIOMAS[seleccion_idioma]
exportar_para_traduccion(archivo_maestro, target_lang_code)

View File

@ -2,7 +2,6 @@ import pandas as pd
from openai import OpenAI from openai import OpenAI
import os import os
import re import re
import logging
from openai_api_key import openai_api_key from openai_api_key import openai_api_key
from google_api_key import google_api_key from google_api_key import google_api_key
import ollama import ollama
@ -11,22 +10,11 @@ from google.cloud import translate_v2 as translate
from google.oauth2 import service_account from google.oauth2 import service_account
import html import html
from tqdm import tqdm from tqdm import tqdm
import funciones_comunes import funciones_comunes as fc
openai_client = OpenAI(api_key=openai_api_key()) openai_client = OpenAI(api_key=openai_api_key())
GOOGLE_APPLICATION_CREDENTIALS = "translate-431108-020c17463fbb.json" GOOGLE_APPLICATION_CREDENTIALS = "translate-431108-020c17463fbb.json"
logger = fc.configurar_logger()
def configurar_logger():
logger = logging.getLogger("translate_logger")
logger.setLevel(logging.DEBUG)
os.makedirs(".\\data", exist_ok=True)
fh = logging.FileHandler(".\\data\\translate_log.log", encoding="utf-8")
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def init_google_translate_client(): def init_google_translate_client():
@ -41,19 +29,14 @@ def init_google_translate_client():
"No se han proporcionado credenciales válidas para Google Translate" "No se han proporcionado credenciales válidas para Google Translate"
) )
google_translate_client = init_google_translate_client() google_translate_client = init_google_translate_client()
def google_translate(text, target_language): def google_translate(text, target_language):
result = google_translate_client.translate(text, target_language=target_language) result = google_translate_client.translate(text, target_language=target_language)
translated_text = result["translatedText"] translated_text = result["translatedText"]
return html.unescape(translated_text) return html.unescape(translated_text)
logger = configurar_logger()
def read_system_prompt(): def read_system_prompt():
try: try:
with open(".\\data\\system_prompt.txt", "r", encoding="utf-8") as file: with open(".\\data\\system_prompt.txt", "r", encoding="utf-8") as file:
@ -130,7 +113,9 @@ def affinity_batch_openai(texts_dict):
"Evaluate the semantic similarity between the following table of pairs of texts in json format on a scale from 0 to 1. " "Evaluate the semantic similarity between the following table of pairs of texts in json format on a scale from 0 to 1. "
"Return the similarity scores for every row in JSON format as a list of numbers, without any additional text or formatting." "Return the similarity scores for every row in JSON format as a list of numbers, without any additional text or formatting."
) )
original_list = [funciones_comunes.transformar_texto(key) for key in texts_dict.keys()] original_list = [
fc.compactar_celda_traducida(key) for key in texts_dict.keys()
]
re_translated_list = list(texts_dict.values()) re_translated_list = list(texts_dict.values())
request_payload = json.dumps( request_payload = json.dumps(
@ -162,8 +147,8 @@ def affinity_batch_openai(texts_dict):
raise ValueError("La respuesta no se pudo decodificar como JSON.") raise ValueError("La respuesta no se pudo decodificar como JSON.")
# Manejar diferentes formatos de respuesta # Manejar diferentes formatos de respuesta
if isinstance(response_payload, dict) and 'similarity_scores' in response_payload: if isinstance(response_payload, dict) and "similarity_scores" in response_payload:
scores = response_payload['similarity_scores'] scores = response_payload["similarity_scores"]
elif isinstance(response_payload, list): elif isinstance(response_payload, list):
scores = response_payload scores = response_payload
else: else:
@ -198,26 +183,28 @@ def main(file_path, target_lang_code, target_lang, traducir_todo, batch_size=10)
texts_to_translate = {} texts_to_translate = {}
for _, row in df.iterrows(): for _, row in df.iterrows():
source_text = str(row[source_col]) celda_clave = str(row[source_col])
source_translated_text = ( source_translated_text = (
str(row[source_translated_col]) str(row[source_translated_col])
if source_translated_col in df.columns if source_translated_col in df.columns
else "" else ""
) )
processed_text = funciones_comunes.transformar_texto(source_text) celda_clave_compactada = fc.compactar_celda_traducida(celda_clave)
if traducir_todo: if traducir_todo:
if texto_requiere_traduccion(processed_text): if texto_requiere_traduccion(celda_clave_compactada):
texts_to_translate[source_text] = processed_text texts_to_translate[celda_clave] = celda_clave_compactada
else: else:
if ( if (
pd.isna(row[source_translated_col]) pd.isna(row[source_translated_col])
or source_translated_text.strip() == "" or source_translated_text.strip() == ""
): ):
if texto_requiere_traduccion(processed_text): if texto_requiere_traduccion(celda_clave_compactada):
texts_to_translate[source_text] = processed_text texts_to_translate[celda_clave] = celda_clave_compactada
num_texts = len(texts_to_translate) num_texts = len(texts_to_translate)
num_texts = 40
logger.info(f"Número total de textos a traducir: {num_texts}") logger.info(f"Número total de textos a traducir: {num_texts}")
print(f"Número total de textos a traducir: {num_texts}") print(f"Número total de textos a traducir: {num_texts}")
@ -258,17 +245,19 @@ def main(file_path, target_lang_code, target_lang, traducir_todo, batch_size=10)
# Traduccion inversa # Traduccion inversa
# Actualizar el DataFrame con las traducciones y hacemos la Traduccion inversa # Actualizar el DataFrame con las traducciones y hacemos la Traduccion inversa
for index, row in tqdm(df.iterrows(), total=df.shape[0], desc="Procesando traducciones"): for index, row in tqdm(
source_text = str(row[source_col]) df.iterrows(), total=df.shape[0], desc="Procesando traducciones"
if source_text in translations: ):
df.at[index, target_col] = translations[source_text] celda_clave = str(row[source_col])
if celda_clave in translations:
df.at[index, target_col] = translations[celda_clave]
# Realizar la traducción de verificación con Google Translate # Realizar la traducción de verificación con Google Translate
try: try:
google_translation = google_translate(translations[source_text], "it") google_translation = google_translate(translations[celda_clave], "it")
df.at[index, check_translate_col] = google_translation df.at[index, check_translate_col] = google_translation
except Exception as e: except Exception as e:
logger.error( logger.error(
f"Error en la traducción de Google para el texto '{source_text}': {e}" f"Error en la traducción de Google para el texto '{celda_clave}': {e}"
) )
df.at[index, check_translate_col] = "Error en la traducción" df.at[index, check_translate_col] = "Error en la traducción"
df.at[index, affinity_col] = 0.0 df.at[index, affinity_col] = 0.0
@ -276,8 +265,7 @@ def main(file_path, target_lang_code, target_lang, traducir_todo, batch_size=10)
# Afinidades # Afinidades
# Se calculan las Afinidades # Se calculan las Afinidades
affinities = {} affinities = {}
batch_size = 10 for start_idx in range(0, num_texts, batch_size): # num_text
for start_idx in range(0, num_texts, batch_size):
end_idx = min(start_idx + batch_size, num_texts) end_idx = min(start_idx + batch_size, num_texts)
batch_texts = dict(list(texts_to_translate.items())[start_idx:end_idx]) batch_texts = dict(list(texts_to_translate.items())[start_idx:end_idx])
logger.info(f"Afinidad: celdas desde {start_idx} a {end_idx}.") logger.info(f"Afinidad: celdas desde {start_idx} a {end_idx}.")
@ -307,14 +295,14 @@ def main(file_path, target_lang_code, target_lang, traducir_todo, batch_size=10)
# Actualizar el DataFrame con las Afinidades # Actualizar el DataFrame con las Afinidades
for index, row in df.iterrows(): for index, row in df.iterrows():
source_text = str(row[source_col]) celda_clave = str(row[source_col])
if source_text in affinities: if celda_clave in affinities:
df.at[index, affinity_col] = affinities[source_text] df.at[index, affinity_col] = affinities[celda_clave]
output_path = os.path.join( output_path = os.path.join(
os.path.dirname(file_path), "3_master_export2translate_translated.xlsx" os.path.dirname(file_path), "3_master_export2translate_translated.xlsx"
) )
funciones_comunes.save_dataframe_with_retries(df,output_path=output_path) fc.save_dataframe_with_retries(df, output_path=output_path)
logger.info(f"Archivo traducido guardado en: {output_path}") logger.info(f"Archivo traducido guardado en: {output_path}")
print(f"Archivo traducido guardado en: {output_path}") print(f"Archivo traducido guardado en: {output_path}")
@ -323,12 +311,12 @@ if __name__ == "__main__":
batch_size = 20 batch_size = 20
translate_file = ".\\data\\2_master_export2translate.xlsx" translate_file = ".\\data\\2_master_export2translate.xlsx"
funciones_comunes.mostrar_idiomas() fc.mostrar_idiomas()
seleccion_idioma = int(input("Introduce el número del idioma de destino: ")) seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
if seleccion_idioma not in funciones_comunes.IDIOMAS: if seleccion_idioma not in fc.IDIOMAS:
print("Selección inválida.") print("Selección inválida.")
else: else:
target_lang, target_lang_code = funciones_comunes.IDIOMAS[seleccion_idioma] target_lang, target_lang_code = fc.IDIOMAS[seleccion_idioma]
traducir_todo = ( traducir_todo = (
input("¿Desea traducir todas las celdas (s/n)? ").strip().lower() == "s" input("¿Desea traducir todas las celdas (s/n)? ").strip().lower() == "s"
) )

View File

@ -1,69 +0,0 @@
import pandas as pd
import os
import re
import logging
from manejoArchivos import select_file
def configurar_logger(ruta_log):
os.makedirs(".\\data", exist_ok=True)
logger = logging.getLogger('.\\data\\importacion_logger')
logger.setLevel(logging.INFO)
fh = logging.FileHandler(ruta_log, encoding='utf-8')
fh.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def revertir_transformaciones(texto, digitos, secciones):
# Revertir <> a [[digits]]
for digito in digitos:
texto = texto.replace('<>', digito, 1)
# Revertir <#> a <...> usando las secciones originales
for seccion in secciones:
texto = texto.replace('<#>', f'<{seccion}>', 1)
return texto
def importar_traduccion(archivo_maestro, archivo_traduccion):
if not os.path.exists(archivo_maestro):
print("El archivo maestro no existe.")
return
df_maestro = pd.read_excel(archivo_maestro)
df_traduccion = pd.read_excel(archivo_traduccion)
# Configurar el logger
directorio = os.path.dirname(archivo_maestro)
nombre_log = os.path.join(directorio, 'importacion_traduccion.log')
logger = configurar_logger(nombre_log)
# Iterar sobre las filas del archivo de traducción para revertir transformaciones y actualizar el maestro
for index, fila in df_traduccion.iterrows():
clave = fila[df_maestro.columns[0]]
if clave in df_maestro[df_maestro.columns[0]].values:
# Obtener los dígitos y secciones originales de la clave
digitos = re.findall(r'\d+', str(clave))
secciones = re.findall(r'<(.*?)>', str(clave))
# Actualizar solo las columnas que existen en df_maestro y df_traduccion
for columna in df_traduccion.columns[1:]:
if columna in df_maestro.columns:
valor_traducido = fila[columna]
if pd.isnull(valor_traducido):
continue # Omitir celdas vacías
valor_original = df_maestro.loc[df_maestro[df_maestro.columns[0]] == clave, columna].values[0]
valor_revertido = revertir_transformaciones(valor_traducido, digitos, secciones)
if pd.notnull(valor_original) and str(valor_original) != valor_revertido:
df_maestro.loc[df_maestro[df_maestro.columns[0]] == clave, columna] = valor_revertido
logger.info(f'Fila {index}, Columna {columna}: "{valor_original}" actualizado a "{valor_revertido}"')
# Guardar el archivo maestro actualizado
df_maestro.to_excel(archivo_maestro, index=False)
print(f"Traducciones importadas y archivo maestro actualizado: {archivo_maestro}. Detalles de los cambios en {nombre_log}")
if __name__ == "__main__":
archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx"
archivo_traduccion = ".\\data\\2_master_export2translate.xlsx"
importar_traduccion(archivo_maestro, archivo_traduccion)

View File

@ -1,22 +1,10 @@
import funciones_comunes import funciones_comunes as fc
import pandas as pd import pandas as pd
import os import os
import re import re
import logging import logging
from manejoArchivos import select_file from manejoArchivos import select_file
def configurar_logger(ruta_log):
os.makedirs(".\\data", exist_ok=True)
logger = logging.getLogger('.\\data\\importacion_logger')
logger.setLevel(logging.INFO)
fh = logging.FileHandler(ruta_log, encoding='utf-8')
fh.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def revertir_transformaciones(texto, digitos, secciones): def revertir_transformaciones(texto, digitos, secciones):
# Revertir <> a [[digits]] # Revertir <> a [[digits]]
for digito in digitos: for digito in digitos:
@ -38,10 +26,8 @@ def importar_traduccion(archivo_maestro, archivo_traduccion, target_lang_code, n
df_maestro = pd.read_excel(archivo_maestro) df_maestro = pd.read_excel(archivo_maestro)
df_traduccion = pd.read_excel(archivo_traduccion) df_traduccion = pd.read_excel(archivo_traduccion)
# Configurar el logger # Configurar el logger
directorio = os.path.dirname(archivo_maestro) logger = fc.configurar_logger()
nombre_log = os.path.join(directorio, 'importacion_traduccion.log')
logger = configurar_logger(nombre_log)
# Iterar sobre las filas del archivo de traducción para actualizar el maestro # Iterar sobre las filas del archivo de traducción para actualizar el maestro
for index, fila in df_traduccion.iterrows(): for index, fila in df_traduccion.iterrows():
@ -57,8 +43,8 @@ def importar_traduccion(archivo_maestro, archivo_traduccion, target_lang_code, n
logger.info(f'Fila {index}, Columna {translated_col}: "{valor_original}" actualizado a "{valor_traducido}"') logger.info(f'Fila {index}, Columna {translated_col}: "{valor_original}" actualizado a "{valor_traducido}"')
# Guardar el archivo maestro actualizado # Guardar el archivo maestro actualizado
funciones_comunes.save_dataframe_with_retries(df_maestro,output_path=archivo_maestro) fc.save_dataframe_with_retries(df_maestro,output_path=archivo_maestro)
print(f"Traducciones importadas y archivo maestro actualizado: {archivo_maestro}. Detalles de los cambios en {nombre_log}") print(f"Traducciones importadas y archivo maestro actualizado: {archivo_maestro}.")
if __name__ == "__main__": if __name__ == "__main__":
@ -67,11 +53,11 @@ if __name__ == "__main__":
nivel_afinidad_minimo = input("Introduce el nivel minimo de afinidad para importar (presiona Enter para usar el valor por defecto 0.5): ") nivel_afinidad_minimo = input("Introduce el nivel minimo de afinidad para importar (presiona Enter para usar el valor por defecto 0.5): ")
nivel_afinidad_minimo = float(nivel_afinidad_minimo) if nivel_afinidad_minimo else 0.5 nivel_afinidad_minimo = float(nivel_afinidad_minimo) if nivel_afinidad_minimo else 0.5
funciones_comunes.mostrar_idiomas() fc.mostrar_idiomas()
seleccion_idioma = int(input("Introduce el número del idioma de destino: ")) seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
if seleccion_idioma not in funciones_comunes.IDIOMAS: if seleccion_idioma not in fc.IDIOMAS:
print("Selección inválida.") print("Selección inválida.")
else: else:
target_lang, target_lang_code = funciones_comunes.IDIOMAS[seleccion_idioma] target_lang, target_lang_code = fc.IDIOMAS[seleccion_idioma]
importar_traduccion(archivo_maestro, archivo_traduccion, target_lang_code, nivel_afinidad_minimo ) importar_traduccion(archivo_maestro, archivo_traduccion, target_lang_code, nivel_afinidad_minimo )

View File

@ -1,5 +1,4 @@
import funciones_comunes import funciones_comunes as fc
import pandas as pd import pandas as pd
import os import os
import re import re
@ -7,28 +6,6 @@ import logging
from manejoArchivos import select_file from manejoArchivos import select_file
def configurar_logger(ruta_log):
os.makedirs(".\\data", exist_ok=True)
logger = logging.getLogger(".\\data\\importacion_logger")
logger.setLevel(logging.INFO)
fh = logging.FileHandler(ruta_log, encoding="utf-8")
fh.setLevel(logging.INFO)
formatter = logging.Formatter("%(asctime)s - %(message)s")
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def revertir_transformaciones(texto, digitos, secciones):
# Revertir <> a [[digits]]
for digito in digitos:
texto = texto.replace("<>", digito, 1)
# Revertir <#> a <...> usando las secciones originales
for seccion in secciones:
texto = texto.replace("<#>", f"<{seccion}>", 1)
return texto
def complete_emptys(archivo_maestro, target_lang_code, second_lang_code): def complete_emptys(archivo_maestro, target_lang_code, second_lang_code):
if not os.path.exists(archivo_maestro): if not os.path.exists(archivo_maestro):
print("El archivo maestro no existe.") print("El archivo maestro no existe.")
@ -40,9 +17,7 @@ def complete_emptys(archivo_maestro, target_lang_code, second_lang_code):
df_maestro = pd.read_excel(archivo_maestro) df_maestro = pd.read_excel(archivo_maestro)
# Configurar el logger # Configurar el logger
directorio = os.path.dirname(archivo_maestro) logger = fc.configurar_logger()
nombre_log = os.path.join(directorio, "importacion_traduccion.log")
logger = configurar_logger(nombre_log)
# Iterar sobre las filas del archivo de traducción para actualizar el maestro # Iterar sobre las filas del archivo de traducción para actualizar el maestro
for index, fila in df_maestro.iterrows(): for index, fila in df_maestro.iterrows():
@ -64,20 +39,20 @@ def complete_emptys(archivo_maestro, target_lang_code, second_lang_code):
) )
# Guardar el archivo maestro actualizado # Guardar el archivo maestro actualizado
funciones_comunes.save_dataframe_with_retries( fc.save_dataframe_with_retries(
df_maestro, output_path=archivo_maestro df_maestro, output_path=archivo_maestro
) )
print( print(
f"Traducciones importadas y archivo maestro actualizado: {archivo_maestro}. Detalles de los cambios en {nombre_log}" f"Traducciones importadas y archivo maestro actualizado: {archivo_maestro}."
) )
if __name__ == "__main__": if __name__ == "__main__":
archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx" archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx"
funciones_comunes.mostrar_idiomas() fc.mostrar_idiomas()
seleccion_idioma = int(input("Introduce el número del idioma de destino: ")) seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
if seleccion_idioma not in funciones_comunes.IDIOMAS: if seleccion_idioma not in fc.IDIOMAS:
print("Selección inválida.") print("Selección inválida.")
exit exit
seleccion_idioma_secundario = int( seleccion_idioma_secundario = int(
@ -85,10 +60,10 @@ if __name__ == "__main__":
"Introduce el número del idioma de secundario para copiar desde en caso de vacios: " "Introduce el número del idioma de secundario para copiar desde en caso de vacios: "
) )
) )
if seleccion_idioma_secundario not in funciones_comunes.IDIOMAS: if seleccion_idioma_secundario not in fc.IDIOMAS:
print("Selección inválida.") print("Selección inválida.")
exit exit
_, target_lang_code = funciones_comunes.IDIOMAS[seleccion_idioma] _, target_lang_code = fc.IDIOMAS[seleccion_idioma]
_, second_lang_code = funciones_comunes.IDIOMAS[seleccion_idioma_secundario] _, second_lang_code = fc.IDIOMAS[seleccion_idioma_secundario]
complete_emptys(archivo_maestro, target_lang_code, second_lang_code) complete_emptys(archivo_maestro, target_lang_code, second_lang_code)

View File

@ -1,102 +0,0 @@
import pandas as pd
import os
import re
import logging
from manejoArchivos import select_file
def es_columna_tipo_xxYY(columna):
# Verificar si la columna es del tipo "xx-YY" usando una expresión regular
return bool(re.match(r'^[a-z]{2}-[A-Z]{2}$', columna))
def sustituir_digitos(celda):
# Convertir a cadena y sustituir secuencias de dígitos por [[digits]]
if pd.isnull(celda):
return celda, []
digitos = re.findall(r'\d+', str(celda))
celda_sustituida = re.sub(r'\d+', '[[digits]]', str(celda))
return celda_sustituida, digitos
def preprocesar_update(df_update):
# Diccionario para almacenar los dígitos reemplazados por fila
digitos_reemplazados = {}
# Iterar sobre las filas del DataFrame de actualización
for index, fila in df_update.iterrows():
clave_original = str(fila['it-IT'])
clave_sustituida, digitos = sustituir_digitos(clave_original)
digitos_reemplazados[index] = digitos
df_update.at[index, 'it-IT_preprocessed'] = clave_sustituida # Agregar una columna preprocesada
return df_update, digitos_reemplazados
def configurar_logger(ruta_log):
logger = logging.getLogger('actualizacion_logger')
logger.setLevel(logging.INFO)
fh = logging.FileHandler(ruta_log, encoding='utf-8')
fh.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(message)s')
fh.setFormatter(formatter)
logger.addHandler(fh)
return logger
def update_from_master(archivo_maestro, archivo_to_update):
if not os.path.exists(archivo_maestro):
print("El archivo maestro no existe.")
return
df_maestro = pd.read_excel(archivo_maestro)
df_to_update = pd.read_excel(archivo_to_update)
# Configurar el logger
directorio = os.path.dirname(archivo_to_update)
nombre_log = os.path.join(directorio, 'actualizacion.log')
logger = configurar_logger(nombre_log)
# Preprocesar el archivo de actualización
df_to_update, digitos_reemplazados = preprocesar_update(df_to_update)
# Obtener las claves del archivo maestro
claves_maestro = set(df_maestro["it-IT"].dropna().astype(str))
# Iterar sobre las filas del archivo de actualización para actualizarlas
for index, fila in df_to_update.iterrows():
clave_preprocesada = str(fila['it-IT_preprocessed'])
if clave_preprocesada in claves_maestro:
# Obtener los dígitos originales para esta fila
digitos = digitos_reemplazados.get(index, [])
df_maestro_fila = df_maestro[df_maestro['it-IT'] == clave_preprocesada].iloc[0]
# Verificar que la cantidad de dígitos coincida con la cantidad de [[digits]] en la clave
cantidad_digits = clave_preprocesada.count('[[digits]]')
if len(digitos) != cantidad_digits:
logger.info(f'Fila {index}: no se actualiza porque la cantidad de dígitos no coincide.')
continue
# Actualizar solo las columnas que existen en df_to_update y que no sean 'it-IT'
for columna in df_to_update.columns:
if columna != 'it-IT' and columna != 'it-IT_preprocessed' and columna in df_maestro.columns:
valor = df_maestro_fila[columna]
# Convertir a cadena si no lo es y reemplazar [[digits]] con los dígitos originales
if not pd.isnull(valor):
valor_original = str(valor)
valor_actualizado = valor_original
for d in digitos:
valor_actualizado = valor_actualizado.replace('[[digits]]', d, 1)
# Solo actualizar si el valor ha cambiado
if str(fila[columna]) != valor_actualizado:
df_to_update.at[index, columna] = valor_actualizado
# Registrar el cambio
logger.info(f'Fila {index}, Columna {columna}: "{fila[columna]}" actualizado a "{valor_actualizado}"')
# Eliminar la columna preprocesada
df_to_update.drop(columns=['it-IT_preprocessed'], inplace=True)
# Guardar el archivo actualizado
df_to_update.to_excel(archivo_to_update, index=False)
print(f"Se han actualizado las filas en {archivo_to_update} desde el archivo maestro. Detalles de los cambios en {nombre_log}")
if __name__ == "__main__":
archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx"
archivo_to_update = select_file("xlsx")
if archivo_to_update:
update_from_master(archivo_maestro, archivo_to_update)

80
x6_update_from_master.py Normal file
View File

@ -0,0 +1,80 @@
import pandas as pd
import os
import re
import logging
import funciones_comunes as fc
from manejoArchivos import select_file
def update_from_master(archivo_maestro, archivo_to_update, target_lang_code):
if not os.path.exists(archivo_maestro):
print("El archivo maestro no existe.")
return
# Configurar el logger
logger = fc.configurar_logger()
logger.info(" .... ")
logger.info(
f"Iniciando actualizacion en {archivo_to_update} desde el archivo maestro. Para {target_lang_code} "
)
df_maestro = pd.read_excel(archivo_maestro)
df_to_update = pd.read_excel(archivo_to_update)
col_clave = df_maestro.columns[0]
# Iterar sobre las filas del archivo de actualización para actualizarlas
for index, fila in df_to_update.iterrows():
clave = fila[col_clave]
if not pd.isnull(clave) and clave in df_maestro[col_clave].values:
# Obtenemos los valores
valor_original = fila[col_clave]
valor_traducido_compacto = df_maestro.loc[
df_maestro[col_clave] == clave, target_lang_code
].values[0]
# Descompactamos
valor_traducido = fc.decompactar_celda_traducida(
celda_original=valor_original, celda_traducida=valor_traducido_compacto
)
if (
not pd.isnull(valor_traducido)
and fila[target_lang_code] != valor_traducido
):
# Salvamos en el file to Update
okToSave, Error = fc.verificar_celda_traducida(
valor_original, valor_traducido
)
if okToSave:
logger.info(
f'Fila {index} : Clave: {clave}, Columna {target_lang_code}: "{df_to_update.at[index, target_lang_code]}" actualizado a "{valor_traducido}"'
)
df_to_update.at[index, target_lang_code] = valor_traducido
else:
logger.error(
f'Fila {index}, Columna {target_lang_code}: "{df_to_update.at[index, target_lang_code]}" valor:"{valor_traducido}" no actualizado porque {Error}'
)
# Guardar el archivo actualizado
fc.save_dataframe_with_retries(df_to_update, output_path=archivo_to_update)
print(
f"Se han actualizado las filas en {archivo_to_update} desde el archivo maestro. "
)
logger.info(
f"Se han actualizado las filas en {archivo_to_update} desde el archivo maestro. "
)
logger.info(" .... ")
if __name__ == "__main__":
archivo_maestro = ".\\data\\1_hmi_master_translates.xlsx"
archivo_to_update = select_file("xlsx")
if archivo_to_update:
fc.mostrar_idiomas()
seleccion_idioma = int(input("Introduce el número del idioma de destino: "))
if seleccion_idioma not in fc.IDIOMAS:
print("Selección inválida.")
else:
target_lang, target_lang_code = fc.IDIOMAS[seleccion_idioma]
update_from_master(archivo_maestro, archivo_to_update, target_lang_code)