Μετάφραση μηνυμάτων με Yii::t()

Καλησπέρα!

Έχει δοκιμάσει κανείς να χρησιμοποιήσει την μετάφραση μηνυμάτων μέσω της μεθόδου Yii::t() ?

Το δοκίμασα σήμερα ακολουθώντας οδηγίες από το άρθρο

http://www.yiiframework.com/wiki/26/

και δουλεύει μεν αλλά τα ελληνικά μηνύματα εμφανίζονται κινέζικα!!

(τα αρχεία στο φάκελο με τα ελληνικά μηνύματα είναι αποθηκευμένα σε UTF8)

Καμιά ιδέα?

To Yii::t πλέον το χρησιμοποιώ by default σε όλα τα strings κειμένου και λειτουργεί μια χαρά αλλά ως component διάλεξα το CDbMessageSource, δηλαδή τα αποθηκεύω όλα στη βάση δεδομένων που είναι σεταρισμένη σε UTF-8.

Αυτό πέρα από άλλα πλεονεκτήματα με απαλλάσσει από το άγχος του encoding του PHP αρχείου. Εφόσον όλα μέσα στο source code, στο .php αρχείο είναι γραμμένα στα αγγλικά μειώνεται η πιθανότητα να συμβούν προβλήματα συμβατότητας.

Αν τελικά χρησιμοποιήσεις το CDbMessageSource ίσως ενδιαφέρεσαι να βοηθήσεις στην κατασκευή ενός μικρού module που φτιάχνω εδώ on the side, και θα χειρίζεται με απλό τρόπο όλες αυτές τις μεταφράσεις. Δεν επιδιώκω σύνθετους τρόπους όπως για παράδειγμα τη χρήση google translation που προτείνει ένα άλλο extension

Βρήκα το πρόβλημα!

Eίχα μπερδευτεί και προσπαθούσα να χρησιμοποιήσω τη μέθοδο t μέσω σε ένα activeLabel ως εξής:

<?php echo CHtml::activeLabelEx($model,Yii::t(‘common’,‘password’)); ?>

:rolleyes:

Το διόρθωσα και δουλεύει ρολόι!

Νομίζω ότι η αποθήκευση των κειμένων στη βάση έίναι καλύτερη όταν διαχερίζεσαι τα κείμενα μέσω ενός back-end/admin interface. Αλλιώς δεν υπάρχει λόγος να εισάγεται επιπλέον καθυστέρηση από την πρόσβαση στη βάση. Όλα τα αρχεία php που περιέχουν ελληνικά είναι σε utf-8. Τί προβλήματα ασυμβατότητας έχεις υπόψιν?

Τι θεμα εχει module pligor, έκανα και εγώ κάποιες γύρες το CDbMessageSource, βασικά κατέληξα ότι θέλω να το τροποποιήσω ώστε να παίρνει δεδομένα από ανεξάρτητη SQLite βάση για χάριν απλότητας|ταχυτητας και decoupling από το user layer. Προτιμώ system layer να τρέχει σε δίκη του DB ώστε να γίνεται πιο ευκίνητη η εφαρμογή και να ανεξαρτητοποιούνται τα utilities απο busyness data.

ΓΑ: μπορείς να τρέχεις πολλαπλές βάσεις σε μια εφαρμογή και να έχεις κάποιες dedicated για δεδομένα συστήματος. Ρυθμίσεις εφαρμογής και κείμενα εφαρμογής μπορούν να έρχονται από ένα memory table (MySQL/Postgres) η από db se ramdisk (SQLite) οπότε τα reads θα γίνονται κατευθείαν από την RAM, 10-10000 φόρες πιο γρήγορα από ότι τα φορτώνει από αρχείο (η ψαλίδα τείνει να κλείνει όσο πας σε cached file systems zfs για παράδειγμα). Παρόλα αυτά για ένα απλό site με λίγο κείμενο και μισή χούφτα μεταφράσεις όντως τα αρχεία είναι η καλύτερη λύση, κυρίως λόγω απλότητας.

k

Edit: επίσης Attribute labels (σε Active Record Instances) είναι πολύ βολικό να τα μεταφραζεις μέσα στο function attributeLabels. Έχω φτιάξει ένα gii template για το model class το οποίο δημιουργεί το php code αυτόματα

@Αλέξανδρος: Η αλήθεια είναι οτι δεν καίγομαι για το performance στο τρέχων project οπότε δεν ενδιαφέρθηκα για την ταχύτητα. Τα προβλήματα συμβατότητας που σου είπα έχουν να κάνουν απλά από ανθρώπινο λάθος, βιαστικό, λάθος χειρισμό. Όταν δουλεύεις μόνο στα linux και κάθε μέρα στο ίδιο μηχάνημα όλα καλά. Όταν όμως τυχαίνει να δουλέψεις και σε windows και με διαφορετικούς editor τότε κάπου θα την πατήσεις. Χτυπούσα ήδη μια φορά το κεφάλι μου με λάθος κωδικοποίηση του αρχείου και γενικώς με έχουν ταλαιπωρήσει λίγο τα διάφορα encodings και κάνω ότι μπορώ να μην μπλέκω με τέτοια θέματα.

@Κυριάκος: Κυριάκο thanks για το template, όντως πρέπει να γραφτούν μερικά ακόμα templates και να μοιραστούν στην κοινότητα γιατί τα default δεν βολεύουν πολλές φορές. Όλο λέω να γράψω και γω κανένα και όλο κάτι άλλο επείγει περισσότερο!

Παρεπιπτόντως αυτό με τις πολλαπλές βάσεις δεδομένων, δηλαδή πολλαπλά schemas, το έχω σκεφτεί επίσης. Κλασσικό παράδειγμα δεδομένων που θέλεις να ξεχωρίσεις σε άλλο schema είναι γενικές πληροφορίες όπως πχ. οι δήμοι και οι νομοί μιας χώρας που μπορεί να χρειαστείς σε διάφορα projects.

Υπάρχει κάποια κομψή λύση μέσα από το Yii για κάτι τέτοιο? Ως τώρα χρησιμοποιώ απλά το default database component που συνδέεται με ένα συγκεκριμένο schema (άντε και ένα schema ακόμα για το testing όμως και μόνο)

Είμαι πολύ Newbie στο yii. Μπορείτε να με βοηθήσετε με την μετάφραση των μηνυμάτων του yii στα ελληνικά? Φτιάχνω ένα demo εφαρμογής και θέλω τα μηνύματα, ονόματα κουμπιών κλπ. να είναι στα ελληνικά. Διάβασα το yii-guide-1.1.10 και λέει ότι η μετάφραση γίνεται όταν source και target γλώσσα είναι διαφορετικές. Επίσης είδα στο http://www.yiiframework.com/doc/api/1.1/CApplication#sourceLanguage-detail το sourceLanguage property αλλά δεν κατάλαβα που πρέπει να το ορίσω… και πως!!! Ή μήπως πρέπει όπου έχει μηνύματα να βάζω το Yii::t???

Αν μπορεί κάποιος με απλά λόγια να μου περιγράψει τι πρέπει να κάνω…

Αλεξάνδρα ναι έτσι είναι, θα πρέπει κάθε string που χρειάζεται μετάφραση (όχι όλα) να το γράψεις στα αγγλικά πχ. και να το περιβάλεις με την συνάρτηση Yii::t για να μεταφραστεί.

Όλες τις μεταφράσεις τις έχεις σε ένα php array μέσα στο φάκελο protected/messages/gr/default.php (το ‘gr’ ειναι η γλώσσα, το ‘default’ είναι η κατηγορία)

Δηλαδή το default.php είναι κάπως έτσι:




return array(

    'Username' => 'Όνομα Χρήστη',

    'Password' => 'Κωδικός',

    'Remember me next time' => 'Να με θυμάσαι',

);



Και μετά αντί για ένα απλό ‘Username’ θέλεις κάτι τέτοιο:


Yii::t('default','Username');

Νομίζω δεν ξέχασα κάτι, αλλά και να ξέχασα Guide is your friend: http://www.yiiframework.com/doc/guide/1.1/en/topics.i18n :)