🌐 CLDR — formatos de moneda, fecha y numero

Actualizado: 2024-12-01

CLDR (Common Locale Data Repository) es el estandar que PrestaShop 1.7+ usa para formatear precios, fechas y numeros segun la configuracion regional. Reemplazo al sistema antiguo de formatos hardcoded.

#Que es CLDR en PrestaShop

Sistema CLDR
php
<?php

// ── PrestaShop usa CLDR para formatear precios automaticamente ──
// El formato depende del locale del idioma activo:
//   es-ES: 29,99 €
//   en-US: €29.99
//   de-DE: 29,99 €
//   ja-JP: €29.99

// ── Obtener el locale actual ──
$locale = Context::getContext()->language->locale; // 'es-ES'

// ── Formatear precio usando el servicio de locale ──
// En Symfony (PS 1.7.6+):
$priceFormatter = $this->get('prestashop.core.localization.locale.context_locale');
$formatted = $priceFormatter->formatPrice(29.99, 'EUR');
// Resultado: "29,99 €" (en es-ES)

// ── En un modulo (sin inyeccion de dependencias) ──
use PrestaShop\PrestaShop\Core\Localization\Locale\Locale;

$locale = Context::getContext()->getCurrentLocale();
if ($locale) {
    $formatted = $locale->formatPrice(29.99, 'EUR');
}

// ── Formatear numero ──
$formatted = $locale->formatNumber(12345.67);
// es-ES: 12.345,67
// en-US: 12,345.67

#Formatos de precio y moneda

LocaleFormato precioSeparador decimalSeparador milesPosicion simbolo
es-ES29,99 €ComaPuntoDespues
en-US$29.99PuntoComaAntes
en-GB£29.99PuntoComaAntes
fr-FR29,99 €ComaEspacioDespues
de-DE29,99 €ComaPuntoDespues
pt-BRR$ 29,99ComaPuntoAntes

#Formatos de fecha

Formatear fechas segun locale
php
<?php

// ── PrestaShop usa los formatos de fecha del idioma ──
$lang = Context::getContext()->language;
echo $lang->date_format_lite;  // 'd/m/Y' para es-ES
echo $lang->date_format_full;  // 'd/m/Y H:i:s' para es-ES

// ── Formatear fecha ──
$date = Tools::displayDate('2024-12-25 14:30:00');
// Resultado segun locale: "25/12/2024" (es), "12/25/2024" (en-US)

$dateFull = Tools::displayDate('2024-12-25 14:30:00', null, true);
// Con hora: "25/12/2024 14:30:00"

// ── En Smarty ──
// {$order.date_add|date_format:'%d/%m/%Y'}
// O usar el helper de PS:
// {dateFormat date=$order.date_add full=true}

#Personalizar formatos

Personalizar formatos regionales
text
BO → Localizacion → Idiomas → Editar idioma

- Formato de fecha: d/m/Y (personalizable)
- Formato de fecha completo: d/m/Y H:i:s
- Estos formatos se usan en todo el front y BO

BO → Localizacion → Monedas → Editar moneda

- Formato: #,##0.00 (patron CLDR)
- Simbolo: €
- Codigo ISO: EUR
- Precision decimal: 2

NOTA: Los formatos CLDR se pueden sobreescribir
por idioma en la base de datos:
  ps_lang.date_format_lite
  ps_lang.date_format_full
  ps_currency.pattern
Descargar en Markdown Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.