Improvvisamente, la cultura non è più supportata nell’app Web di Azure

Il nostro Azure web app sta emettendo errori su una coltura che non è supportata. Carichiamo un elenco di paesi da mostrare in prima pagina, ma questo sta dando improvvisamente degli errori. Lo stesso codice viene utilizzato anche su altre varie app Web e non presentano il problema.

Il seguente codice dà un problema.

private List Countries() { RegionInfo country = new RegionInfo(new CultureInfo("nl-BE", false).LCID); List countryNames = new List(); foreach (CultureInfo cul in CultureInfo.GetCultures(CultureTypes.SpecificCultures)) { country = new RegionInfo(new CultureInfo(cul.Name, false).LCID); countryNames.Add(new SelectListItem() { Text = country.DisplayName, Value = country.DisplayName }); } return countryNames.GroupBy(x => x.Text).Select(x => x.FirstOrDefault()).ToList().OrderBy(x => x.Text).ToList(); } 

Ho messo un try-catch nel for-each in modo da poter individuare le culture che stanno dando errori. Le seguenti culture stanno improvvisamente restituendo errori:

  4096 ar-001   4096 el-CY   4096 en-BB   4096 en-BS   4096 en-HK   4096 en-NL   4096 en-SE   4096 es-419  

Qualcuno può aiutarmi con questo problema? Non riesco a dare un senso al motivo per cui questa app web sta improvvisamente dando questi errori.

Quasi tutti i nuovi locali in Windows non sono assegnati a LCID espliciti, perché non c’è abbastanza “spazio” per le migliaia di lingue in centinaia di paesi. A tutti viene assegnato 0x1000.

In questo caso, penso che un LCID in cambiamento da nominare potrebbe funzionare per voi:

 country = new RegionInfo(new CultureInfo(cul.Name, false).LCID); 

per usare solo il nome della cultura:

 country = new RegionInfo(cul.Name); 

Ovviamente, qualsiasi altro uso di LCID dovrebbe anche riconoscere il nome della cultura.

In realtà raccomandiamo che RegionInfo sia costruito con un nome di coltura completo poiché è più esplicito del solo nome della regione. RegionInfo ha alcune proprietà che “dipendono” dalle lingue, come ad esempio DisplayName. es-US e en-US forniscono, ad esempio, stringhe spagnole o inglesi per “Stati Uniti”.

Spero che sia d’aiuto,

-Shawn

Confermo che si tratta di nuove culture che sono state appena aggiunte in Servizio app di Azure e che evidentemente ha funzionato in modo tale che la creazione di una RegionInfo non riesce. La versione più semplice è:

 var culture = new CultureInfo("en-HK", false).LCID; var region = new RegionInfo(culture); 

E questo fallisce con:

Unhandled Exception: System.Globalization.CultureNotFoundException: Culture is not supported. Parameter name: culture 4096 (0x1000) is an invalid culture identifier. at System.Globalization.CultureData.GetCultureData(Int32 culture, Boolean bUseUserOverride) at System.Globalization.RegionInfo..ctor(Int32 culture)

Stiamo investigando ulteriormente. Nel frattempo, rilevare le eccezioni e ignorare le culture in cui ciò non riesce è la soluzione alternativa consigliata.