Skip to main content
Glama

text_translation

Translate text files between languages. Supports TXT and SRT formats up to 10MB. Specify target language and optional source language for accurate translation results.

Instructions

[AllVoiceLab Tool] Translate text from a file to another language.

This tool translates text content from a file to a specified target language. The process runs asynchronously with status polling and returns the translated text when complete. Args: file_path: Path to the text file to translate. Only TXT and SRT formats are supported. Maximum file size: 10MB. target_lang: Target language code for translation (e.g., 'zh', 'en', 'ja', 'fr', 'de', 'ko'). Required. source_lang: Source language code of the original content. Set to 'auto' for automatic language detection. Default is 'auto'. output_dir: Output directory for the downloaded result file. Default is user's desktop. Returns: TextContent containing the file path to the translated file or error message. If the process takes longer than expected, returns the project ID for later status checking. Limitations: - Only TXT and SRT formats are supported - Maximum file size: 10MB - File must exist and be accessible - Currently supports a limited set of languages for translation

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
file_pathYes
target_langYes
source_langNoauto
output_dirNo

Implementation Reference

  • The main handler function for the 'text_translation' tool. Validates input file (TXT/SRT, <=10MB), submits translation task to AllVoiceLab API, polls status up to 10 minutes, downloads result if successful, saves to output_dir, and returns formatted TextContent with translation details and file path.
    def text_translation_tool( file_path: str, target_lang: str, source_lang: str = "auto", output_dir: str = None ) -> TextContent: all_voice_lab = get_client() output_dir = all_voice_lab.get_output_path(output_dir) max_polling_time = 600 polling_interval = 10 logging.info( f"Tool called: text_translation, file_path: {file_path}, target_lang: {target_lang}, source_lang: {source_lang}") logging.info(f"Max polling time: {max_polling_time}s, Polling interval: {polling_interval}s") if not file_path: logging.warning("File path parameter is empty") return TextContent( type="text", text="file_path parameter cannot be empty" ) if not os.path.exists(file_path): logging.warning(f"File does not exist: {file_path}") return TextContent( type="text", text=f"File does not exist: {file_path}" ) _, file_extension = os.path.splitext(file_path) file_extension = file_extension.lower() if file_extension not in [".txt", ".srt"]: logging.warning(f"Unsupported file format: {file_extension}") return TextContent( type="text", text=f"Unsupported file format. Only TXT and SRT formats are supported." ) max_size_bytes = 10 * 1024 * 1024 # 10MB in bytes file_size = os.path.getsize(file_path) if file_size > max_size_bytes: logging.warning(f"File size exceeds limit: {file_size} bytes, max allowed: {max_size_bytes} bytes") return TextContent( type="text", text=f"File size exceeds the maximum limit of 10MB. Please use a smaller file." ) try: if all_voice_lab is None: logging.error("all_voice_lab client is not initialized.") return TextContent(type="text", text="Error: AllVoiceLab client not initialized. Please check server setup.") logging.info("Starting text translation process") project_id = all_voice_lab.text_translation( file_path=file_path, target_lang=target_lang, source_lang=source_lang ) logging.info(f"Text translation task submitted. Project ID: {project_id}") logging.info(f"Starting to poll translation status for Project ID: {project_id}") start_time = time.time() completed = False while time.time() - start_time < max_polling_time: try: translation_result = all_voice_lab.get_text_translation_result(project_id) if translation_result is None: logging.warning(f"Failed to get translation result for Project ID: {project_id}") time.sleep(polling_interval) continue logging.info(f"Translation status: {translation_result.status} for Project ID: {project_id}") if translation_result.status.lower() == "success": logging.info(f"Text translation completed for Project ID: {project_id}") completed = True if translation_result.result and translation_result.result.startswith("http"): try: os.makedirs(output_dir, exist_ok=True) # Get original filename without extension original_filename = os.path.splitext(os.path.basename(file_path))[0] timestamp = int(time.time()) random_suffix = ''.join(random.choices('abcdefghijklmnopqrstuvwxyz0123456789', k=6)) filename = f"{original_filename}_translation_{timestamp}_{random_suffix}.txt" file_path = os.path.join(output_dir, filename) logging.info(f"Downloading translation result from URL: {translation_result.result}") response = requests.get(translation_result.result, timeout=30) response.raise_for_status() with open(file_path, 'wb') as f: f.write(response.content) with open(file_path, 'r', encoding='utf-8') as f: translated_text = f.read() logging.info(f"Translation result downloaded and saved to: {file_path}") result_text = f"Translation completed successfully.\n\n" result_text += f"Source Language: {translation_result.source_lang}\n" result_text += f"Target Language: {translation_result.target_lang}\n\n" result_text += f"Translated Text:\n{translated_text}\n\n" result_text += f"Result file saved at: {file_path}" return TextContent( type="text", text=result_text ) except Exception as e: logging.error(f"Error downloading translation result: {str(e)}") result_text = f"Translation completed, but failed to download result: {str(e)}\n\n" result_text += f"Source Language: {translation_result.source_lang}\n" result_text += f"Target Language: {translation_result.target_lang}\n\n" result_text += f"Result URL: {translation_result.result}" return TextContent( type="text", text=result_text ) else: result_text = f"Translation completed successfully.\n\n" result_text += f"Source Language: {translation_result.source_lang}\n" result_text += f"Target Language: {translation_result.target_lang}\n\n" result_text += f"No result URL available." return TextContent( type="text", text=result_text ) elif translation_result.status.lower() == "failed": logging.error( f"Translation failed for Project ID: {project_id}") return TextContent( type="text", text=f"Translation failed" ) except Exception as e: logging.error(f"Error while polling translation status: {str(e)}") time.sleep(polling_interval) if not completed: logging.warning(f"Translation not completed within {max_polling_time} seconds for Project ID: {project_id}") return TextContent( type="text", text=f"Translation is still in progress. Please check the status later using the project ID: {project_id}" ) except Exception as e: logging.error(f"Text translation failed: {str(e)}") return TextContent( type="text", text=f"Translation failed: {str(e)}" )
  • Registers the 'text_translation' tool with FastMCP, providing name, description with input args and limitations, and binds the handler function text_translation_tool.
    mcp.tool( name="text_translation", description="""[AllVoiceLab Tool] Translate text from a file to another language. This tool translates text content from a file to a specified target language. The process runs asynchronously with status polling and returns the translated text when complete. Args: file_path: Path to the text file to translate. Only TXT and SRT formats are supported. Maximum file size: 10MB. target_lang: Target language code for translation (e.g., 'zh', 'en', 'ja', 'fr', 'de', 'ko'). Required. source_lang: Source language code of the original content. Set to 'auto' for automatic language detection. Default is 'auto'. output_dir: Output directory for the downloaded result file. Default is user's desktop. Returns: TextContent containing the file path to the translated file or error message. If the process takes longer than expected, returns the project ID for later status checking. Limitations: - Only TXT and SRT formats are supported - Maximum file size: 10MB - File must exist and be accessible - Currently supports a limited set of languages for translation """ )(text_translation_tool)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/allvoicelab/AllVoiceLab-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server