Spaces:
Runtime error
Runtime error
import json | |
import os | |
from typing import Dict, Optional | |
from pydantic import BaseModel, Field, PrivateAttr, ValidationError, model_validator | |
class I18N(BaseModel): | |
_translations: Dict[str, Dict[str, str]] = PrivateAttr() | |
language: Optional[str] = Field( | |
default="en", | |
description="Language used to load translations", | |
) | |
def load_translation(self) -> "I18N": | |
"""Load translations from a JSON file based on the specified language.""" | |
try: | |
dir_path = os.path.dirname(os.path.realpath(__file__)) | |
prompts_path = os.path.join( | |
dir_path, f"../translations/{self.language}.json" | |
) | |
with open(prompts_path, "r") as f: | |
self._translations = json.load(f) | |
except FileNotFoundError: | |
raise ValidationError( | |
f"Translation file for language '{self.language}' not found." | |
) | |
except json.JSONDecodeError: | |
raise ValidationError(f"Error decoding JSON from the prompts file.") | |
if not self._translations: | |
self._translations = {} | |
return self | |
def slice(self, slice: str) -> str: | |
return self.retrieve("slices", slice) | |
def errors(self, error: str) -> str: | |
return self.retrieve("errors", error) | |
def tools(self, error: str) -> str: | |
return self.retrieve("tools", error) | |
def retrieve(self, kind, key) -> str: | |
try: | |
return self._translations[kind][key] | |
except: | |
raise ValidationError(f"Translation for '{kind}':'{key}' not found.") | |