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

Δημιουργία δίγλωσσου site


djargad

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

Δημοσ.

Καλημέρα,

Θέλω να φτιάξω ένα δυναμικό site από την αρχή το οποίο να είναι σε ελληνικά και αγγλικά. Φαντάζομαι ότι οι δύο τρόποι αποθήκευσης των δεδομένων στη βάση είναι οι εξής

1)Οι πίνακες των δεδομένων έχουν στήλες για τα ελληνικά και τα αγγλικά (πχ PROD_DESCR_GR, PROD_DESCR_EN)

 

2)θα έχω 2 βάσεις μία για κάθε γλώσσα και ανάλογα με την επιλογή θα συνδέομαι σε όποια χρειάζεται.

 

Το ερώτημα είναι ποιός είναι ο πιό επαγγελματικός τρόπος ή μήπως υπάρχει και κάποιος τρόπος που δεν ξέρω; Φαντάζομαι βέβαια ότι ο δεύτερος από τους τρόπους που ανέφερα μου δίνει και την ευκαιρία να προσθέσω εύκολα και 3η γλώσσα αν ποτέ χρειαστεί.

Δημοσ.

Και γιατί να έχεις 2 βάσεις και όχι μία με Collation utf8 όπου μπορείς να έχεις όσες γλώσσες θές ???

 

και ούτε καν 2 πίνακες αλλά 1 για κάθε τύπο αντικειμένου

Δημοσ.

Μεγάλο θέμα ανοίγεις...τέλος πάντων. Αρχικά δεν χρειάζεται να έχεις 2 βάσεις, μπορείς κάλλιστα όπως ανέφερε ο yourse.gr να έχεις κωδικοποίηση utf8 στη βάση ΚΑΙ στα αρχεία σου ΚΑΙ στο HTML encoding και να μην έχεις πρόβλημα. Οπότε το (2) το απορρίπτουμε. Τώρα σχετικά με το (1), υπάρχουν πολλοί τρόποι:

a) O quick and dirty τρόπος είναι αυτός που περιγράφεις, απλά για κάθε text πεδίο βάζεις και το αντίστοιχο στα Αγγλικά και ανάλογα τη γλώσσα εμφανίζεις το ανάλογο

B) Έχεις ένα πίνακα πχ για τα προϊόντα στο οποίο υπάρχουν τα βασικά στοιχεία του προϊόντος και έχεις ένα detail πίνακα που έχει μόνο τα πεδία που αφορούν τη γλώσσα με σήμανση ποια γλώσσα αφορά το κάθε row

c) Έχεις μόνο ένα πίνακα όπου απλά ορίζεις το περιεχόμενο σε τι γλώσσα είναι (σε περίπτωση που είναι ανεξάρτητο το περιεχόμενο από γλώσσα σε γλώσσα)

Αυτά προς το παρόν

Δημοσ.

Τι σου προτείνω (γλώσσα php).

Για τη βάση:

Ένα πίνακα για τα προϊόντα που να περιέχει ελληνική και αγγλική ονομασία και περιγραφή. Ανάλογα τι γλώσσα απεικονίζεις, απεικονίζεις την ίδια εικόνα αλλά διαφορετική περιγραφή. Αργότερα, αν θες να προσθέσεις τρίτη γλώσσα, απλά προσθέτεις επιπλέον στήλη με (π.χ.) γερμανική περιγραφή.

 

Για το site:

Να έχεις ένα η περισσότερα αρχεία γλώσσας που να έχουν ονομασία ανάλογη της γλώσσας, π.χ. store_gr.php και store_en.php και ανάλογα με τι γλώσσα έχεις στο site, να χρησιμοποιείς το ανάλογο αρχείο. ΕΝΤΟΣ του κάθε αρχείου έχεις με constants μεταβλητές σαν την παρακάτω:

Στο ελληνικό

>  define('TEXT_BUY', 'Αγορά');
 define('TEXT_UPD', 'Ανανέωση');

και στο αγγλικό

>  define('TEXT_BUY', 'Buy');
 define('TEXT_UPD', 'Update');

Εντός της ιστοσελίδας, εκεί που θες να εκτυπώνει την κατάλληλη φράση, γράφεις

><?php echo TEXT_BUY; ?>

και θα εκτυπωθεί το σωστό κείμενο. Αν αργότερα θες να βάλεις άλλη γλώσσα, απλά φτιάχνεις και το store_ge.php και είσαι σχεδόν έτοιμος.

Δημοσ.

Θα συμφωνήσω με τον isay σε ότι είπε.

 

Και το καλύτερο είναι όταν κάνεις ένα query στην βάση τα αποτέλεσματα να μην τα τραβάς έτσι

>
$name = $row[3];

 

αλλά να βάζεις το όνομα της στήλης από τον πίνακα

>
$name = $row['name'];

 

Το παραπάνω βοηθάει σε περίπτωση που αλλάξεις την δομή του πίνακα για τον Α,Β,Γ λόγο να μην "χαλάνε" και τα queries σου

Δημοσ.
σε τι γλωσσα θα το φτιαξεις? θα χρησιμοποιησεις cms?

 

Σε php και το site δεν θα είναι σε cms. Επίσης προς αποφυγή παρεξηγήσεων δεν φτιάχνω κάποιο e-shop, απλά ανέφερα τα προϊόντα ως παράδειγμα.

 

Τώρα σχετικά με αυτά που είπε ο alexanr0s

 

B) Έχεις ένα πίνακα πχ για τα προϊόντα στο οποίο υπάρχουν τα βασικά στοιχεία του προϊόντος και έχεις ένα detail πίνακα που έχει μόνο τα πεδία που αφορούν τη γλώσσα με σήμανση ποια γλώσσα αφορά το κάθε row

c) Έχεις μόνο ένα πίνακα όπου απλά ορίζεις το περιεχόμενο σε τι γλώσσα είναι (σε περίπτωση που είναι ανεξάρτητο το περιεχόμενο από γλώσσα σε γλώσσα)

 

Για το B) σαν σήμανση εννοείς ότι θα έχω μια στήλη πχ LANG που θα είναι σαν ID για την γλώσσα;Για το c) μπορείς να είσαι λίγο πιο αναλυτικός;

 

Και σε σχέση με τον isay

Τι σου προτείνω (γλώσσα php).

Για τη βάση:

Ένα πίνακα για τα προϊόντα που να περιέχει ελληνική και αγγλική ονομασία και περιγραφή. Ανάλογα τι γλώσσα απεικονίζεις, απεικονίζεις την ίδια εικόνα αλλά διαφορετική περιγραφή. Αργότερα, αν θες να προσθέσεις τρίτη γλώσσα, απλά προσθέτεις επιπλέον στήλη με (π.χ.) γερμανική περιγραφή.

 

Αυτό που περιγράφεις είναι το ίδιο με το δικό μου 1) στο πρώτο post;

 

 

Και κάτι τελευταίο ψιλοάσχετο με τις αρχικές μου ερωτήσεις. Για να είναι τα links της μορφής ..../gr/index.php 'η .../en/index.php θα πρέπει αναγκαστικά να είναι σε διαφορετικούς φακέλους τα αρχεία;

Δημοσ.

...Αυτό που περιγράφεις είναι το ίδιο με το δικό μου 1) στο πρώτο post;...

Ναι

 

...Και κάτι τελευταίο ψιλοάσχετο με τις αρχικές μου ερωτήσεις. Για να είναι τα links της μορφής ..../gr/index.php 'η .../en/index.php θα πρέπει αναγκαστικά να είναι σε διαφορετικούς φακέλους τα αρχεία;

Ναι.

Αν το κάνεις όπως στο περιγράφω (εκεί που λεω Για το site:) δε χρειάζεσαι καθόλου gr και en φακέλους. Χρειάζεσαι ένα και μοναδικό index.php

Δημοσ.

Ή μπορείς να κάνεις και αυτό.

 

Table `products`

 

------------------------------

| p_id | lang | c_id |

------------------------------

| 1 | en | 1 |

| 1 | gr | 2 |

------------------------------

 

και Table `contents`

 

---------------------------------

| c_id | content |

---------------------------------

| 1 | This is english |

| 2 | Αυτό ελληνικά |

---------------------------------

 

και τα πέρνεις με " SELECT `p_id`,`content` FROM `products` INNER JOIN `contents` ON `products`.`c_id`=`contents`.`c_id` WHERE `p_id`='1' AND `lang`='en' "

 

και μπορείς να έχεις όσες γλώσσες θέλεις χωρίς να χρειάζεται να προσθέτεις τίποτα στο schema της βάσης

Δημοσ.
Σχετικά με το SELECT με INNER JOIN είναι πιο γρήγορο από το να κάνω 2 SELECT και να κάνω σύγκριση με php;;

 

Δεν είμαι σίγουρος ότι κατάλαβα τι εννοείς αλλά αν εννοείς αυτό

 

>
$q = mysql_query("SELECT `c_id` FROM `products` WHERE `p_id`=1 AND `lang`='en'");
$q = mysql_fetch_assoc($q);
$q = mysql_query("SELECT `content` FROM `contents` WHERE `c_id`='{$q['c_id']}'");
$q = mysql_fetch_assoc($q);

 

τότε αυτό είναι σαφώς πιο γρήγορο

 

>$q = mysql_query("SELECT `contents`.`content` FROM `products` INNER JOIN `contents` ON `products`.`c_id`=`contents`.`c_id` WHERE `p_id`='1' AND `lang`='en'");
$q = mysql_fetch_assoc($q);

 

Γενικά αν εξεραίσουμε πολύ σπάνιες περιπτώσεις ( δεν μπορώ να σκεφτώ και καμία για να σου πω την αλήθεια ) ότι μπορεί να το κάνει η βάση μην το κάνεις στο δικό σου πρόγραμμα και ασε να το κάνει η βάση.

Δημοσ.

Δεν μας είπες σε τι πλατφόρμα θα το φτιάξεις.

 

Ο βέλτιστος τρόπος αποθήκευσης εξαρτάται από το μέγεθος των πεδίων που θα είναι σε δύο γλώσσες καθώς και από τα δεδομένα που θα αποθηκεύεις για κάθε αντικείμενο.

 

Από προσωπική εμπειρία σε ASP.NET, πέρα από την βάση δεδομένων με τα resx files μπορείς να μεταγλωττίσεις το site σε όσες γλώσσες θέλεις με ελάχιστο κόπο.

Δημοσ.
Δεν μας είπες σε τι πλατφόρμα θα το φτιάξεις.

 

Ναι όντως παράβλεψη

Μιλάω για php 5.2 και mysql 5.0. Έχω καλυφθεί πάντως από τις απαντήσεις

Δημοσ.

Μια τελευταία (; ) ερώτηση. Τη μεταβλητή της γλώσσας (πχ lang_id) να την μεταφέρω με cookie; δεν θέλω να την μεταφέρω με get (πχ index.php?lang_id=en) . Υπάρχει τρόπος να την κάνω post χωρίς να την έχω σε φόρμα; Βέβαια σε αυτή την περίπτωση θα υπάρχει θέμα όταν θα κάνει κάποιος back στη σελίδα.

Αρχειοθετημένο

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

  • Δημιουργία νέου...