Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Πολυγλωσσική εφαρμογή με εναλλαγή γλωσσών σε runtime

Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 21-06-2005, 10:51. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-06-2005, 15:42 2895

    Πολυγλωσσική εφαρμογή με εναλλαγή γλωσσών σε runtime

    Γεια σας παιδιά !!!
    Ποιος είναι ο καλύτερος τρόπος να παρέξω στο GUI μου πολυγλωσσικότητα με δυνατότητα εναλλαγής γλωσσών σε runtime ας πούμε με τη χρήση ενός menu ;
    Πάνος Αβραμίδης
  •  17-06-2005, 16:17 2898 σε απάντηση της 2895

    Re: Πολυγλωσσική εφαρμογή με εναλλαγή γλωσσών σε runtime

    Κατ' αρχήν, την υποστηρίζεις στις φόρμες.

    Μετά:
    1. Δημιουργείς ένα configuration setting (έστω "UIlanguage") και το διαβάζεις στην αρχή (στην Main). Ρυθμίζεις το UI σου ώς εξής:

    try

       System.Configuration.AppSettingsReader asr
          = 
    new
     System.Configuration.AppSettingsReader();

       string UIlang = (string)asr.GetValue("UIlanguage",typeof(string));

       System.Threading.Thread.CurrentThread.CurrentCulture
          =
    new System.Globalization.CultureInfo(UIlang,true);

       System.Threading.Thread.CurrentThread.CurrentUICulture 
          =
    new System.Globalization.CultureInfo(UIlang,true);

    }
    catch
    {
       System.Threading.Thread.CurrentThread.CurrentCulture 
          = 
     new System.Globalization.CultureInfo("",true
    );

       System.Threading.Thread.CurrentThread.CurrentUICulture 
          =
    new System.Globalization.CultureInfo("",true);
    }

    2. Επίσης, χρειάζεσαι ένα ResourceManager, από τον οποίο θα φορτώνεις τα strings που χειρίζεσαι δυναμικά. Τον "παρκάρεις" σε μία public static μεταβλητή της κύριας φόρμας για να τον έχεις πρόχειρο. Δηλαδή:

    public static System.Resources.ResourceManager RM;

    RM = new System.Resources.ResourceManager(typeof(frmMain).Namespace 
        + ".strings", System.Reflection.Assembly.GetExecutingAssembly());

    Τα δυναμικά strings τα φορτώνεις με (παράδειγμα):
    string appTitle = frmMain.RM.GetString("appTitle");

    Η επιλογή στο μενού σου θα κάνει αντίστοιχα πράγματα με το #1. Τέλος, θα πρέπει να αποθηκεύεις την προτίμηση του χρήστη στο configuration (φόρτωμα του XML Document, SelectSingleNode κ.λπ.).

    Άρης


    Aris
  •  17-06-2005, 16:27 2899 σε απάντηση της 2895

    Re: Πολυγλωσσική εφαρμογή με εναλλαγή γλωσσών σε runtime

    Άρη ευχαριστώ θερμά Big Smile!!!
    Πάνος Αβραμίδης
  •  17-06-2005, 16:40 2900 σε απάντηση της 2898

    Re: Πολυγλωσσική εφαρμογή με εναλλαγή γλωσσών σε runtime

     Aris wrote:

    Κατ' αρχήν, την υποστηρίζεις στις φόρμες.

    Μετά:
    1. Δημιουργείς ένα configuration setting (έστω "UIlanguage") και το διαβάζεις στην αρχή (στην Main). Ρυθμίζεις το UI σου ώς εξής:

    try

       System.Configuration.AppSettingsReader asr
          = 
    new
     System.Configuration.AppSettingsReader();

       string UIlang = (string)asr.GetValue("UIlanguage",typeof(string));

       System.Threading.Thread.CurrentThread.CurrentCulture
          =
    new System.Globalization.CultureInfo(UIlang,true);

       System.Threading.Thread.CurrentThread.CurrentUICulture 
          =
    new System.Globalization.CultureInfo(UIlang,true);

    }
    catch
    {
       System.Threading.Thread.CurrentThread.CurrentCulture 
          = 
     new System.Globalization.CultureInfo("",true
    );

       System.Threading.Thread.CurrentThread.CurrentUICulture 
          =
    new System.Globalization.CultureInfo("",true);
    }

    2. Επίσης, χρειάζεσαι ένα ResourceManager, από τον οποίο θα φορτώνεις τα strings που χειρίζεσαι δυναμικά. Τον "παρκάρεις" σε μία public static μεταβλητή της κύριας φόρμας για να τον έχεις πρόχειρο. Δηλαδή:

    public static System.Resources.ResourceManager RM;

    RM = new System.Resources.ResourceManager(typeof(frmMain).Namespace 
        + ".strings", System.Reflection.Assembly.GetExecutingAssembly());

    Τα δυναμικά strings τα φορτώνεις με (παράδειγμα):
    string appTitle = frmMain.RM.GetString("appTitle");

    Η επιλογή στο μενού σου θα κάνει αντίστοιχα πράγματα με το #1. Τέλος, θα πρέπει να αποθηκεύεις την προτίμηση του χρήστη στο configuration (φόρτωμα του XML Document, SelectSingleNode κ.λπ.).

    Άρης



    Δεν έχω ξαναχρησιμοποιήσει Resource managers και config αρχεία για αυτό το λόγο.. Απλά αναφέρω την μάλλον ανορθόδοξη μεθοδολογία μου να κάνω ένα read από ένα πίνακα σε μία βάση, πριν "σηκώσω" κάποια φόρμα και να κρατάω το resultset σε ένα collection ....
    Δεδομένου ότι δεν είναι και τραγικός ο αριθμός των strings ανά φόρμα δεν αντιμετώπισα θέμα performance ... Τώρα αν αυξηθούν οι υποστηριζόμενες γλώσσες μάλλον θα σκουρήνουν τα πράγματα ...

    Αυτή η μεθοδολογία πως σου ακούγεται ;
    Πάνος Αβραμίδης
  •  17-06-2005, 19:09 2905 σε απάντηση της 2900

    Re: Πολυγλωσσική εφαρμογή με εναλλαγή γλωσσών σε runtime

     axaros wrote:

    Δεν έχω ξαναχρησιμοποιήσει Resource managers και config αρχεία για αυτό το λόγο.. Απλά αναφέρω την μάλλον ανορθόδοξη μεθοδολογία μου να κάνω ένα read από ένα πίνακα σε μία βάση, πριν "σηκώσω" κάποια φόρμα και να κρατάω το resultset σε ένα collection ....
    Δεδομένου ότι δεν είναι και τραγικός ο αριθμός των strings ανά φόρμα δεν αντιμετώπισα θέμα performance ... Τώρα αν αυξηθούν οι υποστηριζόμενες γλώσσες μάλλον θα σκουρήνουν τα πράγματα ...

    Αυτή η μεθοδολογία πως σου ακούγεται ;


    Ως προς το να κρατάς στην ΒΔ, τις ρυθμίσεις (ότι θα έμαπινε σε ένα config, ανά χρήστη) είναι μιά τεχνική που μπορεί να λειτουργήσει. Παλαιότερα, τα βάζαμε στο registry (στο HKCU hive τις ρυθμίσεις ανά χρήστη). Μπορείς και να τα βάλεις σε ένα binary serialized file στο MyDocuments του κάθε χρήστη. Όλα μπορούν να παίξουν Smile.

    Ως προς τα resources, καλύτερα να πας με ResourceManager. Φτιάχνεται με 2 γραμμές (δήλωση & κλήση constructor). Εξασφαλίζει:
    1. Θα σου φέρει το string (ή και άλλο resource) αυτόματα για το Culture που παίζει η εφαρμογή.
    2. Μπορείς να προσθέτεις cultures χωρίς recompilation.
    3. Δεν είσαι υποχρεωμένος να περνάς στην κλήση ανάκτησης το culture (κάτι που μπορεί να χρειστεί να κάνεις εάν τα παίρνεις από ΒΔ)
    4. Δεν αλλάζεις σχήμα σε ΒΔ (κάτι υποχρεωτικό για να προσθέσεις γλώσσα).

    Συμπέρασμα:
    - για τις ρυθμίσεις, ότι θέλεις. Πάντως, το .Net 2.0 θα έχει και γράψιμο (όχι μόνο διάβασμα) στο config, default values, αυτόματη υποστήριξη PerUser & PerApp settings. Άρα καλύτερα να το μάθεις...
    - για τα resources, μην ψάχνεις για ενναλακτικές, go by the book ...

    Άρης
    Aris
  •  21-06-2005, 10:51 2944 σε απάντηση της 2895

    Re: Πολυγλωσσική εφαρμογή με εναλλαγή γλωσσών σε runtime

    Άρη σε ευχαριστώ θερμά !!!
    Πάνος Αβραμίδης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems