κατασκευή website με multilanguage

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
Άβαταρ μέλους
Lykos22
Δημοσιεύσεις: 89
Εγγραφή: 29 Μαρ 2011 16:28
Τοποθεσία: UK

κατασκευή website με multilanguage

Δημοσίευση από Lykos22 » 15 Απρ 2014 11:51

Πρόσφατα έτυχε και βρήκα κάπου το εξής σενάριο.

Ας πάρουμε τον πίνακα Posts (postID, title, content, date_published κλπ κλπ) στον οποίο αποθηκέυω κανονικά το περιεχόμενο ενός post στη default γλώσσα πχ ελληνικά.

Τώρα για τις υπόλοιπες γλώσσες έχω τον πίνακα post_translations. Έτσι η διαμόρφωση είναι ως εξής:

Κώδικας: Επιλογή όλων

πίνακας: Posts  // θα έχει τη default γλώσσα
------------------------
post_id
title
content
date_published
κλπ κλπ

πίνακας: Post_translations // θα έχει τις μεταφράσεις
---------------------------------------
post_trans_id
post_trans_title
post_trans_content
lang_id ή lang_code
Με αυτόν τον τρόπο, αν κατάλαβα σωστά, εαν έχεις ένα site το οποίο είναι πχ στα ελληνικά και αργότερα χρειαστεί να μπουν περισσότερες γλώσσες δεν χρειάζεται να αλλάξεις (εντελώς) το σχεδιασμό της βάσης σου και ενδεχομένως αρκετών γραμμών κώδικα που είχες ήδη γράψει.

Αυτό που μπορώ να υποθέσω όμως σε αυτή την περίπτωση είναι ότι "παίζεις" με if

Κώδικας: Επιλογή όλων

if($lang == 'gre'){ // default
    "SELECT `post_id`, `title`,  `content` FROM `posts`";
} else {
    "SELECT `post_trans_id` AS `post_id`, `post_trans_title` AS `title`, `post_trans_content` AS `content`  FROM `post_translations` WHERE `lang_code`= ". $lang;
}

Άβαταρ μέλους
korgr
Honorary Member
Δημοσιεύσεις: 5067
Εγγραφή: 07 Οκτ 2008 18:30
Τοποθεσία: Corinth
Επικοινωνία:

κατασκευή website με multilanguage

Δημοσίευση από korgr » 15 Απρ 2014 12:39

Το να αντιμετωπίσεις το θέμα της πολυγλωσσικότητας στα main tables του content είναι το ένα (και το εύκολο ζητούμενο).
Εκεί που αρχίζει το πραγματικό παιχνίδι είναι στα συνοδευτικά:
plugins
menus
theme texts
multilingual images

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

κατασκευή website με multilanguage

Δημοσίευση από geomagas » 15 Απρ 2014 13:16

Lykos22 έγραψε:Ας πάρουμε τον πίνακα Posts (postID, title, content, date_published κλπ κλπ) στον οποίο αποθηκέυω κανονικά το περιεχόμενο ενός post στη default γλώσσα πχ ελληνικά.
Στη θέση σου θα έφτιαχνα ένα πίνακα με τα στοιχεία του περιεχομένου που μένουν σταθερά ανεξάρτητα από τη μετάφραση (post id, author, pub date κλπ), και έναν άλλο με τα πεδία που εξαρτώνται από τη μετάφραση (title, content, lang κλπ).

Δεν θα θεωρούσα καμία μετάφραση σαν default, δεν θα είχα λόγο να κάνω κάτι τέτοιο.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

κατασκευή website με multilanguage

Δημοσίευση από jpk » 18 Απρ 2014 17:27

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

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

Ως εδώ κατανοητό ελπίζω ... πάμε λίγο παρακάτω το πως δένεις την ανεξάρτητη οντότητα που είναι π.χ. η σελίδα με μια συγκεκριμένη γλώσσα. Εδώ υπάρχουν πάρα πολλοί τρόποι ... Για παράδειγμα μπορεί οι διαθέσιμες γλώσσες να είναι fields σε ένα πίνακα και στο admin να φτιάχνεις ένα map για την συγκεκριμένη οντότητα (χρησιμοποιώντας το id αυτής και το id της γλώσσας) ... Αυτό είναι το πιο απλό.

Επειδή έχει πολύ παίξει το ενδεχόμενο πινάκων ή rows translations, να προβληματιστούμε όλοι αν αυτό έχει να κάνει όντως με την λογική ή με την δική μας ευκολία σε κάτι που ήδη έχουμε. Αν είναι το πρώτο μαζί σας αλλά αν είναι το δεύτερο μάλλον χρειάζεται προβληματισμός σε νέα πολύγλωσσα projects.

Άβαταρ μέλους
jpk
Δημοσιεύσεις: 441
Εγγραφή: 09 Μαρ 2011 21:17

κατασκευή website με multilanguage

Δημοσίευση από jpk » 18 Απρ 2014 17:49

Και πάω εκεί που έθεσε το θέμα ο kor (που είχε νόημα) με την λογική ότι έχω μια οντότητα που δεν εξαρτάται από γλώσσα.

multilingual images
// Ο "Σχιτζίδικος" τρόπος είναι να έχεις φακέλους ανά γλώσσα. Και όμως όσο ηλίθιο και να είναι κάποτε το έκανα... Ο τρόπος είναι να έχεις ένα repository για τις εικόνες που εξαρτώνται από τον διαχειριστή ή από τους χρήστες αυτού (όχι με το layout ή διαφορετικά με την κεντρική δομή της εφαρμογής – site) . Το δέσιμο με την εφαρμογή είναι ένα table repository με cause και system_id και φυσικά reference_id. Όλα αυτά δένουν με τον φάκελο repository που έχει τις εικόνες και τις τραβάς απο εκεί αναλόγως τι ερωτήσεις κάνεις και τι απαντήσεις έχεις απο τον πίνακα repository. (Η επιλογή να τα έχεις σε εξωτερικό φάκελο συνδεδεμένο είναι κακή ... αλλά με όλα τα test που έχω κάνει δεν είναι σε θέση η βάση (MySQL) να φιλοξενήσει τόσα data εύκολα σε blob ... ακόμα.

plugins 
// Αν μιλάμε για client side plugins μπορείς εύκολα να δώσεις συναρτησιακά το τι φορτώνουν μέσα από την PHP. ΠΧ η PHP βγάζει σε JavaScript zl = el; Αυτό μπορεί να σημαίνει για την JavaScript ότι ότι φορτώσει ασύγχρονα θα είναι σε ελληνικά ή ακόμα καλύτερα για ότι έχει ήδη language μέσα του να βάζει ελληνικά.
Από την άλλη αν αναφέρεσαι σε plugins server side εκεί θα έλεγα ότι δεν θα έπρεπε να έχουν να κάνουν σε τίποτα με το view. Πχ το SES της Amazon ή κάποιο plugin για αποστολή SMS ... αυτά είναι operation layer ... (model Utils) και αν θες να έχεις μηνύματα διαφορετικά ανά γλώσσα μπορείς να χρησιμοποιείς αρχεία properties.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 1 επισκέπτης