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

 

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

Localization

Îåêßíçóå áðü ôï ìÝëïò Main. Τελευταία δημοσίευση από το μέλος thAAAnos στις 25-09-2006, 14:17. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  03-03-2005, 20:20 1343

    Localization

    Θα ήθελα την συμβουλή σας σε κατι που ειναι πολύ της μόδας τελευταία.
     Πολυγλωσσικότητα!

    Εχω βγάλει τα ματακια μου γυρίζοντας το συνεχές εργο "Coffee Nights" και εχω βρεί το ζευγος Resourcemanager + Resource files.
     Μεχρι εδώ ας πούμε οτι είναι ok.
    Εχω ένα αρχείο για κάθε φόρμα ή ενα για τα μπορώ να αντλω τα μηνύματα για τυχόν exceptions ή απλα μηνύματα. π.χ. θελεις να κάνεις αυτό ? σε ενα MessageBox.


    Το μεγα μου θέμα είναι τα : MENUS!

    Μπορώ μια χαρα να εχω το αντιστοιχο resx αρχείο για κάθε φόρμα αλλα αν αλλαξει κάτι στο neutral culture resx αρχείο εγω θα πρέπει να κανω μαγικά για να μεταφέρω τa xml tags που δηλώνουν το μενού στα αντιστοιχα αρχεία γλωσσων.
    (Πράγμα που δεν το εχω κάνει).

    Α! και αυτα τα μενού εγω θα πρέπει να να τα διαχειρισθω  για θεματα ασφαλειας , ποιος χρήστης βλεπει τί , και αλλα τέτοια.
    απο ενα γρηγορο πέρασμα που έκανα στο mainmenu (να το πω collection?)
    είδα οτι δεν έχει καποιο property για να το συνδεσω εύκολα με το αντιγραφο του σε μια βάση (sql, oracle) μόνο το index ισως. θα βόλευε και το όνομα του αλλα στα menuitems δεν βρήκα κατι που να εχει property .name
    Για το τέλος δουλευω με Vb.net 2003 

    (Ψιτ και μην ακουσω για τα Ελληνικά μου! είμαι ευαίσθητος!)
    Thanks
      
  •  03-03-2005, 21:45 1346 σε απάντηση της 1343

    Re: Localization

    Λοιπόν, δεν κατάλαβα τί προσπαθείς να κάνεις.
      Πρώτα απ' όλα, τί πρόβλημα υπάρχει να χρησιμοποιήσεις το συνηθισμένο τρόπο localization? Εντάξει, για τα μηνύματα πρέπει να χρησιμοποιήσεις resource files, αλλά για τα μενού, κουμπιά, γενικά controls στη φόρμα, το μόνο που έχεις να κάνεις είναι να αλλάξεις το Localizable property της φόρμας σε True και να επιλέξεις τη γλώσσα για την οποία θέλεις να γράψεις τα νέα strings. Μετά πας σε κάθε control, μενού, κλπ. και γράφεις το string που θες. Το Visual Studio θα τα αποθηκεύσει όλα σε ξεχωριστό resource αρχείο και θα φτιάξει τον κατάλληλο κώδικα για να το φορτώσει στο InitializeComponents. Για να δεις όλα τα resource αρχεία, πάτα το κουμπί "Show All Files" στο Solution Explorer.

    Όσο για το .Name ... είναι περίεργο, αλλά δεν υπάρχει εύκολος τρόπος να κάνεις αυτό που θες. Τίποτα όμως δεν είναι αδύνατον αν ... το σκεφτείς λίγο ανάποδα![8-|] Βλέπεις τα menu items είναι fields της φόρμας. Οπότε, χρησιμοποιώντας reflection μπορείς να τα βρεις αν ξέρεις το όνομα τους.

    Αν για παράδειγμα η φόρμα σου έχει ένα μενου με το όνομα menuItem1, μπορείς να αλλάξεις το visibility με τον παρακάτω κώδικα:

    using System.Reflection;

    ...

    FieldInfo fi=
    this.GetType().GetField("menuItem1",BindingFlags.NonPublic| BindingFlags.Instance);
    MenuItem mi=(MenuItem)fi.GetValue(
    this);
    mi.Visible=!mi.Visible;


    Τέλος, όσον αφορά τα Ελληνικά. Εξαρτάται από το τί απάντηση περιμένεις. Κατάλαβα το δεύτερο κομμάτι της ερώτησής σου, αλλά για το πρώτο Tongue Tied. Αν δεν το πέτυχα, θα πρέπει να περιγράψεις καλύτερα τί θέλεις.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  04-03-2005, 14:10 1351 σε απάντηση της 1343

    Re: Localization

    ΩΩΩΩΩΩΩωωωω!!!!!!!
    θα σου πω πως το έκανα εγω.Αφου φτιάξω την φόρμα  μετα κανω copy το αντιστοιχο .resx αρχείο manual προσθετοντας το locale 
    π.χ Φτιαχνω την φόρμα  AdminLogin αφου την παιδέψω και δω οτι είναι οκ κανω την παραπαμω διαδικασία manual. AdminLogin.resx ->AdminLogin.El.Resx , AdminLogin.Fr.Resx AdminLogin.De.resx Και εδω ήταν που περιεγραψα οτι είιναι πακέτο οι αλλαγές και αλλα τέτοια συναφή. Με έσωσες απο πολύ χρόνο απο κάτι που θα ανακάλυπτα ποιος ξερει μετα απο πόσο καιρό. Υπαρχει και η περίφημη έκφραση RTFM. (Το λεω για εμένα)

    Για να σε διαφωτήσω όσο αναφορά  Embarrassed το personaliazation σε επίπεδο μενού απο την πλευρα της ασφάλειας της εφαρμογής.
    Η εφαρμογή θα πρεπει να υποστηρίζει πολλαπλα σενάρια ασφαλείας.Π.Χ
    ο χρηστης 1 θα πρεπει να εχει ενεργό το μενου ταδε , ταδε και ταδε, Ενω ο χρηστης 2 θα πρεπει να εχει το μενου ταδε  και την επιλογή ταδε μονο.

    Αρα εγώ ο δύσμοιρος θα πρέπει να περάσω σε μια βάση το μενου tree και την πρόσβαση του καθε χρήστη για κάθε μενού ή template, role αν πρωτιμάς.
    Και αυτο θα πρεπει να το χειρίζεται ο ταδε διαχειριστης της εφαρμογής.

    Το πρόβλημα ξεκινα στο οτι τα menuitems αν δεν τα ξερεις εχεις πρόβλημα να τα αναγνωρίσεις , με κάποιο τρόπο το ξεπερνάς αυτο αλλά θα είναι προβληματικό σε upgrades και σε αλλαγές.
    π.χ έχεις  μια ρουτίνα στην εφαρμογή σου που σου κάνει export το schema του μενού και έχεις
    MainMenu
       Menuitem1
             MenuItem2
                MenuItem3
       MenuItem4
          MenuItem5
             MenuItem6
             MenuItem7
             MenuItem8
             MenuItem9
       MenuItem10
          MenuItem11

    Απο όσο εψαξα το mainMenu εχει ενα collection Μenuitems τα οποία με την σειρά τους μπορεί να έχουν και αυτά άλλα menuitems

    Το να το  καταχωρήσεις σε μια βαση και να το  συνδεσεις με ενα πίνακα με rights απο τους χρήστες (sql ή της εφαρμογής ) ειναι οκ, όταν θα προσθέσεις ενα menu ή αλλαξεις εσυ ή καποιος συνάδελφος το όνομα του μενού τότε εχασες την μπαλα. ή κανω λάθος ?
    (Η σκέψη είναι να μπορείς δυναμικά να καταγράφεις το μενου σε μια βάση καταγράφωντας το όνομα του μενού Item exp mainuitem1. ωστε ακόμα και να αλλαξεις κατι να μπορεις να βρείς ακρη , ισως με το index αλλα δεν είναι πολύ διακρητό και ειδικά σε εφαρμογή με πολυγλωσσικότητα.

    (Ελπιζω να έδωσα ικανοποιητικές διευκρινίσεις)



             




  •  04-03-2005, 15:35 1352 σε απάντηση της 1351

    Re: Localization

    Α-Ο-Υ-Τ-Σ! Αυτό είναι μανίκι!

    Μου φαίνεται ότι έχεις δύο επιλογες:
    1. Προσέχετε να μην πειράζετε τα μενού χωρίς να ανανεώνετε και τη βάση. Πονάει, αλλά είναι η πιο απλή λύση.
    2. Θα πρέπει να αντιστρέψεις τη λογική των μενού. Αντί να προσπαθείς να βρεις τα μενού που πρέπει να εμφανίσεις ή να διαγράψεις, θα πρέπει να κρατάς σε μια λίστα το μενού και την κατάστασή του (ενεργοποιημένο κλπ.) Δες αυτό το άρθρο στο MSDN, http://msdn.microsoft.com/msdnmag/issues/02/10/CommandManagement/, το οποίπ περιγράφει πως να κάνεις αυτή τη δουλειά για menuitems και toolbars ταυτόχρονα. Δημιουργεί μια κλάση CommandManager η οποία περιέχει αντικείμενα Commands. Το κάθε αντικείμενο Command περιέχει την μέθοδο που θα εκτελέσει και τα Menuitems ή toolbar buttons στα οποία αντιστοιχεί. Έτσι, αν αλλάξει το Enabled property ενός Command, αυτόματα αλλάζει και το Enabled property των menuitem και toolbarbutton.
    Οι αντιστοιχίες ορίζονται όπως στον παρακάτω κώδικα:

    private void InitializeCommandManager() 
    {
    cmdMgr = new CommandManager();
    cmdMgr.Commands.Add( new Command( "EditCopy",
             new Command.ExecuteHandler(OnCopy),
             new Command.UpdateHandler(UpdateCopyCommand)));
        cmdMgr.Commands["EditCopy"].CommandInstances.Add(
             new Object[]{mnuEditCopy, tlbMain.Buttons[4]});
    }






    Μετά μπορείς να αλλάξεις την κατάσταση ενός command απλά με:





    cmdMgr.Commands["EditCopy"].Enabled=false;






    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-03-2005, 01:32 1370 σε απάντηση της 1343

    Re: Localization

    Έχεις δει το MM .NET framework της Oaksleaf?

    Mere Mortals .NET is designed from the ground up for creating applications that can be multi-lingual. You can even provide end-user access to our intuitive language tools, allowing them to add their own new languages and provide translations for existing text. This feature can also be used to provide variations of text in a single language. This is useful in vertical or horizontal market applications when you want to vary label text, messages, and so on.

    http://www.oakleafsd.com/

    Andreas Tsouchlaris
    My Blog / dotNetZone.gr / autoexec.gr
  •  25-09-2006, 14:17 17148 σε απάντηση της 1343

    Απ: Localization

    Προσοχή όμως στην ασφάλεια !!

    Το ότι ενα κουμπί ή μενού είναι disabled δεν σημαινει ότι δεν μπορείς να

    το πατήσεις ( αν είσαι αποφασισμένος... )

    Το αν καποιος δεν μπορεί ή δεν πρέπει να κάνει κάτι δεν πρέπει

    να ελέγχεται από το gui αλλα από το logic

    Το αναφέρω γιατι την ειχα πατήσει και το θυμαμαι ακόμα ...
    ->Hail Eris All Hail Discordia<-
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems