File size: 5,694 Bytes
827c36f
 
 
 
 
 
 
 
 
 
 
 
 
 
3f95647
827c36f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ad068eb
d335670
1b67658
 
 
827c36f
 
 
 
 
 
 
38b251d
827c36f
 
 
 
4019504
827c36f
 
 
 
 
 
 
 
 
 
 
de7be09
827c36f
 
 
62d943a
827c36f
7cdc449
0a0a793
de7be09
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
"""
@author: idoia lerchundi
"""
import streamlit as st
from language_directions import *
from transformers import pipeline
from adibideak import adibide_esaldiak
from PIL import Image

def local_css(file_name):
    with open(file_name) as f:
        st.markdown(f"<style>{f.read()}</style>", unsafe_allow_html=True)

st.set_page_config(
   page_title="Streamlit iCodeIdoia: Basque (EU) Euskera Multilingual Translator (Basque as the Starting Point)",
)

st.image("images/banner.jpg")

# ---- LOAD
local_css("styles/style.css")

source_lang_dict = get_all_source_languages()
target_lang_dict = {}
source_languages = source_lang_dict.keys()

def get_auto_detect_source_dropdown(input_text):
    source, _ = auto_detect_language_code(input_text)
    language_name = get_name_from_iso_code(source)
    source_dropdown_text = "Detected - " + language_name
    update_source_languages_dict(source_lang_dict, source_dropdown_text)
    source_language_dropdown = st.selectbox(choices=source_languages,
                                                  value=source_dropdown_text,
                                                  label="Input Language")
    return source_language_dropdown, language_name
  
def get_target_dropdown(source_language_name, input_text):
    global target_lang_dict
    target_lang_dict, source_language = get_target_languages(source_lang_dict[source_language_name], input_text)
    target_languages = list(target_lang_dict.keys())
    default_target_value = None
    if "English" in target_languages or "english" in target_languages:
        default_target_value = "English"
    else:
        default_target_value = target_languages[0]
    target_dropdown = st.selectbox(choices=target_languages, 
                                  value=default_target_value,
                                  label="Output Language")
    return target_dropdown
  
def get_dropdown_value(dropdown):
    if isinstance(dropdown, st.selectbox):
        dropdown_value = dropdown.constructor_args.get('value')
    elif isinstance(dropdown, str):
      dropdown_value = dropdown
    return dropdown_value
  
def get_dropdowns(source_dropdown, input_text):
    source_language_name = get_dropdown_value(source_dropdown)
    if input_text and source_language_name == "Detect" or source_language_name.startswith("Detected"):
      source_dropdown, source_language_name = get_auto_detect_source_dropdown(input_text)
    target_dropdown = get_target_dropdown(source_language_name=source_language_name,
                                          input_text=input_text)
    return source_dropdown, target_dropdown

def input_changed(source_language_dropdown, input_text=""):
    return get_dropdowns(source_dropdown=source_language_dropdown,
                         input_text=input_text)

def translate(input_text, source, target):
    source_readable = source
    if source == "Detect" or source.startswith("Detected"):
      source, _ = auto_detect_language_code(input_text)
    if source in source_lang_dict.keys():
      source = source_lang_dict[source]
    target_lang_dict, _ = get_target_languages(source)
    try:
      target = target_lang_dict[target]
      model = f"Helsinki-NLP/opus-mt-{source}-{target}"
      pipe = pipeline("translation", model=model)
      translation = pipe(input_text)
      return translation[0]['translation_text']
    except KeyError:
      return f"Error: Translation from {source_readable} to {target} is not supported by Translation Models"

with st.container():            
  st.header("Basque (EU) Euskera Multilingual Translator (Basque as the Starting Point)")
  st.caption("This is an AI translator using language models - Hau hizkuntza-ereduak erabiltzen dituen IA itzultzaile bat da. Oraingoz lau hizkuntzetara itzultzen du.")

  me = """<div>More about <a href="https://webdevserv.github.io/html_bites/dev/webdev.html" target="_blank">me</a> and some <a href="https://webdevserv-portfolio-idoia-icodeidoia-portfolio-9kblei.streamlit.app" target="_blank">apps</a></div>"""
  st.markdown(me, unsafe_allow_html=True)
  coffee = """
    <div style="margin: 0.75em 0;"><a href="https://www.buymeacoffee.com/Artgen" target="_blank"><img src="https://cdn.buymeacoffee.com/buttons/default-orange.png" alt="Buy Me A Coffee" height="41" width="174"></a></div>
     """
  col1, col2  = st.columns([1,1], gap="small")

  with col1:
        #source_language_dropdown.change
        slang = ("Detect", "Basque")   # Example list of languages
        source_language_dropdown = st.selectbox("Language - Hizkuntza", slang, key='source_languages')

        # Create a text area widget
        input_textbox = st.text_area("Enter text - Idatzi textua", value="", key='input_text')
        data_load_state = st.text("")
  with col2:
        tlang=("","English","German","Russian","Spanish")
        target_language_dropdown = st.selectbox("Translation - Itzulpena", tlang, key='target_languages')
        
  if st.button('Itzuli - Translate') and len(input_textbox)> 0: 
        translated_output = translate(input_textbox,source_language_dropdown,target_language_dropdown)
        st.text_area("Itzulpena - Translation", value=translated_output, disabled=True)
        
@st.cache_data
def load_data(inputt,inputl,targetl):
    data = translate(inputt,inputl,targetl)
    data_load_state.text("")
    return data

if len(target_language_dropdown)>1 and len(source_language_dropdown)>0 and target_language_dropdown!= "" and source_language_dropdown!="Detect" and len(input_textbox)>0:
  data_load_state.text("Itzultzena amaituta...")
  #data = load_data(input_textbox,source_language_dropdown,target_language_dropdown)
  
st.markdown(coffee, unsafe_allow_html=True)