Con el lanzamiento de Magento 1.9.2.2 se corrigieron varios dolores de cabeza no menores en Magento. Pero para quienes debemos usar los locales en español, con la actualización del framework recibimos, además, un nuevo problema.
Debido a un error o cambio o como quieran llamarlo, las definiciones de formato de números y decimales que utiliza ZendFramework no son correctas para (casi) todos los locales en español (por ejemplo es_AR, es_CL, es_UY, etc, etc).
Los únicos que se salvan son es_ES y es_MX.
Para que se entienda mejor el problema, en una instalación limpia de Magento 1, usando uno de los locales afectados, no podríamos agregar más de una unidad al carrito.
Lo mismo nos pasaría en Magento2:
Esto sucede por que cuando Zend_Locale valida la cantidad no lo hace correctamente.
Hay solución, aunque no es tan prolija porque HAY QUE TOCAR EL CORE.
Lo primero será editar el archivo /lib/Zend/Locale/Data/es_419.xml.
Y dentro del nodo de números, después de los símbolos (línea 192 aproximadamente, dependiendo de la versión que estén usando)
Dentro del nodo decimalFormats, antes de decimalFormatLength agregamos:
<decimalFormatLength>
<decimalFormat>
<pattern>#,##0.###</pattern>
</decimalFormat>
</decimalFormatLength>
Esto nos deja el archivo de esta forma:
Guardamos, borramos cache de Magento y… esto es muy importante, borramos de /tmp los archivos cacheados del framework.
Si ejecutan un ls -l de /tmp, entre otras cosas de su sistema, verán algo como esto
-rw------- 1 www-data www-data 97 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleC_es_419_parentlocale_
-rw------- 1 www-data www-data 98 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleC_es_AR_date_
-rw------- 1 www-data www-data 97 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleC_es_AR_decimalnumber_
-rw------- 1 www-data www-data 98 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleC_es_AR_parentlocale_
-rw------- 1 www-data www-data 98 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleC_es_AR_scientificnumber_
-rw------- 1 www-data www-data 98 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleL_es_AR_day_
-rw------- 1 www-data www-data 98 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleL_es_AR_month_
-rw------- 1 www-data www-data 98 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleL_es_AR_month_gregorian_format_abbreviated
-rw------- 1 www-data www-data 98 may 22 22:30 zend_cache---internal-metadatas---Zend_LocaleL_es_AR_symbols_
-rw------- 1 www-data www-data 11 may 22 22:30 zend_cache---Zend_LocaleC_es_419_parentlocale_
-rw------- 1 www-data www-data 20 may 22 22:30 zend_cache---Zend_LocaleC_es_AR_date_
-rw------- 1 www-data www-data 18 may 22 22:30 zend_cache---Zend_LocaleC_es_AR_decimalnumber_
-rw------- 1 www-data www-data 21 may 22 22:30 zend_cache---Zend_LocaleC_es_AR_parentlocale_
-rw------- 1 www-data www-data 18 may 22 22:30 zend_cache---Zend_LocaleC_es_AR_scientificnumber_
-rw------- 1 www-data www-data 183 may 22 22:30 zend_cache---Zend_LocaleL_es_AR_day_
-rw------- 1 www-data www-data 229 may 22 22:30 zend_cache---Zend_LocaleL_es_AR_month_
-rw------- 1 www-data www-data 200 may 22 22:30 zend_cache---Zend_LocaleL_es_AR_month_gregorian_format_abbreviated
-rw------- 1 www-data www-data 228 may 22 22:30 zend_cache---Zend_LocaleL_es_AR_symbols_
Necesitamos borrar eso para que vuelva a generarse el cache con los cambios del XML.
Se supone que si intentamos repetir los pasos en nuestro Magento 1, el resultado, ahora, debería ser:
Como decía al comienzo, esto se notó con el lanzamiento de la versión 1.9.2.2. Yo tuve la suerte de chocarme con este problema a los pocos días y creé, el 21/11/2015, el issue #8461 (tienen que estar logueados para verlo).
Dado que Magento 2 arrastra la misma librería, nos pasó lo mismo. Esto llevó a la creación del issue #3619 (y si lo siguen, pueden ver que no fue el único relacionado).
Para resolverlo en Magento 2 hay que seguir los mismos pasos. La única diferencia es que el archivo está ubicado en:
vendor/magento/zendframework1/library/Zend/Locale/Data/es_419.xml
Una vez terminada la modificación, en su Magento 2, deberían obtener este resultado:
Al momento de este post, el problema sigue sucediendo. Acabo de crear el PR en el repositorio de la versión de ZendFramework que mantiene Magento para ver si podemos evitar el mantenimiento manual y, de paso, que se propague a Magento 2.2.
La solución definitiva no fue mía, sino que fue Martín quien tomó la posta de lo que yo estaba revisando, y luego se sumó Omar que ayudó con el testing y pruebas en varios entornos.