Come risolvere problema dei regional settings

di il
10 risposte

Come risolvere problema dei regional settings

Ciao,
sto sviluppando una windows application che dovrà essere distribuita in diversi siti operativi nel mondo; ho un serio problema che non riesco a risolvere: come posso fare in modo che i numeri reali inseriti in input possano essere interpretati correttamente a prescindere dai "regional settings" che l'utente ha sul suo pc? Ho provato ad utilizzare la classe CultureInfo ma credo di dimenticare qualche dettaglio, perchè ad esempio se inserisco 2,2 viene interpretato come 22.
Grazie 1000 a chi mi vorrà aiutare.
Francesco

10 Risposte

  • Re: Come risolvere problema dei regional settings

    Frank Metallo ha scritto:


    Ho provato ad utilizzare la classe CultureInfo ma credo di dimenticare qualche dettaglio [...]
    Posta il codice, altrimenti non possiamo capire cosa hai dimenticato o sbagliato.
  • Re: Come risolvere problema dei regional settings

    Ciao Marco,
    questa è la classe Program che parte all'inizio:

    static class Program
    {
    /// <summary>
    /// Punto di ingresso principale dell'applicazione.
    /// </summary>
    [STAThread]
    static void Main()
    {
    // force "Engligh United Kingdom culture"
    CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("en-UK");

    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new frmMain());
    }
    }

    Grazie infinite, gentilissimo.
    Francesco
  • Re: Come risolvere problema dei regional settings

    Così a prima vista, credo sarebbe sufficiente sostituire la cultura en-UK (che usa un separatore decimale diverso da quello italiano, mentre la virgola separa tipicamente le migliaia) con quella italiana, ossia it-IT, che mi pare sia quella che tu vuoi utilizzare.
    CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("it-IT");
    Ciao!
  • Re: Come risolvere problema dei regional settings

    Veramente no...a me conviene utilizzare quella anglosassone, cioè con il punto come separatore dei decimali, visto che l'applicazione verrà distribuita perlopiù all'estero, però ho visto che se ad esempio scrivo 2,2, anziché forzare il punto interpreta come 22
  • Re: Come risolvere problema dei regional settings

    Imposta "en-US" come cultura del tuo programma e poi usa .Replace(',', '.') sulle stringhe prima di convertirle in numero

    Ti perdi i separatori delle migliaia, ma solitamente la gente non li usa
  • Re: Come risolvere problema dei regional settings

    Frank Metallo ha scritto:


    Veramente no...a me conviene utilizzare quella anglosassone
    Se usi la convenzione anglosassone, ti devi adeguare a quello che dice la convenzione.

    Frank Metallo ha scritto:


    però ho visto che se ad esempio scrivo 2,2, anziché forzare il punto interpreta come 22
    Per forza: se la virgola venisse interpretata come un punto, sarebbe una violazione alle regole della convenzione che hai scelto, perché la virgola ha un significato ben preciso, ossia separare le migliaia, quindi di fatto - usando le regole UK - se la inserisci all'interno di un valore, questo viene ignorato perché ha un utilità prettamente grafica e visuale, legata alla leggibilità del numero.

    A mio avviso, ti conviene stabilire una "convenzione alternativa" da utilizzare all'interno del tuo programma, magari partendo da un CultureInfo.InvariantCulture, oppure sostituire il carattere con il separatore decimale, anche se mi pare una operazione un escamotage che alla lunga potrebbe comportare qualche problema, andando eseguito in ogni contesto necessario.

    Ciao!
  • Re: Come risolvere problema dei regional settings

    Grazie Marco, quindi io posso usare CultureInfo.InvariantCulture a prescindere dai regional settings locali e in questo modo il punto verrà sempre interpretato correttamente come separatore dei decimali?
  • Re: Come risolvere problema dei regional settings

    Frank Metallo ha scritto:


    quindi io posso usare CultureInfo.InvariantCulture a prescindere dai regional settings locali e in questo modo il punto verrà sempre interpretato correttamente come separatore dei decimali?
    No, quella potrebbe essere la base di partenza, oppure potresti partire dalla cultura UK, ma devi comunque customizzare il formato dei separatori dei decimali e dei gruppi, come nell'esempio di codice indicato nella documentazione ufficiale.

    Riassumendo, in un modo o nell'altro avrai un solo carattere (o sequenza di caratteri) che può fare da separatore delle migliaia (o di un gruppo, in senso generico) e da separatore dei decimali, rispettivamente.

    Se proprio vuoi far sì che la virgola o il punto si possano usare in modo intercambiabile, allora dovrai operare tu la sostituzione, in quanto questa convenzione non è utilizzata in nessuna cultura, quindi vale la .

    Quello che dico è... attenzione a creare queste "equivalenze", perché poi potrebbero esserci delle ambiguità, punti in cui la sostituzione viene dimenticata (quindi difformità di comportamento) e tutta una serie di altre problematiche che potrebbero risultare inferiori alla semplice forzatura dell'uso di un carattere solo e ben determinato per i decimali.

    Ciao!
  • Re: Come risolvere problema dei regional settings

    Se vuoi fare le cose per bene, metti l'iconcina con le bandierine per selezionare Culture e UICulture.

    Quanto acquisisci un numero, riconvertilo a stringa e mostra sulla textbox (o quello che è) il numero che hai davvero acquisito, così è trasparente per l'utente
  • Re: Come risolvere problema dei regional settings

    Ho risolto imponendo dall'inizio una "culture" alternativa, partendo da quella inglese ma eliminando la virgola, come mi avete suggerito.
    Grazie di cuore a tutti per l'aiuto!
Devi accedere o registrarti per scrivere nel forum
10 risposte