TheMGamer Δημοσ. 20 Ιουνίου 2012 Δημοσ. 20 Ιουνίου 2012 Γεια σας παιδια. Προσπαθώ να κάνω μια μετάφραση του IP.Board 3.3.3 στα ελληνικά. Ως language locale έβαλα el_GR.UTF-8. Ως εδώ μια χαρά τα πράγματα. Μετά βλέπω στις ημερομηνίες ένα μικρό πρόβλημα. Αντί να δείχνει 20 Ιουνίου 2012, δείχνει 20 Ιούνιος 2012. Υπάρχει κάποιος τρόπος να το διορθώσω αυτό?
defacer Δημοσ. 21 Ιουνίου 2012 Δημοσ. 21 Ιουνίου 2012 Όχι. Το μόνο που μπορείς να κάνεις είναι κάποια χακιά του στυλ strtr() για find/replace "Ιούνιος" => "Ιουνίου" κλπ -- αλλά αφού μιλάμε για απλή μετάφραση δεν έχεις επιλογή να γράψεις και κώδικα οπότε τζίφος. Επίσης, έχε υπόψη ότι αν η PHP είναι σε Windows το συγκεκριμένο locale δεν υπάρχει.
TheMGamer Δημοσ. 21 Ιουνίου 2012 Μέλος Δημοσ. 21 Ιουνίου 2012 Η PHP είναι σε linux οπότε δεν έχω πρόβλημα. Την μεταφραση θα την κάνω για δική μου χρήση οπότε μπορώ να προσθέσω κάποια χακιά όπως είπες. Μπορείς να με καθοδηγήσεις πως να το κάνω αυτό;
macabre_sunsets Δημοσ. 21 Ιουνίου 2012 Δημοσ. 21 Ιουνίου 2012 Υποθέτω πως η ημερομηνία δημιουργείται μέσω της date(), σε κάποιο σημείο του κώδικα. Υποθέτω επίσης πως θα είναι της μορφής "d F Y". Μπορεις να δοκιμάσεις να το αλλάξεις αυτό με το "d M Y", οπότε θα έχεις κάτι σαν το ακόλουθο "20 Ιον 2012" (τρια γράμματα για τον μήνα). Εναλλακτικά: Δεν ξέρω πώς γίνονται οι μεταφράσεις στο IP Board αλλά ενδεχομένως μπορείς να δοκιμάσεις και το ακόλουθο: Αντί του (υποθέτωντας πάντα) date("d F Y"), ίσως θα μπορούσες να κάνεις κάτι σαν: >echo date('d') . ' ' . sprintf("month_%02d", date('m')) . ' ' . date('Y'); και να μεταφράσεις τα αντίστοιχα "month_01", "month_02", ... Το παραπάνω σε θεωρητικό επίπεδο, καθώς ξαναλέω πως δεν γνωρίζω πώς γίνεται η μετάφραση στο IP Board.
defacer Δημοσ. 21 Ιουνίου 2012 Δημοσ. 21 Ιουνίου 2012 **Update:** Για κάποιο λόγο φαίνεται ότι την όλη φάση με τη χρήση της strftime συγκεκριμένα (και όχι κάποιας άλλης function) την έβγαλα από το μυαλό μου. Όντως είναι έτσι ή έγινε κάποιο edit σε προηγούμενο post? Το βασικό πρόβλημα είναι ότι είσαι υποχρεωμένος να προσθέσεις κώδικα γύρω από όλες τις κλήσεις στη strftime με κάποιο τρόπο (ή βασικά να αντικαταστήσεις την υπάρχουσα strftime με δικό σου implementation). Υπάρχουν 3 επιλογές: Εγκαθιστάς κάποιο extension όπως το apd ή το runkit, τα οποία σου επιτρέπουν να "εγκαταστήσεις" μια δική σου function στη θέση της strftime. Μειονεκτήματα: θέλει να κάνεις install custom extension στην PHP, είναι λιγότερο portable απ' όλα. Πλεονεκτήματα: δε χρειάζεται να πειράξεις τον κώδικα του board σχεδόν καθόλου. Κάνεις ένα find/replace σε όλο τον κώδικα του board, αντικαθιστώντας όλες τις εμφανίσεις της strftime με το όνομα κάποιας άλλης function που θα ορίσεις εσύ, π.χ. "strftime_custom". Μειονεκτήματα: πρέπει να θυμάσαι να το ξανακάνεις μετά από οποιοδήποτε update, πρέπει να προσέχεις να μη κάνεις κάποια λάθος αντικατάσταση. Πλεονεκτήματα: γίνεται πολύ εύκολα, δε χρειάζεται να παιδευτείς με extensions. Πας και βρίσκεις τις χρήσεις της strftime που σ' ενδιαφέρουν μία μία και γράφεις κώδικα γύρω τους (ή τις αντικαθιστάς με την υποτιθέμενη strftime_custom). Αυτό μόνο αν μιλάμε για αριθμό χρήσεων που μετριέται στα δάχτυλα του ενός χεριού (κάτι που μάλλον δεν ισχύει). Ας πούμε τώρα ότι κάπως έχεις κάνει την αντικατάσταση strftime => strftime_custom. Θα θέλεις κάτι σαν το εξής: >function strftime_custom($format, $timestamp = null) { static $targetFormatPatterns = array( '%e %B', /* προσθέτεις όσες χρειάζεται */ ); static $replacements = array( 'Ιανουάριος' => 'Ιανουαρίου', // κλπ κλπ ); $timestamp = $timestamp ?: time(); $needsReplacement = false; foreach($targetFormatPatterns as $pattern) { if (strpos($format, $pattern) !== false) { $needsReplacement = true; break; } } $formatted = strftime($format, $timestamp); return $needsReplacement ? strtr($formatted, $replacements) : $formatted; } Δες το στην πράξη (μπορείς να το χρησιμοποιήσεις αυτόνομα σε δοκιμές πρώτα) και αν έχεις απορία για κάτι εδώ είμαστε.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα