Formato del símbolo de moneda según el locale
Implementa: web, app
Consume: —
Estado: activa
Última revisión: 2026-05-20T15:30:58Z
# Implementa: web, app
# Consume: —
# Estado: activa
# Última revisión: 2026-05-20T15:30:58Z
# Position: 1
Feature: Formato del símbolo de moneda según el locale
La posición del símbolo € nunca se hardcodea. Se delega siempre a las
APIs nativas de internacionalización: Intl.NumberFormat en web,
NumberFormat en Kotlin (app).
La posición depende del locale activo de la interfaz, no de la región
geográfica de la gasolinera:
- es-* → símbolo después del número, con espacio: 1,539 €/L
- en-* y otros → símbolo antes del número, sin espacio: €1.539/L
Construir el string de precio concatenando el símbolo manualmente es un
bug, aunque el resultado visual parezca correcto en ese momento.
Background:
Given el sistema lee el locale activo del dispositivo o navegador del usuario
# ---------------------------------------------------------------------------
# Posición del símbolo según locale
# ---------------------------------------------------------------------------
Scenario Outline: El símbolo € se posiciona según el locale activo
Given el locale activo es "<locale>"
And un precio de <valor> €/L
When el sistema formatea el precio para mostrar
Then el resultado es "<esperado>"
Examples:
| locale | valor | esperado |
| es-ES | 1.539 | 1,539 €/L |
| es-ES | 1.413 | 1,413 €/L |
| en-US | 1.539 | €1.539/L |
| en-GB | 1.539 | €1.539/L |
Scenario: Locale es-* — el símbolo va después del número
Given el locale activo empieza por "es-"
When se muestra cualquier valor monetario en la interfaz
Then el símbolo € aparece a la derecha del número
And hay exactamente un espacio entre el número y el símbolo
Scenario: Locale en-* y otros — el símbolo va antes del número
Given el locale activo empieza por "en-" o es un locale no es-*
When se muestra cualquier valor monetario en la interfaz
Then el símbolo € aparece a la izquierda del número
And no hay espacio entre el símbolo y el número
# ---------------------------------------------------------------------------
# Implementación: nunca construir el string a mano
# ---------------------------------------------------------------------------
Scenario: El formato se delega siempre a la API nativa
Given cualquier locale activo
When el sistema necesita mostrar un valor monetario
Then usa Intl.NumberFormat(locale, { style: 'currency', currency: 'EUR' }) en web
And usa NumberFormat con Locale en Kotlin en app
And no concatena el símbolo € con el número mediante interpolación de strings
Scenario: El símbolo aparece correctamente en todos los contextos de precio
Given el locale activo es cualquiera
When se muestran precios en la lista de estaciones, el detalle o los badges de coste
Then todos usan la misma función de formato centralizada
And ningún componente tiene lógica de posicionamiento del símbolo propia