tx3bas commited on
Commit
ff7deb2
·
verified ·
1 Parent(s): 72d48ab

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -43
app.py CHANGED
@@ -3,42 +3,12 @@ from mtranslate import translate
3
  import re
4
  import json
5
 
6
- # Diccionario de idiomas y sus códigos
7
  lang_dict = {
8
  'Auto': 'auto',
9
  'Español': 'es',
10
  'English': 'en',
11
- 'Mandarín': 'zh',
12
- 'Hindi': 'hi',
13
- 'Árabe': 'ar',
14
- 'Portugués': 'pt',
15
- 'Bengalí': 'bn',
16
- 'Ruso': 'ru',
17
- 'Japonés': 'ja',
18
- 'Panyabí': 'pa',
19
- 'Alemán': 'de',
20
- 'Javanés': 'jw',
21
- 'Coreano': 'ko',
22
- 'Francés': 'fr',
23
- 'Vietnamita': 'vi',
24
- 'Turco': 'tr',
25
- 'Italiano': 'it',
26
- 'Ucraniano': 'uk',
27
- 'Tailandés': 'th',
28
- 'Guyaratí': 'gu',
29
- 'Polaco': 'pl',
30
- 'Griego': 'el',
31
- 'Neerlandés': 'nl',
32
- 'Sueco': 'sv',
33
- 'Rumano': 'ro',
34
- 'Checo': 'cs',
35
- 'Húngaro': 'hu',
36
- 'Hebreo': 'he',
37
- 'Indonesio': 'id',
38
- 'Nepalí': 'ne',
39
- 'Gallego': 'gl',
40
- 'Catalán': 'ca',
41
- 'Vasco': 'eu'
42
  }
43
 
44
  lang_list = [k for k in lang_dict.keys() if k != 'Auto']
@@ -59,28 +29,31 @@ def split_text(text, limit=4000):
59
  return chunks
60
 
61
  def translate_html_content(text, source_lang, target_lang):
62
- # Patrón para identificar etiquetas HTML completas
63
  html_tag_pattern = re.compile(r'<[^>]+>')
64
 
65
- # Separar el texto en partes (texto y etiquetas)
66
  parts = html_tag_pattern.split(text)
67
  tags = html_tag_pattern.findall(text)
68
 
69
- # Traducir solo las partes que no son etiquetas HTML
70
  translated_parts = []
71
  for part in parts:
72
- if part.strip(): # Traducir solo si hay texto no vacío
73
  chunks = split_text(part)
74
  translated_chunks = [translate(chunk, target_lang, source_lang) for chunk in chunks]
75
- translated_parts.append(''.join(translated_chunks))
 
 
 
76
  else:
77
- translated_parts.append(part) # Mantener partes vacías o de solo espacios
78
 
79
- # Reconstruir el texto combinando partes traducidas y etiquetas originales
80
  translated_text = ''
81
  for i in range(len(parts)):
82
  translated_text += translated_parts[i]
83
- if i < len(tags): # Añadir la etiqueta correspondiente si existe
84
  translated_text += tags[i]
85
 
86
  return translated_text
@@ -90,6 +63,7 @@ def main(Texto, source_lang, target_lang):
90
  target_code = lang_dict[target_lang]
91
 
92
  translated_text = translate_html_content(Texto, source_code, target_code)
 
93
  escaped_text = json.dumps(translated_text)[1:-1]
94
 
95
  html_output = f"""
@@ -103,6 +77,7 @@ def main(Texto, source_lang, target_lang):
103
  """
104
  return html_output
105
 
 
106
  iface = gr.Interface(
107
  fn=main,
108
  inputs=[
@@ -111,9 +86,9 @@ iface = gr.Interface(
111
  gr.Dropdown(lang_list, value="Español", label="Idioma destino")
112
  ],
113
  outputs="text",
114
- title="<div style='margin:0 auto;text-align:center'><div style='margin:0 auto;text-align:center'><img style='width:100px;display: inline-table;margin-bottom:-10px' src='https://artxeweb.com/media/files/idioma.jpg'><p>Traducción sin límites</p></div>",
115
- description="<p style='margin-bottom:10px;text-align:center;background: #ffffff; padding: 8px; border-radius: 8px; border-width: 1px; border: solid 1px #e5e7eb;'>Ingresa el texto que deseas traducir y selecciona los idiomas. ¡No hay límites!</p>",
116
- article="<div style='margin-top:10px'><p style='text-align: center !important; background: #ffffff; padding: 5px 30px; border-radius: 8px; border-width: 1px; border: solid 1px #e5e7eb; width: fit-content; margin: auto;'>Desarrollada por <a style='text-decoration: none !important; color: #e12a31 !important;' title='Artxe Web' href='https://artxeweb.com'>© Artxe Web</a></p></div>"
117
  )
118
 
119
  iface.launch()
 
3
  import re
4
  import json
5
 
6
+ # Diccionario de idiomas (sin cambios)
7
  lang_dict = {
8
  'Auto': 'auto',
9
  'Español': 'es',
10
  'English': 'en',
11
+ # ... resto del diccionario ...
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  }
13
 
14
  lang_list = [k for k in lang_dict.keys() if k != 'Auto']
 
29
  return chunks
30
 
31
  def translate_html_content(text, source_lang, target_lang):
32
+ # Patrón para identificar etiquetas HTML
33
  html_tag_pattern = re.compile(r'<[^>]+>')
34
 
35
+ # Separar texto y etiquetas
36
  parts = html_tag_pattern.split(text)
37
  tags = html_tag_pattern.findall(text)
38
 
39
+ # Traducir solo las partes de texto
40
  translated_parts = []
41
  for part in parts:
42
+ if part.strip(): # Solo traducir si hay texto no vacío
43
  chunks = split_text(part)
44
  translated_chunks = [translate(chunk, target_lang, source_lang) for chunk in chunks]
45
+ translated_part = ''.join(translated_chunks)
46
+ # Limpiar caracteres escapados no deseados
47
+ translated_part = translated_part.replace('\\"', '"').replace('\\n', '\n').replace('\\\\', '\\')
48
+ translated_parts.append(translated_part)
49
  else:
50
+ translated_parts.append(part) # Mantener partes vacías o espacios
51
 
52
+ # Reconstruir el texto
53
  translated_text = ''
54
  for i in range(len(parts)):
55
  translated_text += translated_parts[i]
56
+ if i < len(tags):
57
  translated_text += tags[i]
58
 
59
  return translated_text
 
63
  target_code = lang_dict[target_lang]
64
 
65
  translated_text = translate_html_content(Texto, source_code, target_code)
66
+ # Escapar solo para el botón de copiar, no para la salida visual
67
  escaped_text = json.dumps(translated_text)[1:-1]
68
 
69
  html_output = f"""
 
77
  """
78
  return html_output
79
 
80
+ # Configuración de la interfaz (sin cambios)
81
  iface = gr.Interface(
82
  fn=main,
83
  inputs=[
 
86
  gr.Dropdown(lang_list, value="Español", label="Idioma destino")
87
  ],
88
  outputs="text",
89
+ title="Traducción sin límites",
90
+ description="Ingresa el texto que deseas traducir y selecciona los idiomas. ¡No hay límites!",
91
+ article="Desarrollada por © Artxe Web"
92
  )
93
 
94
  iface.launch()