Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import os | |
| from azure.storage.blob import BlobServiceClient | |
| from azure.core.credentials import AzureKeyCredential | |
| from azure.ai.translation.document import DocumentTranslationClient | |
| # Azure Blob Storage connection strings | |
| # Container names | |
| FIRST_CONTAINER_NAME = "source" | |
| SECOND_CONTAINER_NAME = "target" | |
| # Initialize Azure Blob Service Clients | |
| blob_service_client = BlobServiceClient.from_connection_string(os.environ["AZURE_STORAGE_CONNECTION_STRING"]) | |
| # Function to upload file to Azure Storage | |
| def upload_to_azure(blob_service_client, container_name, file, file_name): | |
| container_client = blob_service_client.get_container_client(container_name) | |
| container_client.upload_blob(name=file_name, data=file, overwrite=True) | |
| # Function to download file from Azure Storage | |
| def download_from_azure(blob_service_client, container_name, file_name): | |
| container_client = blob_service_client.get_container_client(container_name) | |
| blob_client = container_client.get_blob_client(blob=file_name) | |
| file_content = blob_client.download_blob().readall() | |
| return file_content | |
| # Function to delete file from Azure Storage | |
| def delete_from_azure(blob_service_client, container_name, file_name): | |
| container_client = blob_service_client.get_container_client(container_name) | |
| blob_client = container_client.get_blob_client(blob=file_name) | |
| blob_client.delete_blob() | |
| key = os.environ["AZURE_AI_TRANSLATOR_KEY"] | |
| endpoint = os.environ["AZURE_AI_ENDPOINT_URL"] | |
| sourceUri = "https://cbdtranslation.blob.core.windows.net/source" | |
| targetUri = "https://cbdtranslation.blob.core.windows.net/target" | |
| # Initialize a new instance of the DocumentTranslationClient | |
| client = DocumentTranslationClient(endpoint, AzureKeyCredential(key)) | |
| def translate(lang_id, lang_name): | |
| poller = client.begin_translation(sourceUri, targetUri, lang_id) | |
| result = poller.result() | |
| st.write( | |
| 'Total documents: {}'.format( | |
| poller.details.documents_total_count | |
| ) | |
| ) | |
| for document in result: | |
| if document.status == 'Succeeded': | |
| st.success('Translated to language: {}\n'.format(lang_name)) | |
| else: | |
| st.error( | |
| 'Error Code: {}, Message: {}\n'.format( | |
| document.error.code, document.error.message | |
| ) | |
| ) | |
| # Streamlit UI | |
| st.title("Azure Translation Tools") | |
| # Step 1: Upload File | |
| uploaded_file = st.file_uploader("Upload a file to start the process") | |
| langs = ( | |
| 'id - Indonesian', | |
| 'en - English', | |
| 'es - Spanish', | |
| 'zh - Chinese', | |
| 'ar - Arabic', | |
| 'fr - French', | |
| 'ru - Russian', | |
| 'hi - Hindi', | |
| 'pt - Portuguese', | |
| 'de - German', | |
| 'ms - Malay', | |
| 'ta - Tamil', | |
| 'ko - Korean', | |
| 'th - Thai', | |
| ) | |
| lang = st.selectbox('Target language selection:', langs, key='lang') | |
| lang_id = lang.split()[0] | |
| lang_name = lang.split()[-1] | |
| if uploaded_file: | |
| submit = st.button("Get Result", key='submit') | |
| if uploaded_file and submit: | |
| file_name = uploaded_file.name | |
| file_content = uploaded_file.read() | |
| upload_to_azure(blob_service_client, FIRST_CONTAINER_NAME, file_content, file_name) | |
| st.info("Performing translations on the file...") | |
| translate(lang_id, lang_name) | |
| # Upload file to second storage for simulation | |
| downloaded_file_content = download_from_azure(blob_service_client, SECOND_CONTAINER_NAME, file_name) | |
| # Step 5: Delete both files | |
| delete_from_azure(blob_service_client, FIRST_CONTAINER_NAME, file_name) | |
| delete_from_azure(blob_service_client, SECOND_CONTAINER_NAME, file_name) | |
| # Allow user to download the file | |
| st.download_button( | |
| label="Download the Processed File", | |
| data=downloaded_file_content, | |
| file_name=f"{lang_name}-translated-{file_name}", | |
| mime="application/octet-stream" | |
| ) | |