La piattaforma di ecommerce Magento2 come tutti sappiamo, è ancora in fase di sviluppo e purtroppo è piena zeppa di bug e che piano piano il team core di Magento insieme al valido aiuto della community su GitHub sta correggendo.

Purtroppo, un bug abbastanza grave affligge ancora l’ultime versioni sia la 2.0.x che la 2.1.x.

Definisco questo bug grave, perché impatta su una delle operazioni più comuni che un qualsiasi webmaster compie durante lo sviluppo di un sito web, vale a dire la personalizzazione delle traduzioni.

Facciamo un esempio:
Creando un nuovo tema per il nostro progetto (scelta obbligata) ed installando la lingua italiana, vogliamo modificare il classico “Aggiungi al carrello” con un più generico “Aggiungi”.

In Magento1, avremmo aggiornato il file translate.csv del nostro locale nel nostro tema di riferimento e il gioco era fatto.

In linea teorica dovrebbe essere la stessa cosa anche in Magento2, creeremmo il file i18n/it_IT.csv nel nostro tema all’interno del quale scriveremmo "Add to Cart","Aggiungi" e l’avremmo chiusa qui, ma purtroppo non è così.

Per come è scritto ora il codice di Magento, il language pack sovrascrive le traduzioni del tema (e non mi si venga a dire: “ma non è un bug ma una feature” perché assolutamente non è così!).
E quindi, qualunque modifica noi vogliamo apportare alle traduzioni da tema, verranno sovrascritte dalla relativa stringa del language pack attivo (nel nostro caso l’italiano).

Ci sono almeno 2 pull requests in sospeso su GitHub di utenti che hanno anche fornito una soluzione, ma il team di Magento non ha ancora integrato la correzione. Spero che in un futuro prossimo si decideranno ad implementare tale fix.

Per il momento non ci resta che fixare manualmente il problema, facendo ahimè l’override della classe incriminata.

Creiamo le directory (se già non presenti)
lib/internal/Magento/Framework
e facciamo il copia/incolla di vendor/magento/framework/Translate.php nella directory sopracitata.

Avremo quindi lib/internal/Magento/Framework/Translate.php.
Cerchiamo quindi il metodo public function loadData($area = null, $forceReload = false) e modifichiamo l’ordinamento di caricamento che si trova da riga 179 in poi.
Modifichiamo quindi da così:

a così:

Di fatto abbiamo spostato gli ordini di caricamento, facendo caricare le traduzioni del tema dopo le traduzioni del language pack.

In questo modo, Magento2 si comporterà esattamente come Magento1!