Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας,

έστω ότι έχω φτιάξει την κλάση

 

>
import java.util.ListResourceBundle;

/**
*
* @author pbp
*/
public class Localization_en extends ListResourceBundle{
   
   private Object[][] contents = {
       {"charset", "Cp1252"},
       {"sayhello", "Hello my friends!"},
       {"how", "How are you today?"},
   };
   
   @Override
   protected Object[][] getContents() {
       return contents;
   }
}

 

και την χρησιμοποιώ κατάλληλα σε ένα πρόγραμμα για να τυπώνω μηνύματα στην οθόνη ανάλογα με τη γλώσσα που επιλέγει ο χρήστης στην αρχή του προγράμματος (στην προκειμένη περίπτωση Αγγλική).

 

Θα μπορούσατε να μου πείτε πως μπορώ να φτιάξω μια υπερκλάση αυτής της κλάσης ώστε οποιοσδήποτε να μπορεί να κληρονομήσει αυτή την υπερκλάση με σκοπό να φτιάξει μία παραλλαγή του προγράμματος που έχω κάνει στη δική του γλώσσα?

 

Ευχαριστώ.

Δημοσ.

Γιατί δεν δοκιμάζεις να φτιάξεις ένα interface με τις μεθόδους που θέλεις; Θα μπορείς να το χρησιμοποιείς σε όποια κλάση θέλεις, ακόμα και σε αυτές που έχουν ήδη κληρονομήσει από κάποια άλλη κλάση (γιατί στη java μια κλάση μπορεί να κληρονομήσει μόνο από μια άλλη).

Δημοσ.

Γιατί δεν δοκιμάζεις να φτιάξεις ένα interface με τις μεθόδους που θέλεις; Θα μπορείς να το χρησιμοποιείς σε όποια κλάση θέλεις, ακόμα και σε αυτές που έχουν ήδη κληρονομήσει από κάποια άλλη κλάση (γιατί στη java μια κλάση μπορεί να κληρονομήσει μόνο από μια άλλη).

 

Το σκέφτηκα αλλά έχω κολλήσει σε 2 πράγματα:

 

1) η συγκεκριμένη κλάση είναι λίγο περίεργη γιατί άμα πρόσεξες δίνω τιμές στον πίνακα Object έξω από κάποια μέθοδο.

Συνεπώς πως μπορώ να το κάνω αυτό με interface?

2) Αν κάποιος αποφασίσει να κληρονομήσει από το interface που θα κάνω πώς θα ξέρει τι πρέπει να βάλει σε αυτές τις θέσεις του πίνακα οι οποίες πρέπει να είναι ίδιες για κάθε κλάση Localization (charset,sayhello,how στη συγκεκριμένη περίπτωση) ώστε να δουλέψει σωστά το πρόγραμμα?

Δημοσ.

Γιατί χρειάζεται αυτό που λες;

 

Αφού η ListResourceBundle υπαγορεύει ότι θα επιστρέφεται ένας Object[][]

 

Έχω πει παραπάνω γιατί το χρειάζομαι :/

Εσύ τι εννοείς μ αυτό?

Δημοσ.

Εσύ θες με κάποιο τρόπο να καθορίσεις ότι ο άλλος θα φτιάξει ενα

 

>
private Object[][] contents = {
       {"charset",  "xxx"},
       {"sayhello", "xxx"},
       {"how",      "xxx"},
   };

 

οπου θα έχει οπωσδήποτε τις τιμές "charset","sayhello","how" στην πρώτη στήλη;

 

Η απλά οτι θα επιστρέψει κάποιο Object[][];

 

Το δεύτερο γίνεται έτσι κι αλλιώς απο την κλάση που κάνεις extend.

 

Τωρα, αν θες το πρώτο, δεν ξέρω πόσο εύκολα γίνεται. Ενδεχομένως να θέλει μπόλικη δουλειά.

 

Ψάξε όμως έτοιμες λύσεις σε σχέση με το resourcing για γλώσσες. Σίγουρα θα υπάρχουν πολλοί έτοιμοι τρόποι.

Δημοσ.

Εσύ θες με κάποιο τρόπο να καθορίσεις ότι ο άλλος θα φτιάξει ενα

 

>
private Object[][] contents = {
       {"charset",  "xxx"},
       {"sayhello", "xxx"},
       {"how",      "xxx"},
   };

 

οπου θα έχει οπωσδήποτε τις τιμές "charset","sayhello","how" στην πρώτη στήλη;

 

Η απλά οτι θα επιστρέψει κάποιο Object[][];

 

Το δεύτερο γίνεται έτσι κι αλλιώς απο την κλάση που κάνεις extend.

 

Τωρα, αν θες το πρώτο, δεν ξέρω πόσο εύκολα γίνεται. Ενδεχομένως να θέλει μπόλικη δουλειά.

 

Ψάξε όμως έτοιμες λύσεις σε σχέση με το resourcing για γλώσσες. Σίγουρα θα υπάρχουν πολλοί έτοιμοι τρόποι.

 

Το πρώτο θέλω :(

έψαξα αλλά δυστυχώς δεν βρήκα κάτι.

 

Όποιος βρει κάτι ας το αναφέρει εδώ παρακαλώ :)

Δημοσ.

Νομίζω ότι δυσκολεύεις πολύ τη ζωή σου (και τη ζωή αυτών που θα ήθελαν να μεταφράσουν την εφαρμογή σου -- καθώς τους αναγκάζεις να γράψουν μία ολόκληρη κλάση για να μεταφράσουν την εφαρμογή, και μετά θα πρέπει να την μεταγλωττίσουν πάλι).

 

Μία χειροποίητη λύση είναι η εξής:

 

1. Για κάθε γλώσσα δημιουργείς ένα αρχείο που έχει την εξής μορφή:

 

>
key: translation
key: translation

 

όπου key είναι τα κλειδιά σου (charser, sayhello, how) και translation οι αντίστοιχες «μεταφράσεις» στη γλώσσα που σε ενδιαφέρει (από τις πρώτες «:» μέχρι το τέλος της γραμμής).

 

2. Στο πρόγραμμά σου δημιουργείς ένα HashMap<String, String> στο οποίο αποθηκεύεις τα ζεύγη διαβάζοντάς τα από το αρχείο, και από το οποίο τα διαβάζεις όταν τα χρειάζεσαι. Μάλιστα αν εσύ έχεις ως προκαθορισμένη γλώσσα π.χ. τα Αγγλικά, στα οποία έχεις όλα τα strings του προγράμματος, διαβάζοντας ένα νέο αρχείο γλώσσας αντικαθιστάς μόνο αυτά που έχουν μεταφραστεί και για τα υπόλοιπα σου μένουν τα αγγλικά.

 

Με αυτό τον τρόπο χρειάζεται απλώς να ξέρεις το όνομα του αρχείου που περιέχει τις μεταφράσεις για κάποια γλώσσα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...