Localizzazione Italiana NopCommerce 3.00

This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.
10 years ago
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.
10 years ago
Bravo, sicuramente le tue indicazioni saranno di aiuto a qualcuno; di italiani non ce ne sono molti sul forum, ma qualcuno c'è.

luigi
10 years ago
depmar wrote:
Bravo, sicuramente le tue indicazioni saranno di aiuto a qualcuno; di italiani non ce ne sono molti sul forum, ma qualcuno c'è.

luigi


Grazie, purtroppo, come ho detto, sono ancora all'inizio nella comprensione di nopCommerce e addirittura di Asp.Net MVC, ma spero quanto prima di poter contribuire a condividere esperienze e soluzioni valide anche alla comunità italiana.
10 years ago
Grazie... di cuore speriamo di collaborare meglio e bene in futuro, facendo crescere l'aggregazione fra italiani.
10 years ago
La localizzazione in italiano esiste già.
10 years ago
biapar wrote:
La localizzazione in italiano esiste già.


Si ... è vero ... ed infatti nello step 1 consiglio di scaricare il languagepack presente sul sito di nopcommerce ... sono i punti successivi che, raccongliendo informazioni sparse in giro per la rete, mi hanno aiutato a localizzare alcuni aspetti del Backoffice quali:
1) l'orologio in alto a destra del backoffice,
2) la sostituzione del punto decimale con la virgola,
3) la formattazione italiana dei campi di tipo DateTimePicker.

All'appello mancano alcuni messaggi di validazione e alcuni automatismi dei componenti telerik come il popup dei filtri delle griglie e i pulsanti update e cancel quando si modifica direttamente in una griglia telerik ...

Forse per qualcuno più sembrare esagerato ma, visto che si può fare, mi ha fatto piacere condividerlo cercando così di raggruppare tutte le info in un solo topic.
10 years ago
Thank you very much.
It works well, but if you open the develop tools for chrome, you still can find an error like below:

Uncaught RangeError: Invalid language tag: 8/03/1982
10 years ago
centrecom wrote:
Thank you very much.
It works well, but if you open the develop tools for chrome, you still can find an error like below:

Uncaught RangeError: Invalid language tag: 8/03/1982


La soluzione, che per ora sembra funzionare, è quella di sostituire queste righe

1) var d = new Date();
    return this.optional(element) || !/Invalid|NaN/.test(new Date(d.toLocaleDateString(value)));


con questa sola riga

2) return this.optional(element) || !/Invalid|NaN/.test(new Date(Globalize.parseDate(value)));

il risultato finale è:

<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>
10 years ago
It works very well, thank you very much.
10 years ago
Ciao, grazie per il post, però non funzionano i campi con i prezzi.

Li hai testati? E' un problema solo mio?

Grazie.
This topic was automatically closed 365 days after the last reply. New replies are no longer allowed.