Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-04-2008 00:20:59

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

[Zend_Translate][1.5]ZF et le multilingue : multiple questions

Bonjour à tous,

Je débute dans l'utilisation du ZF et je me pose quelques question sur les moyens de faire un site multilingue.

1)
Tout d'abord, je ne sais pas comment mettre en place une URL qui permet de connaitre la langue d'utilisation du site.

Je suis pour l'instant sous cette forme:

www.monsite.com/:module/:controller/:action

et je souhaiterais avoir ceci.

www.monsite.com/:langue/:module/:controller/:action

Mais je ne sais pas comment rajouter un élément dans l'url qui sera utilisable sur tout le site.

2)
Comment gérer la traduction des différentes pages?
J'ai entendu parler de la fonction translate de ZF permettant de stocker les textes dans différentes langues dans des fichiers sous forme de tableau.

Je pense utiliser les fichiers CSV mais je n'ai pas assez de recule là dessus pour savoir si c'est facilement utilisable sur le long terme.

Ensuite, je ne sais pas comment on peut stocker un texte avec une mise en page (lien, gras, italique) en utilisant ce moyen.


Pouvez vous me donner des pistes sur ces différentes questions?

Merci d'avance.

Dernière modification par slaughter (15-04-2008 20:30:41)

Hors ligne

 

#2 10-04-2008 08:39:16

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Bonjour,

personnellement j'utilise plusieurs systèmes

au niveau du layout, j'initialise un fichier Traduction en fonction de la langue du visiteur ( auto détection grâce a Zend_Translate )

Code:

$T = new Zend_Translate(Zend_Translate::AN_ARRAY, $this->layout()->getLayoutPath().'/lang');
echo $T->_('YOU_ARE_HERE');

lang/layout_en.php

Code:

<?php

return array(

    'YOU_ARE_HERE' => 'You are here',
);

?>

lang/layout_fr.php

Code:

<?php

return array(

    'YOU_ARE_HERE' => 'Vous êtes ici',
);

?>

en ce qui concerne la mise en place des URL, il faut regarder du coté de Zend_Router
( jetter un oeil ici aussi http://www.z-f.fr/forum/viewtopic.php?id=178 )

une fois que c'est fait il faudra donc spécifier la langue dans le constructeur



Code:

$lang = 'fr';
$T = new Zend_Translate(Zend_Translate::AN_ARRAY, $this->layout()->getLayoutPath().'/lang/layout_'.$lang, $lang);
echo $T->_('YOU_ARE_HERE');

c'est un exemple, il existe d'autres manières d'organiser la traduction.



Pistes:

Zend_Translate
Zend_Router

Dernière modification par lethak (10-04-2008 08:52:18)


IT Dev @Twitter

Hors ligne

 

#3 10-04-2008 09:05:50

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Merci pour ces infos,

Qu'est ce que tu appelles "layout"?
Dans ton exemple de translate (you are here). Tu utilises cette phrase comme clé, c'est a dire que si tu veux changer cette phrase (en anglais) par "hello, you are here !", la correspondance en français ne va pas suivre...

Pour moi, tout ça n'est pas encore très clair.

Hors ligne

 

#4 10-04-2008 14:40:48

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

c'est un tableau associatif, donc oui : "YOU_ARE_HERE" est une clé universelle présente dans tous mes fichiers locaux.

quand j'appel

Code:

echo $T->_("YOU_ARE_HERE")

et bien c'est la valeur correspondante qui va s'afficher, donc ou

"Vous êtes ici :"
si mon navigateur web est en francais (fr), ou

"You are here:"
si mon navigateur est en anglais (en).

je suis en ce moment même en train d'implémenter le multi lang dans mon application, donc je ne connais pas toutes les ficèles encore wink



PS: Zend_Layout est un composant du framework, considère que c'est une vue pour faire simple, tu peux utiliser les translation depuis n'importe quel endroit du moment ou php arrive a faire un file_exists() sur ton fichier de traduction.

Dernière modification par lethak (10-04-2008 14:51:44)


IT Dev @Twitter

Hors ligne

 

#5 10-04-2008 17:59:02

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Comment faire pour traduire un paragraphe entier avec une mise en page (gras, italique, lien) ?
Il faut inclure le code html en entier dans le "tableau" des langues?

Hors ligne

 

#6 10-04-2008 20:28:03

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

et bien oui il me semble


IT Dev @Twitter

Hors ligne

 

#7 13-04-2008 22:38:45

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Il me reste à savoir comment intégrer le nom de la langue dans l'url et je n'arrive pas à comprendre le fonctionnement de router. La documentation est assez incompréhensible à mon gout.

Avez vous une piste à me donner?

Hors ligne

 

#8 14-04-2008 00:13:07

lethak
Membre
Lieu: France
Date d'inscription: 05-04-2008
Messages: 168

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

philippe a écrit:

J'ai souvent bcp de routages dans une appli, mais ça peut être du genre :


Code:

$router->addRoute(
    "category",
    new Zend_Controller_Router_Route(
        ":language/category/:categoryId/:action",
        array(
            "language"=>"en",
            "controller"=>"catalog",
            "action"=>"category",
            "categoryId"=>null)
    )
);

Avec une URL de la forme : http://monsite.com/fr/category/12/edit
on arrive sur le controller "CatalogController" et l'action "editAction".

ensuite dans ton controlleur, tu peux récupérer la valeur avec $this->_getParam("language");

A+, Philippe


IT Dev @Twitter

Hors ligne

 

#9 14-04-2008 00:31:35

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Voilà la totalité de mon bootstrap. J'ai donc rajouté tout ce qui à un rapport avec le routage mais cela ne change pas le fonctionnement de mon application. Je dois toujours accéder à mon écran "album" par cette adresse: http://192.168.2.11/zf-test2/album et non par cette adresse: http://192.168.2.11/zf-test2/fr/album

Code:

<?php
error_reporting(E_ALL|E_STRICT);
date_default_timezone_set('Europe/Paris');
set_include_path('.'
    . PATH_SEPARATOR . realpath('./../library')
    . PATH_SEPARATOR . realpath('./../application/models/')
    . PATH_SEPARATOR . get_include_path());

include "Zend/Loader.php";
//Zend_Loader::registerAutoload();
Zend_Loader::loadClass('Zend_Controller_Front');
Zend_Loader::loadClass('Zend_Config_Ini');
Zend_Loader::loadClass('Zend_Registry');
Zend_Loader::loadClass('Zend_Db');
Zend_Loader::loadClass('Zend_Db_Table');
Zend_Loader::loadClass('Zend_Controller_Router_Rewrite');


// load configuration
$config = new Zend_Config_Ini('./../application/config.ini', 'general');
$registry = Zend_Registry::getInstance();
$registry->set('config', $config);

// setup database
$db = Zend_Db::factory($config->db->adapter,  $config->db->config->toArray());
Zend_Db_Table::setDefaultAdapter($db);

// setup controller
$frontController = Zend_Controller_Front::getInstance();
$frontController->throwExceptions(true);
$frontController->setBaseUrl('/zf-test2/');
$frontController->setControllerDirectory(array(
      'album'    => './../application/modules/album/controllers'
));
$frontController->addModuleDirectory('./../application/modules');

//router
$router = new Zend_Controller_Router_Rewrite();
$router->addRoute(
    "basic",
    new Zend_Controller_Router_Route(
        "/:language/:module/:controller/:action/:parameter1/:parameter2",
        array(
            "language"=>"fr",
            "modules"=>"album",
            "controller"=>"index",
            "action"=>"index",
            "parameter1"=>null,
            "parameter2"=>null)
    )
);


// run!
$frontController->dispatch();

J'ai également essayé de remplacer la ligne suivante:

Code:

/:language/:module/:controller/:action/:parameter1/:parameter2

par:

Code:

/fr/:module/:controller/:action/:parameter1/:parameter2

pour faire un test, mais sans succès.

Pouvez vous m'aider?

Hors ligne

 

#10 14-04-2008 01:52:23

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Sans succes ? Quel est ton problème ? Ton erreur ?

Hors ligne

 

#11 14-04-2008 08:15:40

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

apsy a écrit:

Sans succes ? Quel est ton problème ? Ton erreur ?

C'est vrai que j'aurai peut être pu mettre le message d'erreur.

En gros, il me marque que fr n'a pas de controller par defaut. Il doit considérer que lorsque je tape "http://192.168.2.11/zf-test2/fr/album", je veux atteindre le module fr.

Je pourrais mettre le message d'erreur exact ce soir...

Dernière modification par slaughter (14-04-2008 17:25:35)

Hors ligne

 

#12 14-04-2008 17:01:04

guix69
Nouveau membre
Date d'inscription: 14-04-2008
Messages: 1

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Bonjour à vous 2 !        smile

Je suis actuellement en train de me former sur le ZF et je suis un peu dans la même panade concernant un site multi-langues que je dois développer... Donc à trois on devrait bien y arriver non !!    wink
Pour le moment j'ai fait des essais basés sur le livre "Zend Framework in action" mais apparemment il y a des erreurs...  neutral
Bon en tout cas je planche sur les mêmes choses que vous, Zend_Locale, Zend_Translate, langue dans l'URL, traductions dans les vues...

Hors ligne

 

#13 14-04-2008 17:07:38

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Mais "fr" n'est pas un module là. C'est un paramètre seulement.

Hors ligne

 

#14 14-04-2008 17:52:50

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

C'est bien ça le problème. J'ai l'impression que le ZF ne tient pas compte des nouvelles routes que j'ai définies.

Voici l'erreur exacte:
----------------------------------------------------------------------
Fatal error: Uncaught exception 'Zend_Controller_Exception' with message 'No default module defined for this application' in /var/www/zf-test2/library/Zend/Controller/Dispatcher/Standard.php:392 Stack trace: #0 /var/www/zf-test2/library/Zend/Controller/Dispatcher/Standard.php(211): Zend_Controller_Dispatcher_Standard->getControllerClass(Object(Zend_Controller_Request_Http)) #1 /var/www/zf-test2/library/Zend/Controller/Dispatcher/Standard.php(245): Zend_Controller_Dispatcher_Standard->isDispatchable(Object(Zend_Controller_Request_Http)) #2 /var/www/zf-test2/library/Zend/Controller/Front.php(914): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #3 /var/www/zf-test2/public/index.php(56): Zend_Controller_Front->dispatch() #4 {main} thrown in /var/www/zf-test2/library/Zend/Controller/Dispatcher/Standard.php on line 392
----------------------------------------------------------------------

Dernière modification par slaughter (14-04-2008 17:53:25)

Hors ligne

 

#15 14-04-2008 17:59:03

apsy
Membre
Date d'inscription: 25-06-2007
Messages: 50

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Si je regarde de plus pres ton code :

Code:

$router->addRoute(
    "basic",
    new Zend_Controller_Router_Route(
        "/:language/:module/:controller/:action/:parameter1/:parameter2",
        array(
            "language"=>"fr",
            "modules"=>"album",
            "controller"=>"index",
            "action"=>"index",
            "parameter1"=>null,
            "parameter2"=>null)
    )
);

Tu t'es  trompé dans les clés de ton tableau associatif. Tu as mis un "s" à "modules" alors que ta clé ":module" n'en prend pas...

Hors ligne

 

#16 14-04-2008 20:22:09

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Bien vu, malheureusement ce n'est pas encore ça. J'ai également remarqué que j'ai exactement le même message si je veux accéder à la page suivante : "http://192.168.2.11/zf-test2". Cela me parait normal puisque je n'ai ni de module/controller/action avec le nom index et je n'ai pas défini de module/controller/action par défaut.

J'ai également une question sur le router.
A quoi ca sert de mettre "album" en face de "modules" par exemple au lieu de "null" ?

Hors ligne

 

#17 14-04-2008 22:40:35

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Il fallait tout simplement que j'enlève le "s" à module. J'avais pour l'instant tout mis au pluriel....

Résolu

Hors ligne

 

#18 15-04-2008 08:41:57

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Etape suivante:

Comment je créer les liens. Faut-il que je recherche la valeur de :language pour concaténer avec le reste?
href="<?php echo $this->baseUrl.$this->language;?>/mon/chemin/" />

Ou est ce que je peux faire cela de façon automatique et avoir simplement cela?
href="<?php echo $this->baseUrl;?>/mon/chemin" />

Hors ligne

 

#19 15-04-2008 20:30:15

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Avez vous une idée?

Hors ligne

 

#20 18-04-2008 19:23:44

TDjey
Nouveau membre
Date d'inscription: 17-04-2008
Messages: 7

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Je me pose aussi la meme question pour les url ... si tu trouves fait moi signe smile

Hors ligne

 

#21 22-04-2008 23:21:05

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Toujours personne?

Hors ligne

 

#22 23-04-2008 08:26:19

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Moi j'ajoute effectivement la langue à la main dans les URL.
A priori, si personne ne répond, c'est que personne n'a de solution magique. Evite de relancer tes threads.

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#23 29-04-2008 15:54:40

slaughter
Membre
Date d'inscription: 01-04-2008
Messages: 217

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Merci philippe.

Autre question maintenant (on finira bien par faire le tour)

Comment faire en sorte qu'il rajoute le paramétre de la langue dans l'url.
Mise en situation:
J'accède à mon site par l'url www.monsite.com et je voudrais être dirigé directement vers www.monsite.com/fr
fr étant soit la langue de mon navigateur soit enregistré dans une session.

Je pense que cela se fait dans le bootstrap mais sans trop savoir comment mis prendre. Avez vous une piste?

Hors ligne

 

#24 30-04-2008 14:07:56

philippe
Administrateur
Lieu: Grenoble
Date d'inscription: 01-03-2007
Messages: 1624

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Tu peux détecter la langue du navigateur avec le code ci-dessous. Ensuite tu peux faire une redirection en renvoyant un header.
Je te laisse ajouter les tests qui vont bien pour savoir si la langue est déjà dans l'URL, si tu dois faire la redirection,  etc...

Code:

Zend_Loader::loadClass("Zend_Locale");
$locale = new Zend_Locale();
$lang = $locale->getLanguage();

// puis si besoin
header("Location: http://monsite.com/fr");
exit();

A+, Philippe


twitter : @plv ; kitpages.fr : Création de sites internet à Grenoble et Paris

Hors ligne

 

#25 09-06-2008 09:07:09

Akis
Membre
Date d'inscription: 29-03-2008
Messages: 86
Site web

Re: [Zend_Translate][1.5]ZF et le multilingue : multiple questions

Pour les routes, faut-il créer autant de route qu'on a de page possible ou est-ce qu'il y a moyen de faire quelque chose de général ?

Quand je dis un truc général, je veux dire juste lui indiquer qu'il y a la langue en plus dans l'url mais ne rien fixer (module/controlleur/action).

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages