mirror of
https://github.com/crewAIInc/crewAI.git
synced 2025-12-16 04:18:35 +00:00
- Add language parameter to I18N class to support multiple languages - Implement fallback to English for unsupported languages - Add Spanish (es.json) translation file as example - Update Agent and Crew classes to accept language parameter - Add comprehensive tests for multi-language support Fixes #3780 Co-Authored-By: João <joao@crewai.com>
99 lines
2.7 KiB
Python
99 lines
2.7 KiB
Python
import pytest
|
|
from crewai.utilities.i18n import I18N
|
|
|
|
|
|
def test_default_language_is_english():
|
|
i18n = I18N()
|
|
assert i18n.language == "en"
|
|
assert isinstance(i18n.slice("role_playing"), str)
|
|
assert "You are {role}" in i18n.slice("role_playing")
|
|
|
|
|
|
def test_explicit_english_language():
|
|
i18n = I18N(language="en")
|
|
assert i18n.language == "en"
|
|
assert isinstance(i18n.slice("role_playing"), str)
|
|
assert "You are {role}" in i18n.slice("role_playing")
|
|
|
|
|
|
def test_spanish_language():
|
|
i18n = I18N(language="es")
|
|
assert i18n.language == "es"
|
|
assert isinstance(i18n.slice("role_playing"), str)
|
|
assert "Eres {role}" in i18n.slice("role_playing")
|
|
|
|
|
|
def test_spanish_hierarchical_manager():
|
|
i18n = I18N(language="es")
|
|
role = i18n.retrieve("hierarchical_manager_agent", "role")
|
|
goal = i18n.retrieve("hierarchical_manager_agent", "goal")
|
|
backstory = i18n.retrieve("hierarchical_manager_agent", "backstory")
|
|
|
|
assert role == "Gerente del Equipo"
|
|
assert "Gestionar el equipo" in goal
|
|
assert "gerente experimentado" in backstory
|
|
|
|
|
|
def test_spanish_errors():
|
|
i18n = I18N(language="es")
|
|
error = i18n.errors("tool_usage_error")
|
|
assert "Encontré un error" in error
|
|
|
|
|
|
def test_spanish_tools():
|
|
i18n = I18N(language="es")
|
|
delegate_work = i18n.tools("delegate_work")
|
|
assert "Delega una tarea específica" in delegate_work
|
|
|
|
|
|
def test_fallback_to_english_for_unsupported_language():
|
|
i18n = I18N(language="fr")
|
|
assert isinstance(i18n.slice("role_playing"), str)
|
|
assert "You are {role}" in i18n.slice("role_playing")
|
|
|
|
|
|
def test_custom_prompt_file_overrides_language():
|
|
import os
|
|
import tempfile
|
|
import json
|
|
|
|
custom_prompts = {
|
|
"slices": {
|
|
"role_playing": "Custom role playing prompt"
|
|
}
|
|
}
|
|
|
|
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
|
|
json.dump(custom_prompts, f)
|
|
temp_file = f.name
|
|
|
|
try:
|
|
i18n = I18N(prompt_file=temp_file, language="es")
|
|
assert i18n.slice("role_playing") == "Custom role playing prompt"
|
|
finally:
|
|
os.unlink(temp_file)
|
|
|
|
|
|
def test_retrieve_with_spanish():
|
|
i18n = I18N(language="es")
|
|
observation = i18n.retrieve("slices", "observation")
|
|
assert "Observación" in observation
|
|
|
|
|
|
def test_spanish_reasoning_prompts():
|
|
i18n = I18N(language="es")
|
|
initial_plan = i18n.retrieve("reasoning", "initial_plan")
|
|
assert "Eres {role}" in initial_plan
|
|
assert "profesional" in initial_plan
|
|
|
|
|
|
def test_language_parameter_validation():
|
|
i18n = I18N(language="en")
|
|
assert i18n.language == "en"
|
|
|
|
i18n_es = I18N(language="es")
|
|
assert i18n_es.language == "es"
|
|
|
|
i18n_pt = I18N(language="pt")
|
|
assert i18n_pt.language == "pt"
|