Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjours,
j'ai quelques questions à poser sur Zend_Translate.
En vue de la création d'un modèle de site de commerce (moins complexe que magento). Nous essayons de faire un système multilingue.
Nous stockerons les phrases et titres du site dans des fichiers CSV mais pour la description, titre, remarque des produits, le mieux reste la base de donnée pour l'enregistrement par l'administrateur.
Le problème c'est que dans la doc il n'y a nul par un exemple de comment utiliser la base de donnée pour Zend_Translate.
Est-ce compliqué à mettre en œuvre? Si non, quelles sont les étapes nécessaires à la mise en place?
D'après vous est-ce la meilleure solution?
Pour l'adresse du site comment faire le modèle: "baseurl/langue/module/controller/action/param1/..." ?
Hors ligne
Rien ne t'empêche de faire l'adapter qui te convient, en prenant appui sur l'existant Zend_Translate_Adapter_*
Il est difficile de prévoir un Zend_Translate_Adapter_Db car cela dépend de l'organisation de tes données en base.
My 50 cents
Hors ligne
d'accord, pour la traduction j'ai les tables suivantes:
-produitFR
-produitEN
-produitES
-produitDE
Dans chaque table j'ai les champs suivants:
- idproduit
- nomproduit
- descriptionproduit
- remarqueproduit
Comment faire pour que Zend_Translate regarde dans la colonne désirée?? Si je veux afficher la description produit je fais donc un $this->translate(idproduit); mais pour récupérer le contenu de la colonne description, sa a l'air d'être plus complexe.
Hors ligne
Ta structure de BDD me semble pas la meilleure mais bon.
Perso, je serai plutot parti sur :
idproduit
nomproduit
descriptionproduit
remarqueproduit
langueproduit
Ce qui te permet de faire un Zend_Translate_Adapter avec comme clé le nom du champ a récuperer ainsi que l'idproduit, la langue étant récuperable via Zend_Locale
Après c'est juste une requete a faire dans la methode __()
exemple vite fait :
public function __($item){ list($champ, $id) = split('_', $item); $lang = Zend_Registry::get('Zend_Locale')->getLanguage(); $result = $this->_db->setFetchMode(Zend_Db::FETCH_OBJ) ->fetchCol("Select $champ From Produit Where idproduit=? AND langueproduit = ?" , array($id, $lang)); return isset($result[0]) ? $result[0] : $champ ; }
Code a prendre avec des pincettes car je suis pas sur que le fetchCol fonctionne correctement mais l'esprit est la ^^
Hors ligne
d'accord, donc je fais qu'une seule table langue.
Je savais même pas que fetchCol existait (en même temps j'utilise que les zend_db_table_abstract).
Par contre pour l'adaptateur BDD de Zend_Translate je vois pas trop.
Au final j'aurai donc deux objets zend_translate.
A pour la BDD et l'autre pour les fichier *.mo
Hors ligne
Ca sert potentiellement a quelque chose les manuels ^^
pour l'adapter de Zend_Translate, j'ai jamais fait, mais tu devrais regarde le code de Zend_Translate_Adapter_CSV ou Zend_Translate_Adapter_Ini ou autre et adapte le pour ton cas spécifique.
C'est un des avantages du code objet ^^
Hors ligne
j'en ai trouvé un dans les issues Zend mais en commentaires ils disent de pas étendre Zend_Translate et de prendre notre mal en patience.
Voici le lien:
http://framework.zend.com/issues/browse/ZF-3398
J'ai survolé un peu sa avec la classe Zend_Translate mais je vois pas comment indiquer que c'est l'adaptateur DB sans devoir modifier la classe.
Ou alors je créer ma classe App_Translate extends Zend_Translate et là je rajoute ce qu'il faudrai
Dernière modification par throrin19 (12-08-2009 11:25:56)
Hors ligne
Pages: 1