Πολυγλωσσικό cms

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

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

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

Πολυγλωσσικό cms

Δημοσίευση από korgr » 17 Ιουν 2011 09:49

fafos έγραψε:Kontopatrioth.. dhladh na exeis phraseis se file kai se db? to vrisko lathos... ton kseskises ton diaxeiristh... to general pou anafero sto paradeigma exei tis "common phraces" pou anafereis..

epishs mia kalh diaxeirish prepei na exei thn dynatothta exagoghs (kai oxi mono eisagoghs) olon ton fraseon keimenon gia paradosh se tritous (p.x. ena metafrastiko grafeio)
Δάσκαλε το txt χρειάζεται μόνο για το import των μεταφράσεων στο σύστημα. Όλα τα translations είναι στη βάση. Έτσι παίρνεις ένα απλό αρχείο κειμένου από το μεταφραστικό γραφείο και με ένα πάτημα κουμπιού upload, οι μεταφράσεις θα καταχωρηθούν στο σύστημα χωρίς να σε νοιάζει ποιανού ....section είναι.
Η δομή του txt είναι η απλούστερη CSV μορφή κειμένου:
ελληνική φράση|αγγλική φράση
ελληνική φράση2|αγγλική φράση2
...
Δημήτρη όταν βρω χρόνο θα κάνω ένα βιντεάκι όπου θα είναι πολύ πιο κατανοητή και η θεωρία αλλά και η υλοποίηση

Άβαταρ μέλους
fafos
Script Master
Δημοσιεύσεις: 6235
Εγγραφή: 30 Νοέμ 2004 03:09

Πολυγλωσσικό cms

Δημοσίευση από fafos » 17 Ιουν 2011 16:18

ok.. etsi opos to diavasa nomiza oti eixes ena arxeio me tis "common phrases" (to, ta, arxikh, epikoinonia klp) se ena aplo arxeio kai ola ta alla sthn vash..

to e-q pantos exei to systhma exagoghs se arxeio csv h defines epilegontas ta panta (phraseis kai periexomena) h epilegontas epi merous selides h fraseis (p.x. mono ta keimena ton domation)... meta thn epilogh ta kanei zip kai ta katevazei gia paradosh ston metafrasth.. an kai oi phraseis - keimena einai liga sto sygkekrimeno site, eginan ola auta me tis glosses gia peiramatismo - efarmogh se alhthino perivallon perissotero..
sthn idia selida epishs exei kanei polla peiramata me xartes tou google (v3) ta opoia den ta exei dosei public alla otan vro eukairia tha ta klepso gia na ta doso sthn koinothta :lol:
Οι πάνες και οι πολιτικοί πρέπει να αλλάζονται συχνά για τον ίδιο λόγο...

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

Πολυγλωσσικό cms

Δημοσίευση από korgr » 17 Ιουν 2011 16:48

fafos έγραψε:
to e-q pantos exei to systhma exagoghs se arxeio csv h defines epilegontas ta panta (phraseis kai periexomena) h epilegontas epi merous selides h fraseis (p.x. mono ta keimena ton domation)... meta thn epilogh ta kanei zip kai ta katevazei gia paradosh ston metafrasth..
Αυτό είναι πολύ καλή δυνατότητα!!!!

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

Πολυγλωσσικό cms

Δημοσίευση από korgr » 03 Ιούλ 2011 12:53

dimsis έγραψε: Νότη, ωραία ακούγονται αυτά, κάποια φάση σκέψου το ενδεχόμενο να τα σηκώσεις πουθενά και για demo όλα αυτά να τα ρίξουμε ένα μάτι αν θέλεις.
Στην προ Odyssey εποχή, ακολουθούσα την γνωστή τακτική των ξεχωριστών αρχείων ανά γλώσσα, με διαφορετικά extensions στο URL.
πχ
Ελληνικά: index.php (χωρίς κάποιο extension)
Αγγλικά: index_en.php
Γερμανικά: index_ger.php
κ.ο.κ.
Ο λόγος προφανής:
Ενώ μπορούσα να αντλήσω βάσει language ID το κατάλληλο περιεχόμενο από την βάση δεδομένων (πχ products, articles, pages κλπ), υπήρχαν και κάποια στοιχεία που εξαρτώνταν από την γλώσσα όπως image alt & title texts (Αρχική σελίδα, Κορυφή της σελίδας...), system messages, εικόνες που περιείχαν slogans, common links (Εγγραφή, Σύνδεση...)

Και τα μειονεκτήματα φυσικά επίσης προφανή:
Για να προσθέσω μία γλώσσα έπρεπε να δημιουργήσω ένα αντίγραφο από όλα τα αρχεία με το κατάλληλο extension και με ενσωματωμένες τις στατικές μεταφράσεις.
Αν ήθελα αργότερα να κάνω μια αλλαγή σε γερμανική σελίδα, έπρεπε να ανοίξω μια σελίδα που δύσκολα μπορούσα να προσανατολιστώ αφού περιείχε γλώσσα που δεν γνωρίζω καθόλου!
Για να γίνει μια επέμβαση στην μετάφραση έπρεπε να ανοίξεις το Template και να το ενημερώσεις με ftp upload κλπ οπότε η μέθοδος περιοριζόταν στον developer και ο πελάτης δεν μπορούσε να επέμβει στις στατικές μεταφράσεις (όπως το έκανε εύκολα στις δυναμικές μεταφράσεις της βάσης μέσω του admin panel).

Στον σχεδιασμό του Odyssey Framework ένα από τα θέματα που με προβλημάτισαν περισσότερο ήταν αυτό. Να δημιουργήσω πολυγλωσσική υποστήριξη χωρίς να σέρνω μαζί τα προβλήματα του παρελθόντος.
Τα requirements που έθεσα ήταν:
  • Τα templates να περιέχουν μόνο μία γλώσσα, την βασική (που για μένα είναι τα ελληνικά στο 99% των περιπτώσεων, αλλά αυτό αλλάζει αν χρειαστεί).

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

    Το μεταφραστικό γραφείο να μπορεί να δουλεύει σε plain text documents, και το αποτέλεσμα που θα παράγουν να είναι άμεσα αξιοποιήσιμο από το framework (one click update).
Η λύση στην οποία κατέληξα είναι η εξής:

Όσον αφορά τις δυναμικές μεταφράσεις το ανέλυσα στο http://www.freestuff.gr/forums/viewtopi ... 019#528721

Για τις στατικές μεταφράσεις δημιούργησα δύο πίνακες `keys` και `translations`:

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

CREATE TABLE `keys` (
	`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	`key` TEXT NOT NULL,
	PRIMARY KEY (`id`)
)

CREATE TABLE `translations` (
	`id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
	`keyID` INT(11) UNSIGNED NOT NULL,
	`langID` TINYINT(3) UNSIGNED NOT NULL,
	`content` TEXT NOT NULL,
	PRIMARY KEY (`id`)
)
Το transaltions.keyID = keys.id και το translations.langID = languages.id
Το keys.key περιέχει την ελληνική φράση ή την εκάστοτε βασική γλώσσα (default language)
Το translations.content περιέχει την μετάφραση που προσδιορίζεται από το keyID στην γλώσσα langID

Πάμε στο πως διαχειριζόμαστε αυτά τα νέα δεδομένα
Στην class language του Odyssey υπάρχει μεταξύ άλλων μία μέθοδος που ονομάζεται getText()

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

	function getText($key){
		$langID = $this->getCurrentLanguage();
		$db = new db();
		$q = "select translations.content as translation 
		from `translations`, `keys` 
		where keys.key='$key' 
		and keys.id=translations.keyID 
		and langID='$langID' ";
		$translation = $db->getRecord($q)->translation;
		return ($translation) ? chop($translation) : chop($key);
	}
Αν και δεν νομίζω πως χρειάζεται επεξήγηση, η μέθοδος αυτή προσπαθεί να αντλήσει την μετάφραση της έκφρασης $key στην τρέχουσα γλώσσα. Στην επιστροφή του αποτελέσματος εξετάζεται αν βρέθηκε μετάφραση (οπότε και επιστρέφεται) διαφορετικά επιστρέφεται το ίδιο το $key, δηλαδή η έκφραση της εξ ορισμού γλώσσας.

Για παράδειγμα αν στο template μας χρησιμοποιήσουμε την

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

<?php echo $language->getText&#40;"Κωδικός πρόσβασης"&#41;;?>
αν βρεθεί η μετάφραση θα τυπώσει "Password" διαφορετικά θα τυπώσει "Κωδικός πρόσβασης"

Έχω δημιουργήσει και ένα shortcut για την συγκεκριμένη μέθοδο:

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

function t&#40;$key&#41;&#123;
	global $language;
	return $language->getText&#40;$key&#41;;
&#125;
ώστε στο template να χρησιμοποιώ απλά την t() από το translate, δηλαδή:

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

<?php echo t&#40;"Κωδικός πρόσβασης"&#41;;?>
Στο admin panel όπως φαίνεται από τις εικόνες που επισυνάπτω, ο διαχειριστής μπορεί είτε να εισάγει μία μία τις εκφράσεις και τις μεταφράσεις, είτε να δημιουργήσει ένα txt file που περιέχει τις εκφράσεις και τις μεταφράσεις χωρισμένες από ένα seperator string (πχ "***" ή "^^^" κλπ). Γενικά αποφεύγουμε να χρησιμοποιήσουμε ένα χαρακτήρα γιατί μπορεί να περιέχεται στην έκφραση ή στην μετάφραση.

πχ ένα δείγμα ενός τέτοιου txt θα μπορούσε να έιναι:
Αρχή της σελίδας^^^Top of page
περισσότερα^^^more
Όνομα χρήστη^^^Username
Κωδικός πρόσβασης^^^Password
Παρακαλούμε δοκιμάστε ξανά...^^^Please try again...
Η σελίδα δεν βρέθηκε^^^The requested page not found
Κατά το import όπως βλέπετε και στην σχετική εικόνα, ορίζουμε το ποια γλώσσα περιέχεται (κάθε txt μπορεί να περιέχει μία γλώσσα). Επίσης μπορούμε να ορίζουμε αν τα περιεχόμενα του txt θα αντικαταστήσουν πλήρως τα υπάρχοντα περιεχόμενα ή αν απλά θα προτεθούν όσες μεταφράσεις είναι νέες (αγνοούνται όσες υπάρχουν καθώς και οι διπλοεγγραφές).

Τέλος αυτό το καταθέτω κυρίως ως ιδέα και όχι τόσο σαν τρόπο υλοποίησης. Ελπίζω να φανούν χρήσιμα σε κάποιους...



Εικόνα


Εικόνα

Άβαταρ μέλους
cn92
Δημοσιεύσεις: 232
Εγγραφή: 25 Ιαν 2008 19:00
Τοποθεσία: Γλυφαδα
Επικοινωνία:

Πολυγλωσσικό cms

Δημοσίευση από cn92 » 03 Ιούλ 2011 19:35

Πολύ καλή δουλειά!

Άβαταρ μέλους
dimsis
Reporter
Δημοσιεύσεις: 7994
Εγγραφή: 25 Ιούλ 2001 03:00

Πολυγλωσσικό cms

Δημοσίευση από dimsis » 04 Ιούλ 2011 11:08

Μια χαρά εύχρηστο και εύκολο δείχνει Νότη. Μπράβο.

Το μόνο που βλέπω στην υλοποίηση σου και θα μπορούσε να βελτιωθεί είναι η σχέση "1 query για κάθε ετικέτα/μετάφραση", που λογικά είναι και η απάντηση στο ερώτημα μου "γιατί τρέχουν τόσα πολλά queries" που σε ρωτούσα σε άλλο θέμα.

Μια γρήγορη ιδέα, που έχει όμως την βαβούρα της για να υλοποιηθεί, θα μπορούσε να έγραφε σε plain text τα αρχεία php με τις μεταφράσεις αντί της database και απλά να έκανες include το αρχείο με τις συσχετίσεις στην αρχή της σελίδας μια φορά και να είχες τις ετικέτες σου. Από πλευράς ταχύτητας πιστεύω θα ήταν πολύ πιο γρήγορο, απλά θα ζόριζε λίγο παραπάνω τη μνήμη του server με το φόρτωμα και τη δημιουργία μεταβλητών για κάθε ετικέτα.

Μια άλλη ιδέα θα ήταν να υπήρχε ένα "index" για το ποιές μεταφράσεις χρειάζεται η σελίδα που φορτώνεται πριν αυτή φορτωθεί, ώστε να φόρτωνες με τη μια όλες τις ετικέτες της σελίδας.
Ή ίσως αν πρόσθετες και άλλο ένα πεδίο στον πίνακα των μεταφράσεων με το όνομα του template που χρησιμοποιείται, έπειτα θα μπορούσες να τα τραβούσες όλα με ένα query του στυλ select translations.content as translation from translations where template=$template και να σέταρες απευθείας μόνο τις απαραίτητες μεταβλητές που έπειτα θα τις έδειχνες με τη μια στο template χωρίς να χρειάζεται καν function για κάτι τέτοιο αφού θα αρκούσε ένα <?php echo $metafrasmeno ?>

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

Πολυγλωσσικό cms

Δημοσίευση από korgr » 04 Ιούλ 2011 11:38

Δημήτρη πράγματι με προβλημάτισαν και μένα όλα αυτά.
Όλη σου η οπτική είναι να "βοηθήσεις" τον server.
Τελικά όμως αν γίνουν κάποια τέτοια πράγματα (συσχέτιση κάθε έκφρασης με template ή την τρέχουσα σελίδα) αρχίζουν και ζορίζουν τα πράγματα για τον πελάτη-διαχειριστή.

Τελικά στην πράξη είδα πως σε μια σελίδα υπάρχουν μέσο όρο 15 στατικές μεταφράσεις οπότε χρειάζονται 15+ ερωτήματα και τελικά δεν είδα κάποια χρονική καθυστέρηση (με μέτρηση execution time) από άλλες μεθόδους όπως προφόρτωση και δημιουργία ετικετών κλπ.

Όπως αναφέρθηκε ο αριθμός των ερωτημάτων από μόνος του (σε λογικά πλαίσια) δεν είναι κριτήριο αφού είναι πολύ εύκολο με δυο τρία σύνθετα ερωτήματα να έχεις χειρότερα αποτελέσματα από 15 απλά του τύπου get result where simple condition.

Στην πράξη με προβληματίζουν πιο ουσιαστικά προβλήματα όπως το να μπορώ να δημιουργήσω ένα txt file με τα keys, κάνοντας parse τα php files του site και εξάγοντας όλες τις φράσεις που υπάρχουν στα
t('έκφραση') ή t("έκφραση")
όσες φορές και αν υπάρχουν σε μια γραμμή κώδικα του template.
Working on it όμως και αν υπάρχει καμιά καλή ιδέα, κανένα ψαγμένο regular expression κλπ, θα το εκτιμούσα ιδιαιτέρως :)

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

Πολυγλωσσικό cms

Δημοσίευση από korgr » 04 Ιούλ 2011 17:33

korgr έγραψε: Στην πράξη με προβληματίζουν πιο ουσιαστικά προβλήματα όπως το να μπορώ να δημιουργήσω ένα txt file με τα keys, κάνοντας parse τα php files του site και εξάγοντας όλες τις φράσεις που υπάρχουν στα
t('έκφραση') ή t("έκφραση")
όσες φορές και αν υπάρχουν σε μια γραμμή κώδικα του template.
SOLVED! :)

Παραθέτω και το αρχείο που κάνει parse όλα τα php files (εγώ τα έχω στο root και στον φάκελο library) και παράγει το keys.txt, έτοιμο να αποσταλεί σε μεταφραστικό γραφείο.

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

<?php
header&#40;'Content-type&#58; text/html; charset=utf-8'&#41;;
$phrases = array&#40;&#41;;
$seperator = "^^^";


//lets parse the files @ root
//we have six different possible combinations of syntax

$start1 = " t&#40;'"; $end1 = "'&#41;";
$start2 = ".t&#40;'"; $end2 = "'&#41;";
$start3 = ' t&#40;"'; $end3 = '"&#41;';
$start4 = '.t&#40;"'; $end4 = '"&#41;';
$start5 = "&#40;t&#40;'"; $end5 = "'&#41;";
$start6 = '&#40;t&#40;"'; $end6 = '"&#41;';

$path = ".";
if&#40;$handle = opendir&#40;$path&#41;&#41; &#123;
	while&#40;false !== &#40;$file = readdir&#40;$handle&#41;&#41;&#41;&#123;
		if&#40;$file != "." && $file != ".." && preg_match&#40;'/.php$/', $file&#41; && !preg_match&#40;'/^_/', $file&#41;&#41;&#123;
			$theFile=file&#40;$file&#41;;
			foreach&#40;$theFile as $line&#41;&#123;
				for&#40;$n=1; $n <= 6; $n++&#41;&#123;
					$offset = 0;
					$ended = false;
					while&#40;$ended === false&#41;&#123;
						if&#40;stripos&#40;$line, $&#123;'start'.$n&#125;, $offset&#41; !== false&#41;&#123;
							$start = stripos&#40;$line, $&#123;'start'.$n&#125;, $offset&#41;;
							$end = stripos&#40;$line, $&#123;'end'.$n&#125;, $start&#41;;
							$offset = $end;
							$match = substr&#40;$line , $start+strlen&#40;$&#123;'start'.$n&#125;&#41;, $end - &#40;$start+strlen&#40;$&#123;'start'.$n&#125;&#41;&#41;&#41;;
							if&#40;!in_array&#40;$match, $phrases&#41;&#41; $phrases&#91;&#93; = $match;
						&#125;else&#123;
							$ended = true;
						&#125;
					&#125;	
				&#125;
			&#125;
		&#125;
	&#125;
	closedir&#40;$handle&#41;;
&#125;


//lets parse the files @ "library" folder where no function alias exist
//we have only two possible combinations of syntax

$start1 = "language->getText&#40;'"; $end1 = "'&#41;";
$start2 = 'language->getText&#40;"'; $end2 = '"&#41;';

$path = "library";
if&#40;$handle = opendir&#40;$path&#41;&#41; &#123;
	while&#40;false !== &#40;$file = readdir&#40;$handle&#41;&#41;&#41;&#123;
		if&#40;$file != "." && $file != ".." && preg_match&#40;'/.php$/', $file&#41; && !preg_match&#40;'/^_/', $file&#41;&#41;&#123;
			$theFile=file&#40;$path."/".$file&#41;;
			foreach&#40;$theFile as $line&#41;&#123;
				for&#40;$n=1; $n <= 2; $n++&#41;&#123;
					$offset = 0;
					$ended = false;
					while&#40;$ended === false&#41;&#123;
						if&#40;stripos&#40;$line, $&#123;'start'.$n&#125;, $offset&#41; !== false&#41;&#123;
							$start = stripos&#40;$line, $&#123;'start'.$n&#125;, $offset&#41;;
							$end = stripos&#40;$line, $&#123;'end'.$n&#125;, $start&#41;;
							$offset = $end;
							$match = substr&#40;$line , $start+strlen&#40;$&#123;'start'.$n&#125;&#41;, $end - &#40;$start+strlen&#40;$&#123;'start'.$n&#125;&#41;&#41;&#41;;
							if&#40;!in_array&#40;$match, $phrases&#41;&#41; $phrases&#91;&#93; = $match;
						&#125;else&#123;
							$ended = true;
						&#125;
					&#125;	
				&#125;
			&#125;
		&#125;
	&#125;
	closedir&#40;$handle&#41;;
&#125;



array_unique&#40;$phrases&#41;;
$fp=fopen&#40;"keys.txt" , "w+"&#41;;
foreach&#40;$phrases as $record&#41;&#123;
		$record.= $seperator."\r\n";
		fputs&#40;$fp, $record&#41;;	
&#125;
fclose&#40;$fp&#41;;
echo "Η διαδικασία ολοκληρώθηκε και τα αποτελέσματα αποθηκεύθηκαν στο αρχείο keys.txt";
?>

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Πολυγλωσσικό cms

Δημοσίευση από ThyClub » 04 Ιούλ 2011 17:49

Νότη μπορείς επίσης να φορτώνεις όλα τα strings μιας γλώσσας σε ένα array της μορφής:

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

$_LANGUAGE&#91;key&#93; = > translation


με 1 μόνο query και η μέθοδος t() να κάνει το απλό:

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

function t&#40;$key&#41;&#123;
global $_LANGUAGE;
 if&#40;$_LANGUAGE&#91;$key&#93;&#41;&#123;
  return $_LANGUAGE&#91;$key&#93;;
 &#125;
 return $key;
&#125;
Εγώ έτσι το κάνω σε όλα τα projects μου και όχι μόνο για τις γλώσσες αλλά και για τις ρυθμίσεις.

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

Πολυγλωσσικό cms

Δημοσίευση από korgr » 04 Ιούλ 2011 18:03

Ναι, αλλά έτσι δεν θα φορτώνεις σε κάθε σελίδα όλες τις μεταφράσεις του site?
Αν πχ όλα τα phrases είναι 500 και μια σελίδα έχει 20, δεν θα φορτώνει στην μνήμη και τα υπόλοιπα 480 τζάμπα και βερεσέ?

Ειδικά αυτό που προτείνεις ήταν από τις πρώτες μου αντιμετωπίσεις αλλά δεν είδα διαφορά στο execution time (απειροελάχιστη για την ακρίβεια) οπότε προτιμώ να προστατεύω τα resources!

Πάντως σαφώς είναι και αυτή μια σωστή μορφή υλοποίησης...

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Πολυγλωσσικό cms

Δημοσίευση από ThyClub » 04 Ιούλ 2011 18:15

Δεν χρειάζεται να φορτώνεις όλα τα strings...
Αναλύω τι κάνω:
Το κάθε template με το που τρέχει πρώτη φορά θα ψάξει για την μετάφραση, δεν θα την βρει και θα προσθέσει ένα κλειδί με το κείμενο-λέξη που χρειάζεται μετάφραση. Επίσης αποθηκεύει το url που θα χρειαστεί η μετάφραση και έχουμε στο admin μας ότι:

link www.tade.com/page1 - καλημέρα - καλημέρα

έτοιμο να το μεταφράσουμε.

Στην ουσία το σύστημα αυτοδιατηρείται και φορτώνεις μόνο όσα κλειδιά χρειάζεται η κάθε σελίδα.

Βέβαια εννοείται ότι πολλά κλειδιά θα είναι κοινά ανάμεσα στις σελίδες σου. Εκεί θα τα φορτώνεις ούτως η άλλως.

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

Πολυγλωσσικό cms

Δημοσίευση από korgr » 04 Ιούλ 2011 18:52

Ομολογώ πως δεν μπορώ να σε παρακολουθήσω! lol
Τώρα δεν μιλούσαμε για το να φορτώσουμε τις μεταφράσεις σε ένα array?
Ξαφνικά μου λες πως αν δεν την βρει θα την προσθέσει πχ στα keys προς μετάφραση. Οκ αλλά αυτό αφορά την διαδικασία πριν το publish του site. Και για να βρω τι ακριβώς χρειάζεται μετάφραση θα πρέπει να τρέξω ένα ένα τα templates? Γιατί να μην τρέξω το αρχείο που μόλις δημοσίευσα και να μου βρει όλα όσα χρειάζονται μετάφραση μέσα σε δύο δευτερόλεπτα? Κάπου σε έχασα νομίζω... :oops:

Ας περάσουμε στο ότι όλες οι μεταφράσεις έχουν γίνει! Δεν υπάρχει κάποια νέα...
Όταν ο επισκέπτης τρέξει ένα από τα templates σου, δεν θα φορτώσει όλες τις μεταφράσεις για να μπορέσει να χρησιμοποιήσει αυτές που χρειάζεται το συγκεκριμένο template?

Άβαταρ μέλους
cherouvim
Script Master
Δημοσιεύσεις: 3137
Εγγραφή: 13 Ιούλ 2005 22:56
Τοποθεσία: Athens, Greece
Επικοινωνία:

Πολυγλωσσικό cms

Δημοσίευση από cherouvim » 04 Ιούλ 2011 18:57

korgr έγραψε:

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

<?php echo $language->getText&#40;"Κωδικός πρόσβασης"&#41;;?>
Το κλειδί αυτό έχει πρόβλημα. Αν αποφασίσεις να αλλάξεις το Ελληνικό κείμενο σε "Κωδικός" θα πρέπει να ανατρέξεις σε όλα τα templates για να αναπροσαρμόσεις το κλειδί.

Νομίζω το πιο σωστό είναι να έχεις ένα γενικό κλειδί στα Αγγλικά το οποίο είναι ανεξάρτητο από το περιεχόμενο (μεταφράσεις) του. πχ:

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

User.password=Password
User.password=Κωδικός πρόσβασης
Περισσότερα για το θέμα λέω εδώ.

Άβαταρ μέλους
ThyClub
Honorary Member
Δημοσιεύσεις: 5312
Εγγραφή: 17 Νοέμ 2003 00:21
Τοποθεσία: Hell's Kitchen
Επικοινωνία:

Πολυγλωσσικό cms

Δημοσίευση από ThyClub » 04 Ιούλ 2011 21:00

Νότη εννοείται ότι δεν θα τρέξεις τα templates ένα ένα...

Πάρε παράδειγμα το Symfony. Στο συγκεκριμένο framework λοιπόν κάνεις το εξής:

1. Σε κάθε σου view (template) βάζεις τα string που θέλεις
2. Με εντολή του symfony αυτό βρίσκει τα strings που χρειάζονται translation και τα αποθηκεύει σε xml αρχεία για να τα μετραφράσεις... (στην περίπτωση μας στην ΒΔ)
3. Η εφαρμογή είναι διαθέσιμη σε όσες γλώσσες θέλεις..Φορτώνει μόνο όσα χρειάζονται και δεν κάνεις έξτρα queries για τις γλώσσες.

Βέβαια δεν εννοώ ότι πρέπει να το κάνουν όλοι έτσι.. Όπως βολεύει τον καθένα.

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

Πολυγλωσσικό cms

Δημοσίευση από korgr » 04 Ιούλ 2011 22:22

cherouvim έγραψε:Αν αποφασίσεις να αλλάξεις το Ελληνικό κείμενο σε "Κωδικός" θα πρέπει να ανατρέξεις σε όλα τα templates για να αναπροσαρμόσεις το κλειδί.
Μου συμβαίνει κάθε μέρα! Search & Replace στο DW και είναι έτοιμο σε δευτερόλεπτα!
Άλλωστε σε επίπεδο template ποτέ δεν αφήνω τον πελάτη να κάνει ότι θέλει. Δεν είναι Joomla!

cherouvim έγραψε:Νομίζω το πιο σωστό είναι να έχεις ένα γενικό κλειδί στα Αγγλικά το οποίο είναι ανεξάρτητο από το περιεχόμενο (μεταφράσεις) του.
Μάλλον σας μπέρδεψε η έκφραση key.
Δεν μιλάμε απλά για keys->values αλλά για keys που κατά περίσταση είναι ΚΑΙ values.
Το θέμα είναι να έχεις ένα σύστημα που κάθεται "ανώδυνα" σε μονόγλωσσο περιβάλλον και που είναι έτοιμο να μεταμορφωθεί σε πολυγλωσσικό ανά πάσα στιγμή του ζητηθεί με πολύ απλό τρόπο. Με τον τρόπο που προτείνεις πρέπει να χειρίζεσαι ένα site που είναι μόνο στα ελληνικά, σαν να ήταν πολυγλωσσικό και έχει αγγλικά keys και μεταφράσεις! Αυτό ακριβώς ήθελα να αποφύγω.

Απάντηση

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

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

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