molto semplicemente: una domanda per voi
come preferite gestire l'internazionalizzazione dei vostri siti/applicazioni php?
molto semplicemente: una domanda per voi
come preferite gestire l'internazionalizzazione dei vostri siti/applicazioni php?
Ciao.
In un mio progetto sto utilizzando
questa soluzione devo dire che mi trovo
benino![]()
form_register.xmlCodice PHP:
class FileException extends Exception{}
class Xml{
public $doc= null;
public $xp= null;
public function __construct($fileName){
$this->doc= new DOMDocument();
$this->load($fileName);
}
public function save($fileName){
if(!@$this->doc->save($fileName)){
throw new FileException('Error saving file ['.$fileName.'] in class ['.__CLASS__.']');
}
}
public function xPath(){
$this->xp= new domxpath($this->doc);
}
private function load($fileName){
if(!@$this->doc->load($fileName)) {
throw new FileException('Error loading file ['.$fileName.'] in class ['.__CLASS__.']');
}
}
}
class i18n extends Xml{
private $data = array();
public function __construct($fileName){
parent::__construct($fileName);
$this->setLabel();
}
public function __set($name, $value) {
$this->data[$name]= $value;
}
public function __get($name) {
if (array_key_exists($name, $this->data)) {
return $this->data[$name];
}
}
private function setLabel(){
$root= $this->doc->documentElement;
$nodes= $root->childNodes;
foreach($nodes as $node){
if($node->hasChildNodes()){
$this->{$node->tagName}= $node->firstChild->nodeValue;
}
}
}
}
try{
$i18n= new i18n('/en/form_register.xml');
echo $i18n->username;
echo "
";
echo $i18n->password;
// and so on
}
catch(FileException $e){
echo $e->getMessage();
}
Codice PHP:
<?xml version="1.0" encoding="UTF-8"?>
<items>
<username>Choose your username</username>
<password>Choose your password</password>
<re_password>Confirm password</re_password>
<email>Your e-mail address</email>
<country>Choose your country</country>
<captcha>Authorize your registration</captcha>
</items>
![]()
Without faith, nothing is possible. With it, nothing is impossible
http://ilwebdifabio.it
la cosa più semplice è tenere le traduzioni delle stringhe in PHP ( array associativi ) o sbaglio?
qualcuno le tiene su db, qualcuno su file... volendo ci sono diversi standard
lo ZF ne suporta molti http://framework.zend.com/manual/en/zend.translate.html
symfony http://www.symfony-project.org/book/...-I18n-and-L10n
comunque non si tratta solo di sostituire stringhe, ma anche di formattare dati ( per esempio le date )... o sbaglio? no che non sbaglio
tra l'altro voglio implementare anche la traduzione degli errori ( eccezioni )
interessante la soluzione ibrida di Zend con lingue in XML e possibilità di creare gettext tramite caching, nessun sistema però prende in considerazione il lato client ... come creare tutte le stringhe da usare in JS per avvisi o altro![]()
beh... intendi quindi in pratica creare template javascript, perchè ( a meno di avere js in pagina, ma direi che lo teniamo esterno no?Originariamente inviato da andr3a
interessante la soluzione ibrida di Zend con lingue in XML e possibilità di creare gettext tramite caching, nessun sistema però prende in considerazione il lato client ... come creare tutte le stringhe da usare in JS per avvisi o altro![]()
) poi le traduzioni le specifichi a livello di template... o sbaglio?
intendo avere una __("whatever") anche sul client
generato via url a seconda della linguacodice:function __(what){ return __.language[what]; }; __.language = { "Hello":"Ciao", "World":"Mondo" };
language.php?lang=it&type=js
oppure generare direttamente qualcosa tipo
e usare semplicemente Language.Hello nel codice clientcodice:var Language = { "Hello":"Ciao", "World":"Mondo" };![]()
ah ok si se po fa![]()
mo penso all'oggetto generico
a sto punto però tanto vale templatizzare anche javascript... poi dentro il javascript varranno le regole che usi per il template engine e quindi errori e traduzioni... o davvero pensi che sia meglio spostare tutta sta logica sul lato client?
così ad occhio preferirei averlo lato server e più flessibile
comunque torniamo alla mia domanda iniziale... file o db? come organizzo le stringhe?
quale standard usare?
e cosa fai una chiamata per ogni informazione? Devi pre creare tutte le stringhe sul client secondo me.Originariamente inviato da andrea.paiola
così ad occhio preferirei averlo lato server e più flessibile
Per il server, XML cachato per gettext mi sembra, come ho già detto, la soluzione più interessante. L'XML se lo generi da db magari lo gestisci meglio e senza paranoie utf-8, no?
tratterei js come qualsiasi altra risorsa sul sito, ossia avrà il suo template che verrà localizzato una volta richiamatoOriginariamente inviato da andr3a
e cosa fai una chiamata per ogni informazione? Devi pre creare tutte le stringhe sul client secondo me.
ho paura che diventi pesante caricare tutte le stringhe
ovviamente TUTTO è utf-8Originariamente inviato da andr3a Per il server, XML cachato per gettext mi sembra, come ho già detto, la soluzione più interessante. L'XML se lo generi da db magari lo gestisci meglio e senza paranoie utf-8, no?![]()
db, connessione al db, file... TUTTO, per evitare ovvi casini
perchè quella in particolare ti sembra la soluzione più interessante?![]()
poedit e gettext li ho provati ed effettivamente è comodo...
perchè al solito, puoi riutilizzare un solo file XML per il server e per il client, e con gettext la velocità di risposta è massimaOriginariamente inviato da andrea.paiola
perchè quella in particolare ti sembra la soluzione più interessante?