MenuBase/services/translation/google_translate.py

77 lines
2.9 KiB
Python
Raw Normal View History

2025-02-06 10:11:57 -03:00
# services/translation/google_translate.py
"""
Google Translation service implementation
"""
from typing import Optional, List
import html
from google.cloud import translate_v2 as translate
from google.oauth2 import service_account
from config.api_keys import APIKeyManager
from .base import TranslationService
class GoogleTranslateService(TranslationService):
def __init__(self, credentials_file: Optional[str] = None):
"""
Initialize Google Translate service
Args:
credentials_file: Path to Google service account credentials JSON file.
If None, will use API key from APIKeyManager.
"""
if credentials_file:
# Use service account credentials
try:
credentials = service_account.Credentials.from_service_account_file(credentials_file)
self.client = translate.Client(credentials=credentials)
except Exception as e:
raise ValueError(f"Error initializing Google Translate with credentials: {e}")
else:
# Use API key
api_key = APIKeyManager.get_google_key()
if not api_key:
raise ValueError("Google API key not found. Please set up your API keys.")
self.client = translate.Client()
def translate_text(self, text: str, target_language: str, source_language: Optional[str] = None) -> str:
"""
Translate a single text.
Args:
text: Text to translate
target_language: Target language code (e.g., 'es' for Spanish)
source_language: Source language code. If None, will be auto-detected.
Returns:
Translated text
"""
try:
result = self.client.translate(
text,
target_language=target_language,
source_language=source_language
)
return html.unescape(result["translatedText"])
except Exception as e:
raise ValueError(f"Error in Google Translate: {e}")
def translate_batch(self, texts: List[str], target_language: str, source_language: Optional[str] = None) -> List[str]:
"""
Translate multiple texts in batch.
Args:
texts: List of texts to translate
target_language: Target language code (e.g., 'es' for Spanish)
source_language: Source language code. If None, will be auto-detected.
Returns:
List of translated texts
"""
try:
results = self.client.translate(
texts,
target_language=target_language,
source_language=source_language
)
return [html.unescape(result["translatedText"]) for result in results]
except Exception as e:
raise ValueError(f"Error in Google Translate batch: {e}")