Una settimana fa abbiamo lanciato il nuovo sito del Gestionale Amica, il nostro prodotto di punta. E’ scritto in ASP.NET ed è dotato di un sistema di e-commerce sviluppato su misura. Carrello della spesa, checkout, pagamenti con carta di credito, tracciamento ordini, profilo utenti… un lavoro del quale sono piuttosto orgoglioso. Man mano che il giorno del debutto si avvicinava cresceva l’eccitazione; ero impaziente di vederlo funzionare questo gioiellino. Finalmente il 21 marzo è arrivato e con la primavera è sbocciato il nuovo sito. Come è andata? Bene! A parte un piccolo dettaglio. Il mio gioiellino vendeva in Dollari ($) anziché in Euro (€)

Come è potuto succedere?

In fatto di localizzazione una pagina ASP.NET non è diversa da una normale applicazione WinForms. In assenza di indicazioni diverse il .NET Framework rappresenta le valute in base alle impostazioni internazionali del computer che lo ospita. Durante sviluppo e collaudo non abbiamo avuto problemi perché lavoravamo su server aziendali locali. Tuttavia il server di produzione è americano, ed è così che pubblicando il sito ci siamo regalati un bel cambiamento di valuta, il tutto senza toccare una linea di codice.

Restituisce €1.567,50 in Italia e $1,567.50 negli Stati Uniti. Probabilmente a questo punto vi starete dicendo due cose:

  1. Ma perché hai pubblicato un sito in italiano, per un pubblico italiano, negli Stati Uniti?
  2. Te lo dovevi aspettare, cosa volevi che succedesse? Qualunque sviluppatore con un minimo di esperienza sa queste cose.

A proposito del primo punto ci sarebbe da scrivere un articolo intero (e magari lo farò). Basti sapere per ora che, malgrado le apparenze, ci sono (anche) buone ragioni per pubblicare siti italiani all’estero. Sul secondo punto naturalmente avreste ragione. Il fatto è che, nel grande schema delle cose, sono proprio i piccoli dettagli quelli che possono sfuggire. Per fortuna porre rimedio è stato semplice e indolore. Vediamo.

E’ tutta questione di Culture

In ogni pagina ASP.NET è possibile impostare il valore delle proprietà Culture e UICulture. Culture determina l’output delle funzioni influenzate dalla cultura: date, numeri, valute, orari. UICulture istruisce la pagina su quali risorse culturali caricare.

Impostare Culture e UICulture per tutto il sito

Intervenendo direttamente nel file Web.Config possiamo dire a ASP.NET quale è la cultura da usare in tutto il sito. In questo modo non dovremo preoccuparci di intervenire su ogni in pagina.

Attenzione alle maiuscole. uiCulture va bene; uiculture non va bene. Non sprecate mezz’ora per una sciocchezza del genere, l’ho già fatto io per voi.

Impostare Culture e UICulture per una pagina

Per modificare Culture e UICulture di una singola pagina è necessario impostare i corrispondenti attributi della direttiva @ Page

Questa tecnica può naturalmente venire usata in abbinamento alla precedente anche se devo dire che non mi viene in mente un motivo, uno scenario valido in cui ciò potrebbe essere utile.

Adattare l’output alla lingua del browser

Per adattare la cultura al linguaggio del browser che visita la pagina basta impostare UICultureCulture su auto (non l’ho testato personalmente). E’ anche possibile cambiare la cultura dinamicamente via codice. Se volete sapere come fare consultate la documentazione ufficiale.

Dimenticavo…

C’è un’altra cosuccia che non ha funzionato perfettamente al momento del debutto. Immaginate la sorpresa del cliente che, ordinando un prodotto da €499 + IVA, si è visto proporre l’addebito su carta di credito per €1 (uno) IVA inclusa. Ma questa è un’altra storia…