Dans Symfony, il est possible de traduire le contenu des tables grace aux Behaviors. L'internalisation est déjà prévue, autant ne pas réinventer la roue ;)
http://www.symfony-project.org/jobeet/1_4/Doctrine/fr/19#chapter_19_sub_les_ objets_de_doctrine -----Message d'origine----- De : symfony-fr@googlegroups.com [mailto:symfony...@googlegroups.com] De la part de Mohamed Ayoub Benjelloun Envoyé : mardi 28 décembre 2010 23:46 À : symfony-fr@googlegroups.com Objet : Re: [symfony-fr] Re: Internationalisation J'essaierai de te lister les méthodes possibles, après en fonction de ton besoin et de tes contraintes tu en choisis celle qui te conviens le plus - Méthode 1: [n bdd] (But: ne pas toucher à notre code) Je pense que la seule manière possible de traduire le contenu dynamique de ton site sans avoir à toucher ni à la base de données ni aux actions c'est d'utiliser une autre base de données dont le schéma est identique à la première, mais avec des données différentes (données de l'autre langue), il faudra déjà: - trouver le moyen de passer outre le databases.yml, tu n'as qu'à explorer le code de symfony le but c'est d'en avoir 1 par langue, et de forcer symfony à choisir celui qui correspond à la langue en cours lors de ces connexions à la base de données. - Détecter les données communes aux deux bases et écrire un script qui les copiera sur les copies de la base principale - Écrire un cron qui permettra la mise à jour des copies en fonction du besoin => Avantages: tu ne toucheras point à tes actions => Inconv: données redondante, latence entre les maj, tu t'aventureras sur la partie ORM de symfony attends toi à des obstacles, bug, incohérances... - Méthode2: [Moteur de traduction] (toucher peu à notre code en dépit d'un manque de qualité du traduisible) Si tu juges que le moteur de traduction de yahoo ou astalavista basé sur babelfish est assez performant, tu pourra l'utiliser via la classe en pièce jointe il faut: - réécrire la fonction "echo" en tant que helper pour qu'elle puisse en fait afficher le résultat de la méthode translate() de notre classe ( http://blog.firehist.org/2010/02/21/symfony-creer-un-helper-personnalise/ ) - faire un ctrl+H sur tes modules (eclipse) et recherche les instances de "echo" tu les changeras par le nom de ta méthode => Avantages: tu ne toucheras que peu à ton code => Inconv: Babelfish est loin d'être un traducteur assermenté, il en créera des vannes sur ton site, pourvu que ça soit pas un site de pompe funèbre - Méthode3: [réutilisation des tables] (modifier le code, mais faire du clean) l'idée est d'insérer deux id supplémentaires à toutes tes tables dont le contenu désire être traduit, un id pour définir la langue, puis un id propre à chaque objet et qui sera le même pour 3 lignes par exemple représentant la même information mais en 3 langues différentes, ces deux dimensions permettront de situer n'importe quel article dans son contexte. il faut: - revoir la logique de toutes tes actions, - sortir le bon article dans la langue adéquate, traiter le cas de la non existence de la traduction ... => Avantages: tu auras du code clean => Inconv: il te faut assez de temps pour tous modifier - Méthode4: [tables de traduction] (modifier le code, mais faire du clean) l'idée est un peu près la même que la 3 sauf que tu lieras chaque table à contenu traduisible avec une autre contenant les traductions, ceci est le cas général après en fonction des relations entre tes tables tu peux rencontrer des complications (jointures, ...) => Avantages: tu auras du code clean => Inconv: il te faut assez de temps pour tous modifier Cordialement, Ayoub Mohamed BENJELLOUN IED-CP / Smile Maroc Smile – Open Source Solutions www.smile.fr benjellounay...@gmail.com +212 661 96 44 01 -- Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Symfony-fr. Pour envoyer un message à ce groupe, adressez un e-mail à symfony...@googlegroups.com. Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse symfony-fr+unsubscr...@googlegroups.com. Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/symfony-fr?hl=fr -- Vous recevez ce message, car vous êtes abonné au groupe Google Groupes Symfony-fr. Pour envoyer un message à ce groupe, adressez un e-mail à symfony...@googlegroups.com. Pour vous désabonner de ce groupe, envoyez un e-mail à l'adresse symfony-fr+unsubscr...@googlegroups.com. Pour plus d'options, consultez la page de ce groupe : http://groups.google.com/group/symfony-fr?hl=fr