Όταν δημιουργούμε ένα site του οποίου το περιεχόμενο θέλουμε να παρουσιάζεται σε περισσότερες από μία γλώσσες, το χαρακτηρίζουμε ως πολυγλωσσικό και χρειάζεται να εισάγουμε το περιεχόμενό μας με ένα τέτοιο τρόπο, που θα επιτρέπει την εύκολη μετάφρασή του.
Φυσικά καλό θα ήταν να αντιμετωπίζουμε ως πολυγλωσσικό, ακόμα και ένα site που το δημιουργούμε γνωρίζοντας πως θα παρουσιάζεται μόνο σε μία γλώσσα (πχ ελληνικά). Ο λόγος είναι απλούστατος και δεν είναι άλλος από το ότι πρέπει πάντα να δημιουργούμε τις προϋποθέσεις για μελλοντική επέκταση του site και σε άλλες γλώσσες.
Κατ' αρχήν ας προσδιορίσουμε όλες τις περιπτώσεις, όπου το περιεχόμενο σχετίζεται με την πολυγλωσσικότητα.
Η συνηθέστερη περίπτωση είναι η καταχώρηση περιεχομένου (πχ κάποιου άρθρου) από τον πίνακα διαχείρισης (Admin Panel). Ο web designer σ' αυτή την περίπτωση δεν έχει να ασχοληθεί με κάτι, αφού ο διαχειριστής του site, το μόνο που χρειάζεται να κάνει είναι να ενεργοποιήσει τις γλώσσες που επιθυμεί από το Admin Panel. Μετά από αυτή την ενέργεια, αυτομάτως οι φόρμες εισαγωγής δεδομένων θα μας παρέχουν τα αντίστοιχα πεδία για κάθε ενεργή γλώσσα.
Ας δούμε όμως τις περιπτώσεις που αφορούν τον δημιουργό του template (web designer) ή τον web developer που θα πρέπει να αντιμετωπίσει τα όποια πολυγλωσσικά θέματα εκτός template (για παράδειγμα στην δημιουργία κάποιου controller, module, plugin κλπ).
Το Odyssey χρησιμοποιεί για την μεταγλώττιση την μέθοδο key->value, δηλαδή την αντιστοίχιση μεταφράσεων σε εκφράσεις-κλειδιά της βασικής γλώσσας. Για παράδειγμα αν ως βασική γλώσσα θεωρούμε την ελληνική, και θέλουμε να μεταφράσουμε την έκφραση «όχι» σε αγγλικά και γερμανικά, το σύστημα θα αντιστοιχίσει στην συγκεκριμένη έκφραση-κλειδί τις μεταφράσεις «no» και «kein».
Αυτό έχει ως πλεονέκτημα το ότι μπορούμε να θεωρήσουμε ως βασική γλώσσα αυτήν που μας είναι πιο οικεία, και ο κώδικάς μας να περιέχει μόνο αυτές τις εκφράσεις-κλειδιά. Να σημειωθεί πως μια έκφραση-κλειδί μπορεί να αποτελείται από μία λέξη ή από ολόκληρη πρόταση!
Για να μεταγλωττίσει το Odyssey την έκφραση «όχι» χρησιμοποιεί την μέθοδο getText της class language. Επειδή όμως δεν είναι χρηστικό να γράφουμε συνεχώς στον κώδικά μας:
έχουμε στη διάθεση μας την συντόμευση t() από το αρχικό του translate.
Αν δηλαδή θέλουμε να χρησιμοποιήσουμε σε κάποιο σημείο του template μας την έκφραση «όχι» και να είμαστε σίγουροι πως θα μεταγλωττίζεται σωστά σε κάθε επιλεγμένη γλώσσα, αρκεί να γράψουμε σε php:
Να σημειωθεί πως η πλήρης σύνταξη της $language->getText() όπως και της t() είναι:
t("φράση προς μετάφραση", $langID, "context name");
Αν δεν δοθεί η langID (το συνηθέστερο), τότε θεωρείται αυτομάτως η τρέχουσα γλώσσα.
Το context name αφορά πιο σπάνιες περιπτώσεις όπου κάποια φράση κλειδί εμφανίζεται στο site μας περισσότερες από μία φορές αντιστοιχώντας σε διαφορετικές μεταφράσεις. Για παράδειγμα η φράση «τάξη» όπου σε κάποιο σημείο πρέπει να μεταφραστεί class και σε κάποια άλλη order.
Για την πρώτη μετάφραση (τάξη σχολείου) μπορούμε να χρησιμοποιήσουμε ως context name το school και να το συντάξουμε ως t("τάξη", $langID, "school").
Τι γίνεται όμως όταν θέλουμε να χρησιμοποιήσουμε μια έκφραση-κλειδί στα πεδία κειμένου των παραμέτρων ενός module;
Στην περίπτωση αυτή το μόνο που χρειάζεται είναι να περικλείσετε τις εκφράσεις-κλειδιά ανάμεσα σε {{ και σε }}.
Ας δούμε ένα παράδειγμα από περιεχόμενο html σε πεδίo κειμένου των παραμέτρων ενός module, το οποίο περιέχει τρεις προτάσεις που χρειάζεται να μεταγλωττίζονται:
{{Με το Odyssey CMS μπορεί ο καθένας να δημιουργήσει λειτουργικές ιστοσελίδες}}! <br>
{{Οι δυνατότητες είναι απεριόριστες και εξαρτώνται από το επίπεδο των γνώσεων σας}}.
<br>
{{Έτσι από τον απλό χρήστη έως τον έμπειρο developer, το σύστημα θα καλύψει τις αντίστοιχες ανάγκες}}...
</div>
Σε περίπτωση ενός js αρχείου που φορτώνεται από το σύστημα, υπάρχει η καθολική javascript function:
Μια τελευταία περίπτωση που μπορεί να μας απασχολήσει στα πολύγλωσσα sites, είναι οι εικόνες που περιέχουν θέμα εξαρτώμενο από την επιλεγμένη γλώσσα. Για παράδειγμα μπορεί να είναι κάποιο slogan με χαρακτηριστική γραφή, λογότυπα που πλαισιώνονται από προσδιορισμούς κλπ.
Στην περίπτωση αυτή έχουμε πάντα στη διάθεσή μας την καθολική (global) μεταβλητή $urlExtension. Αυτή περιέχει πάντα την επέκταση της κάθε γλώσσας σε μορφή όπως η _en. Τις επεκτάσεις των γλωσσών μπορείτε να τις δείτε στο Admin Panel στην ενότητα «ΔΙΑΧΕΙΡΙΣΗ ΓΛΩΣΣΩΝ->ΕΠΕΞΕΡΓΑΣΙΑ». Για την default γλώσσα (πχ ελληνικά) δεν χρειάζεται να ορίσουμε κάποια επέκταση.
Ο λόγος που η επέκταση αρχίζει με underscore ( _ ) είναι για να μπορείτε να την προσαρτάτε στο τέλος του ονόματος κάθε πολυγλωσσικής εικόνας. Ας δούμε το παράδειγμα μιας εικόνας στο template μας, και συγκεκριμένα του logo. Αν υποθέσουμε πως χρειαζόμαστε εκδόσεις της εικόνας σε ελληνικά, αγγλικά και γερμανικά, τα ονόματα των αρχείων αντίστοιχα θα πρέπει να είναι:
για ελληνικά logo.png (χωρίς κάποια γλωσσική επέκταση η εξ ορισμού γλώσσα)
για αγγλικά logo_en.png
για γερμανικά logo_de.png
Αφού δημιουργήσουμε όλες τις απαραίτητες εκδόσεις του logo, μπορούμε να αναφερόμαστε σ' αυτό μέσα στον κώδικα του template μας με:
Με τον τρόπο αυτό θα φορτώνεται κάθε φορά η κατάλληλη έκδοση της εικόνας ανάλογα την επιλεγμένη γλώσσα παρουσίασης. Η $p δεν χρειάζεται να σας μπερδεύει, απλά πρέπει να την χρησιμοποιούμε γιατί περιέχει την διαδρομή (path) προς τον φάκελο images του τρέχοντος template. Περισσότερα γι' αυτή, αλλά και για άλλες τέτοιες χρήσιμες μεταβλητές, θα αναλύσουμε στα άρθρα που αναφέρονται στην δημιουργία templates...