Salve a tutti,
sono nuovo sia del forum che di nopCommerce e apro questo topic col solo intento di raggruppare in pochi e semplici step la procedura di localizzazione italiana. Premetto che di mio non c'è niente, visto che sono addirittura un principiante in materia, ma ho raccolto in giro per internet le informazioni che hanno risolto alcuni aspetti che contrastavano una completa localizzazione italiana di nopCommerce 3.00 e che il languagepack, generosamente offerto da altri, non può coprire.
Step 1:
La fase iniziale è quella classica di scaricare il languagepack dal sito di nopcommerce ed eseguire la fase d'importazione.
Step 2:
Successivamente si noterà che nel BackOffice (sezione Amministrazione) il formato data e il formato decimale continuano ad essere gestiti nella localizzazione inglese; da quello che ho capito, questa è una forzatura imposta dal Team di sviluppo in quanto la localizzazione dei componenti Telerik non copre molte lingue. Naturalmente ciò non va bene per l'italiano medio in quanto già ha difficoltà con la lingua madre (io in primis), figuriamoci col gestire il formato data inglese, pertanto la strada che ho seguito è la seguente (Nota bene il tutto lo si può fare solo grazie ai sorgenti di nopCommerce):
2.1) Scaricare la cartella globalize di jquery dal seguente link: https://github.com/jquery/globalize
2.2) Decomprimerla e copiare il contenuto della cartella lib nella cartella Scripts della sezione Presentation/Nop.Admin
2.3) Aprire il file _AdminLayout.cshtml presente nella cartella Presentation/Nop.Admin/Views/Shared ed aggiungere le seguenti istruzioni:
2.3.1) Nella sezione @Using aggiungere: @using System.Threading;
2.3.2) Nella sezione con commento //resources:
Html.AppendScriptParts("~/Administration/Scripts/globalize.js");
2.3.3) Nella sezione <head>:
<script src='@Url.Content("~/Administration/Scripts/cultures/globalize.culture." + Thread.CurrentThread.CurrentCulture.Name + ".js")' type="text/javascript"></script>
2.4) Aprire il file Global.asax presente nella cartella Presentation/Nop.Web, individuare il blocco IF che inizia per if (webHelper.GetThisPageUrl(false).StartsWith(string.Format("{0}admin", webHelper.GetStoreLocation()),
StringComparison.InvariantCultureIgnoreCase)) e commentare il tutto lasciando attivo solo le istruzioni dopo l'ELSE;
in pratica il risultato sarà il seguente:
//if (webHelper.GetThisPageUrl(false).StartsWith(string.Format("{0}admin", webHelper.GetStoreLocation()),
// StringComparison.InvariantCultureIgnoreCase))
//{
// //admin area
// //always set culture to 'en-US'
// //we set culture of admin area to 'en-US' because current implementation of Telerik grid
// //doesn't work well in other cultures
// //e.g., editing decimal value in russian culture
// var culture = new CultureInfo("en-US");
// Thread.CurrentThread.CurrentCulture = culture;
// Thread.CurrentThread.CurrentUICulture = culture;
//}
//else
//{
//public store
var workContext = EngineContext.Current.Resolve<IWorkContext>();
if (workContext.CurrentCustomer != null && workContext.WorkingLanguage != null)
{
var culture = new CultureInfo(workContext.WorkingLanguage.LanguageCulture);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
//}
Step 3:
In seguito ad alcuni test è emerso che, usando il browser Chrome, anche se la formattazione della data in italiano è corretta, i campi DateTimePicker continuano a segnalare il seguente messaggio di errore : The field <nomecampo> must be a date. . Se ho capito bene, il problema non è nopCommerce ma Chrome (la motivazione precisa non saprei spiegarla), comunque la soluzione che ho trovato è la seguente:
3.1) Aprire il file _AdminLayout.cshtml presente nella cartella Presentation/Nop.Admin/Views/Shared ed aggiungere le seguenti istruzioni nella sezione <head>:
<script>
$().ready(function () {
// fix date validation for chrome
$.extend($.validator.methods, {
date: function (value, element) {
if ($.browser.webkit) {
//var d = new Date();
//return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));
return this.optional(element) || !/Invalid|NaN/.test(new Date(Globalize.parseDate(value)));
}
else {
return this.optional(element) || !/Invalid|NaN/.test(new Date(value));
}
}
});
});
</script>
Per ora è tutto, sto cercando di capire come localizzare in italiano alcuni messaggi di validazione (come ad esempio quella della data precedentemente descritto) e come localizzare alcune funzioni intrinseche ai componenti Telerik specialmente quando si filtra una griglia e/o si modifica una riga di una griglia.
Concludendo, vorrei ricordare che tutto quanto ho scritto è per aiutare chi, come me, si avvicina a nopCommerce e ha notato queste discrepanze in fase di localizzazione della lingua italiana. Non sono un esperto ne del programma ne della piattaforma Asp.Net MVC, anzi, sono agli inizi nello studio, ma spero di aver reso cosa utile a qualcuno.
Buona giornata a tutti.