Skip to content

Language localization, with Spanish support.#47

Open
endymion wants to merge 5 commits intomainfrom
español

Hidden character warning

The head ref may contain hidden characters: "espa\u00f1ol"
Open

Language localization, with Spanish support.#47
endymion wants to merge 5 commits intomainfrom
español

Conversation

@endymion
Copy link
Copy Markdown
Contributor

@endymion endymion commented Jun 6, 2025

Osledy, I did a lot of the work toward language localization and Spanish-language support. But, I feel that the Pareto Principle probably applies here. There are probably a lot of details that I neglected. I don't have anywhere near as much experience as you do with localization and of course Spanish, so could you please take a look and let us know if you have any guidance on best practices for doing the localization? I'm not completely sure if we should set it up with /es/ routes or if it should be more transparent than that, or how it should work.

@endymion endymion requested a review from uokesita June 6, 2025 02:19
@endymion endymion mentioned this pull request Jun 6, 2025
cursor[bot]

This comment was marked as outdated.

endymion added a commit that referenced this pull request Jun 6, 2025
…ate_version_from_yaml method directly, enhancing error handling and logging. Added comprehensive unit tests for version creation scenarios, including success, no changes, invalid YAML, and API error handling. #47
@uokesita
Copy link
Copy Markdown
Contributor

uokesita commented Jun 9, 2025

@endymion What do you fell about anglicisms? Things like "Item" should we translate those?

Also, there is a better way to do translations.

const { t: translate } = useTranslation();
...
<span>{translate('tool')}</span>

if (locale === 'es') {
  <span>Herramienta</span>
} else {
  <span>Tool</span>
}

This comes from a global language provider that detects the user lang, via cookie, browser or manual setup

@endymion
Copy link
Copy Markdown
Contributor Author

endymion commented Jun 9, 2025

Oh, excellent, thanks! I was trying to set it up to automatically select Spanish if the user's browser is set to request Spanish. But I couldn't get that to work. This might help with that?

Your opinion matters a lot more than mine about this, but I was imagining translating the key concepts in the conceptual framework to Spanish equivalents. Like, "item" -> "elemento"

Or "ítem"? I have no idea what would sound better to native Spanish speakers.

@uokesita uokesita mentioned this pull request Jun 17, 2025
… support, outlining core principles, current implementation, translation status, workflow, and brand glossary.
Copy link
Copy Markdown

@cursor cursor Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: Duplicate JSON Keys Overwrite Translations

The dashboard/messages/es.json and dashboard/messages/en.json files contain duplicate "navigation" keys. The second "navigation" object overwrites the first, leading to the loss of the initial set of navigation translations. JSON objects do not support duplicate keys.

dashboard/messages/en.json#L13-L112

"help": "Help"
},
"time": {
"lessThanMinute": "<1 minute ago",
"minuteAgo": "{count} minute ago",
"minutesAgo": "{count} minutes ago",
"hourAgo": "{count} hour ago",
"hoursAgo": "{count} hours ago",
"dayAgo": "{count} day ago",
"daysAgo": "{count} days ago",
"weekAgo": "{count} week ago",
"weeksAgo": "{count} weeks ago",
"monthAgo": "{count} month ago",
"monthsAgo": "{count} months ago",
"yearAgo": "{count} year ago",
"yearsAgo": "{count} years ago",
"inTheFuture": "in the future",
"invalidDate": "Invalid date",
"now": "Now",
"today": "Today",
"yesterday": "Yesterday",
"thisWeek": "This Week",
"lastWeek": "Last Week",
"thisMonth": "This Month",
"lastMonth": "Last Month",
"ago": "ago",
"second": "second",
"seconds": "seconds",
"minute": "minute",
"minutes": "minutes",
"hour": "hour",
"hours": "hours",
"day": "day",
"days": "days",
"week": "week",
"weeks": "weeks",
"month": "month",
"months": "months",
"year": "year",
"years": "years"
},
"common": {
"loading": "Loading...",
"error": "Error",
"success": "Success",
"save": "Save",
"cancel": "Cancel",
"delete": "Delete",
"edit": "Edit",
"create": "Create",
"update": "Update",
"close": "Close",
"confirm": "Confirm",
"search": "Search",
"filter": "Filter",
"export": "Export",
"import": "Import",
"refresh": "Refresh",
"settings": "Settings",
"help": "Help",
"language": "Language",
"theme": "Theme",
"dashboard": "Dashboard",
"name": "Name",
"description": "Description",
"status": "Status",
"date": "Date",
"time": "Time",
"type": "Type",
"value": "Value",
"actions": "Actions",
"details": "Details",
"overview": "Overview",
"back": "Back",
"next": "Next",
"previous": "Previous",
"yes": "Yes",
"no": "No"
},
"dashboard": {
"title": "Dashboard",
"welcome": "Welcome to Plexus",
"overview": "Overview",
"recentActivity": "Recent Activity",
"quickActions": "Quick Actions",
"statistics": "Statistics",
"performance": "Performance"
},
"evaluations": {
"title": "Evaluations",
"create": "Create Evaluation",
"list": "Evaluation List",
"details": "Evaluation Details",
"results": "Results",
"metrics": "Metrics",
"accuracy": "Accuracy",
"precision": "Precision",
"recall": "Recall",
"f1Score": "F1 Score",
"scoreResults": "Score Results",

dashboard/messages/es.json#L13-L112

"help": "Ayuda"
},
"time": {
"lessThanMinute": "hace <1 minuto",
"minuteAgo": "hace {count} minuto",
"minutesAgo": "hace {count} minutos",
"hourAgo": "hace {count} hora",
"hoursAgo": "hace {count} horas",
"dayAgo": "hace {count} día",
"daysAgo": "hace {count} días",
"weekAgo": "hace {count} semana",
"weeksAgo": "hace {count} semanas",
"monthAgo": "hace {count} mes",
"monthsAgo": "hace {count} meses",
"yearAgo": "hace {count} año",
"yearsAgo": "hace {count} años",
"inTheFuture": "en el futuro",
"invalidDate": "Fecha inválida",
"now": "Ahora",
"today": "Hoy",
"yesterday": "Ayer",
"thisWeek": "Esta Semana",
"lastWeek": "Semana Pasada",
"thisMonth": "Este Mes",
"lastMonth": "Mes Pasado",
"ago": "hace",
"second": "segundo",
"seconds": "segundos",
"minute": "minuto",
"minutes": "minutos",
"hour": "hora",
"hours": "horas",
"day": "día",
"days": "días",
"week": "semana",
"weeks": "semanas",
"month": "mes",
"months": "meses",
"year": "año",
"years": "años"
},
"common": {
"loading": "Cargando...",
"error": "Error",
"success": "Éxito",
"save": "Guardar",
"cancel": "Cancelar",
"delete": "Eliminar",
"edit": "Editar",
"create": "Crear",
"update": "Actualizar",
"close": "Cerrar",
"confirm": "Confirmar",
"search": "Buscar",
"filter": "Filtrar",
"export": "Exportar",
"import": "Importar",
"refresh": "Actualizar",
"settings": "Configuración",
"help": "Ayuda",
"language": "Idioma",
"theme": "Tema",
"dashboard": "Panel de Control",
"name": "Nombre",
"description": "Descripción",
"status": "Estado",
"date": "Fecha",
"time": "Hora",
"type": "Tipo",
"value": "Valor",
"actions": "Acciones",
"details": "Detalles",
"overview": "Resumen",
"back": "Atrás",
"next": "Siguiente",
"previous": "Anterior",
"yes": "",
"no": "No"
},
"navigation": {
"dashboard": "Panel de Control",
"evaluations": "Evaluaciones",
"scorecards": "Cuadros",
"items": "Elementos",
"reports": "Informes",
"datasets": "Conjuntos de Datos",
"batches": "Lotes",
"tasks": "Tareas",
"activity": "Actividad",
"alerts": "Alertas",
"feedback": "Comentarios",
"feedbackQueues": "Colas de Comentarios",
"settings": "Configuración",
"documentation": "Documentación",
"sources": "Fuentes",
"help": "Ayuda",
"lab": "Laboratorio",
"platform": "Plataforma",
"solutions": "Soluciones"
},

Fix in Cursor


Was this report helpful? Give feedback by reacting with 👍 or 👎

# Conflicts:
#	dashboard/app/[locale]/datasets/page.tsx
#	dashboard/app/[locale]/lab/datasets/layout.tsx
#	dashboard/app/[locale]/lab/datasets/page.tsx
#	dashboard/app/layout.tsx
#	dashboard/app/page.tsx
#	dashboard/components/EvaluationTask.tsx
#	dashboard/components/blocks/TopicAnalysis.tsx
#	dashboard/components/dashboard-layout.tsx
#	dashboard/components/items-dashboard.tsx
#	dashboard/components/items/ItemCard.tsx
#	dashboard/components/items/ScoreResultCard.tsx
#	dashboard/components/reports-dashboard.tsx
#	dashboard/components/ui/timestamp.tsx
@uokesita
Copy link
Copy Markdown
Contributor

@endymion
You did a great job for setting up the languages, I actually did very little.
I'm thinking about the best way to do the documentation translations, as it is, where we have the ifs.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants