02 sept
Par Clément dans Tutoriels
Mots-clefs :CSS, Design, HTML, Intégration, Routes, Url, Watchmydesk, Zend, Zend Framework, Zend_Translate

Dans cet épisode, nous allons intégrer le design de notre application et nous allons aborder des routes assez pratique pour une application multilingue.
Pour vous simplifier la tache, nous avons déjà découpé les éléments dont nous allons avoir besoin pour intégrer notre design. Vous pouvez donc télécharger le zip directement sur ce lien.
Toutes ces images vont donc nous conduire à un design ressemblant à celui-ci :

Le contenu de ce dossier sera a copier dans le répertoire /public/img/design/.
Nous allons maintenant intégrer notre design pour notre application.
Commençons par la base, la structure HTML:
<div id="conteneur"> <div id="top"></div> <div id="header"></div> <div id="centre"></div> <div id="footer"></div> </div>
Dans notre div top, nous allons placer un lien pour revenir sur l’index de notre page.
<div id="top">
<a href="" class='logo_wmd'>
<img src="/img/design/logo.png" alt="Watch My Desk - Show Off your Geekstation" title="Watch My Desk - Show Off your Geekstation" />
</a>
</div>
Dans cette div, nous allons aussi ajouter notre menu :
<div id="top">
<a href="" class='logo_wmd'>
<img src="/images/design/logo.png" alt="Watch My Desk - Show Off your Geekstation" title="Watch My Desk - Show Off your Geekstation" />
</a>
<p class="boutons_top">
<a href="" class="bouton">Browse</a>
<a href="" class="bouton">Join Now</a>
<a href="" class="bouton">Login</a>
<a href="" class="bouton">Your desk</a>
</p>
</div>
Les liens seront remplit à la suite de ce tutoriel car il nous faudra définir les bonnes routes pour notre application.
Maintenant nous allons passer à la div header :
<div id="header">
<div class="title_head">
<h1>Show Off your geekstation.</span></h1>
<p>Watch My Desk is a website where you can share, browse and rate pictures of desks and computers of the world.</p>
</div>
<div class="join_now">
<p>Join the website to share your desk or post comments, just in 2 clics !</p>
<a href="">
</a>
</div>
</div>
Concernant la div centre, elle sera remplie dynamiquement. Il nous suffit donc d’appeler la bonne méthode :
< ?php echo $this->layout()->content ?>
Le footer sera abordé dans un prochain épisode
.
Et pour finir, nous allons ajouter le CSS à notre application ! Pour cela, rendez-vous dans le fichier /public/css/main.css.
Je vous donne le CSS directement sans réel explication, vous pourrez les trouver sur la Ferme Du Web (ça évitera le duplicate-content !)
* {
margin: 0;
padding: 0;
}
body {
font-family: Arial, Helvetica, sans-serif;
font-size: 12px;
color: #000000;
}
a img {
border: none;
}
#conteneur {
margin: 0 auto;
overflow: hidden;
width: 960px;
}
#conteneur #top {
height: 40px;
width: 100%;
overflow: hidden;
background-image: url("/img/design/back_top.png");
background-repeat: repeat-x;
}
#conteneur #header {
height: 190px;
width: 100%;
overflow: hidden;
background-image: url("/img/design/back_header.png");
background-repeat: repeat-x;
}
#conteneur #centre {
overflow: hidden;
}
#conteneur #footer {
height: 142px;
width: 100%;
overflow: hidden;
background-image: url("/img/design/back_footer.png");
background-repeat: repeat-x;
}
#conteneur #header .title_head {
float: left;
}
#conteneur #header .title_head h1 {
color: #2c4f56;
font-size: 40px;
font-weight: bold;
line-height: 35px;
margin: 30px 0 15px 80px;
text-shadow: 1px 1px 1px #FFF;
}
#conteneur #header .title_head h1 span {
font-size: 50px;
font-style: italic;
display: block;
margin-left: 40px;
}
#conteneur #header .title_head p {
color: #444444;
margin: 20px 0 0px 80px;
width: 450px;
}
#conteneur #header div.join_now {
float: right;
width: 205px;
margin: 30px 80px 0 0;
padding: 20px;
text-align: center;
background: #FFF;
border: 1px solid #c0c0c0;
-moz-border-radius: 20px;
-webkit-border-radius: 20px;
}
#conteneur #top .logo_wmd {
float: left;
margin-left: 10px;
}
#conteneur #top .boutons_top {
float: right;
height: 40px;
margin-right: 20px;
margin-top: 9px;
}
#conteneur #top .boutons_top a.bouton {
display: block;
background-image: url("/img/design/back_bouton.png");
background-repeat: no-repeat;
color: #FFF;
width: 72px;
height: 19px;
line-height: 19px;
float: left;
text-align: center;
margin-right: 15px;
text-decoration: none;
}
#conteneur #top .boutons_top a.bouton:hover {
background-image: url("/img/design/back_bouton2.png");
}
Il nous faut maintenant ajouter les liens dans notre layout pour avoir accès aux différentes pages de notre application. Pour cela, nous allons utiliser le helper que le Zend Framework nous fournit : le helper Url.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php echo $this->headTitle() ?>
<?php echo $this->headScript() ?>
<link rel="stylesheet" href="/css/main.css" type="text/css" media="screen, projection" />
<?php echo $this->headStyle() ?>
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>
<div id="conteneur">
<div id="top">
<a href="<?php echo $this->url(array('language' => $this->language), 'localized_homepage') ?>" class="logo_wmd">
<img src="/img/design/logo.png" alt="Watch My Desk - Show Off your Geekstation" title="Watch My Desk - Show Off your Geekstation" />
</a>
<p class="boutons_top">
<a href="<?php echo $this->url(array('language' => $this->language), 'browse') ?>" class="bouton">Browse</a>
<a href="<?php echo $this->url(array('language' => $this->language), 'register') ?>" class="bouton">Join Now</a>
<a href="<?php echo $this->url(array('language' => $this->language), 'login') ?>" class="bouton">Login</a>
<a href="<?php echo $this->url(array('language' => $this->language), 'share') ?>" class="bouton">Your Desk</a>
</p>
</div>
<div id="header">
<div class="title_head">
<h1>Show off <span>your geekstation.</span></h1>
<p>Watch My Desk is a website where you can share, browse and rate pictures of desks and computers of the world.</p>
</div>
<div class="join_now">
<p>Join the website to share your desk or post comments, just in 2 clics !</p>
<a href="< ?php echo $this->url(array('language' => $this->language), 'register') ?>">
<img src="/img/design/join_now_fr.png" alt="Join now and show off your desk with the community !" title="Join now and show off your desk with the community !" /></a>
</div>
</div>
<div id="centre"><?php echo $this->layout()->content ?></div>
<div id="footer"></div>
</div>
</body>
</html>
Comme ça de base, notre application ne marchera pas, il nous manque deux choses, le plugin de traduction, et les routes.
Tout d’abords, mettons en place notre plugin de traduction. Rendez-vous dans le dossier applications/plugins et créez un fichier nommé Translate.php avec comme contenu :
< ?php
class Plugin_Translate extends Zend_Controller_Plugin_Abstract {
protected $_view;
public function __construct($view){
$this->_view = $view;
}
public function routeShutdown($view) {
// on récupère le paramètre de la langue dans l'url
$locale = $this->getRequest()->getParam('language');
// On lance notre Translate (avec les différents fichiers).
$translate = new Zend_Translate('array',APPLICATION_PATH.'/languages/fr_FR.php','fr');
$translate->addTranslation(APPLICATION_PATH.'/languages/en_US.php','en');
// On stoque notre locale (fr ou en) dans notre registre.
Zend_Registry::set('Zend_Locale', $locale);
// si la langue demandé ne possède pas de traduction
if (!$translate->isAvailable($locale)) {
// on change la langue par defaut (en) dans notre traduction.
$translate->setLocale('en');
// et on ajoute à la variable de vue la langue 'en'
$this->_view->language = 'en';
} else {
$translate->setLocale($locale);
$this->_view->language = Zend_Registry::get('Zend_Locale');
}
Zend_Registry::set('Zend_Translate', $translate);
}
}
Si jamais vous avez une autre solution pour ce genre de traduction, n’hésitez pas à me le faire savoir dans les commentaires.
Ensuite direction notre Bootstrap.php. Nous allons supprimer la méthode _initTranslate pour la remplasser par une qui convient mieux à notre application.
protected function _initTranslatePlugin() {
$this->bootstrap('view');
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$view = $this->getResource('view');
$front->registerPlugin(new Plugin_Translate($view));
}
De cette façon, notre plugin de traduction est lancé à chaque appelle de page, pas mal non ? Et on garde un contrôle totale sur notre traduction.
Toujours dans ce fichier, vous allez supprimer notre ancienne méthode _initRoutes et créer une méthode _initRouter comme cela :
protected function _initRouter(){
$this->bootstrap('frontController');
$front = $this->getResource('frontController');
$router = $front->getRouter();
$router->addConfig(new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'routes'), 'routes');
return $router;
}
Comme vous pouvez le voir, nous ajoutons un fichier de configuration à notre application, dans notre cas il s’agit des différentes routes.
Nous allons donc créer un fichier /configs/routes.ini et le remplir de cette façon :
[routes] routes.register.type = "Zend_Controller_Router_Route" routes.register.route = ":language/register" routes.register.defaults.module = frontend routes.register.defaults.controller = membre routes.register.defaults.action = new routes.register.defaults.language = en routes.browse.type = "Zend_Controller_Router_Route" routes.browse.route = ":language/workstations" routes.browse.defaults.module = frontend routes.browse.defaults.controller = bureau routes.browse.defaults.action = list routes.browse.defaults.language = en routes.login.type = "Zend_Controller_Router_Route" routes.login.route = ":language/login" routes.login.defaults.module = frontend routes.login.defaults.controller = membre routes.login.defaults.action = login routes.login.defaults.language = en routes.share.type = "Zend_Controller_Router_Route" routes.share.route = ":language/share" routes.share.defaults.module = frontend routes.share.defaults.controller = bureau routes.share.defaults.action = new routes.share.defaults.language = en routes.change_language.type = "Zend_Controller_Router_Route" routes.change_language.route = "change_language" routes.change_language.defaults.module = frontend routes.change_language.defaults.controller = language routes.change_language.defaults.action = changeLanguage routes.change_language.defaults.language = en routes.localized_homepage.type = "Zend_Controller_Router_Route" routes.localized_homepage.route = ":language/" routes.localized_homepage.defaults.module = frontend routes.localized_homepage.defaults.controller = index routes.localized_homepage.defaults.action = index routes.localized_homepage.defaults.language = en
Je pense pas que cela demande beaucoup d’explications, tout est assez explicite. Néanmoins, nous pouvons constater la présence de :language, c’est une partie variable de notre url. Grâce à cela nous allons pouvoir aller ce genre d’adresse de façon très simple :
Nous allons donc maintenant traduire toutes les chaines de caractère de notre application grâce à la méthode $this->translate(). Dans notre fichier de layout :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php echo $this->headTitle() ?>
<?php echo $this->headScript() ?>
<link rel="stylesheet" href="/css/main.css" type="text/css" media="screen, projection" />
<?php echo $this->headStyle() ?>
<link rel="shortcut icon" href="favicon.ico" />
</head>
<body>
<div id="conteneur">
<div id="top">
<a href="<?php echo $this->url(array('language' => $this->language), 'localized_homepage') ?>" class="logo_wmd">
<img src="/img/design/logo.png" alt="<?php echo $this->translate("Watch My Desk - Show Off your Geekstation"); ?>" title="<?php echo $this->translate("Watch My Desk - Show Off your Geekstation");?>" />
</a>
<p class="boutons_top">
<a href="<?php echo $this->url(array('language' => $this->language), 'browse') ?>" class="bouton"><?php echo $this->translate("Browse"); ?></a>
<a href="<?php echo $this->url(array('language' => $this->language), 'register') ?>" class="bouton"><?php echo $this->translate("Join Now"); ?></a>
<a href="<?php echo $this->url(array('language' => $this->language), 'login') ?>" class="bouton"><?php echo $this->translate("Login"); ?></a>
<a href="<?php echo $this->url(array('language' => $this->language), 'share') ?>" class="bouton"><?php echo $this->translate("Your Desk"); ?> </a>
</p>
</div>
<div id="header">
<div class="title_head">
<h1><?php echo $this->translate("Show off"); ?><span><?php echo $this->translate("your geekstation."); ?></span></h1>
<p><?php echo $this->translate("Watch My Desk is a website where you can share, browse and rate pictures of desks and computers of the world."); ?></p>
</div>
<div class="join_now">
<p><?php echo $this->translate("Join the website to share your desk or post comments, just in 2 clics !"); ?></p>
<a href="< ?php echo $this->url(array('language' => $this->language), 'register') ?>">
<img src="/img/design/join_now_<?php echo $this->language ?>.png" alt="<?php echo $this->translate("Join now and show off your desk with the community !"); ?>" title="<?php echo $this->translate("Join now and show off your desk with the community !"); ?>" /></a>
</div>
</div>
<div id="centre"><?php echo $this->layout()->content ?></div>
<div id="footer"></div>
</div>
</body>
</html>
Et enfin, nous allons éditer notre fichier de langues fr_FR.php pour y ajouter la traduction :
return array( 'hello' => 'Bonjour et bienvenue sur notre site', 'english' => 'Anglais', 'french' => 'Français', 'Watch My Desk - Show Off your Geekstation' => 'Watch My Desk - Show Off your Geekstation', 'Browse' => 'Explorer', 'Join Now' => "S'inscrire", 'Login' => 'Identification', 'Your Desk' => 'Ton Bureau', 'Show off' => 'Montre', 'your geekstation.' => 'ton bureau de geek', 'Watch My Desk is a website where you can share, browse and rate pictures of desks and computers of the world.' => 'Watch my desk est un site où vous pouvez partager, explorer et noter des photos du bureaux et ordinateurs du monde entier', 'Join the website to share your desk or post comments, just in 2 clics !' => 'Inscrivez vous pour partager vos bureaux, poster des coms... en 2 clics !', 'Join now and show off your desk with the community !' => 'Inscris-toi maintenant et partage ton bureau de geek avec la communauté !' );
Nous avons donc traduit le design de notre application ! Simple non ? ![]()
Et voila ! Le design est intégré (du moins la page d’accueil) et il est traduit! Vous en pensez quoi ?
« Ajout d’une langue sur un site Drupal | Ouverture de la page fan Facebook »
Un trackback
35 commentaires
David
2 septembre 2009 à 11:25
1Salut,
il manquerait pas un protected $_view; dans ton plugin Plugin_Translate??
Patrice Robitaille
2 septembre 2009 à 13:12
2J’ai procédé d’une différente façon pour la traduction mais je n’obtiens le fr/en dans le url, par contre, je sauve le plugin et le fichier de config:
Bootstrap.php:
protected function _initTranslate()
{
// On récupère la session du site.
$session = Zend_Registry::get(’session’);
// On définit la langue par défaut sur le site.
$locale = new Zend_Locale(’fr’);
// On enregistre cette langue dans notre registre.
Zend_Registry::set(’Zend_Locale’, $locale);
// Si la langue existe en session, on récupère la session, sinon on prend la valeur par défaut.
if(isset($session->lang) && $session->lang!=» ){
$langLocale = $session->lang;
}else{
$session->lang = $locale;
$langLocale = $session->lang;
}
//$langLocale = isset($session->lang) ? $session->lang : $locale;
// On lance l’objet de traduction en lui passant les fichiers de langues
$translate = new Zend_Translate(’array’,APPLICATION_PATH.’/languages/fr.php’,'fr’);
$translate->addTranslation(APPLICATION_PATH.’/languages/en.php’,'en’);
// On lui passe la langue courante du site
$translate->setLocale($langLocale);
// Important pour utiliser le helper.
Zend_Registry::set(’Zend_Translate’, $translate);
Zend_Validate_Abstract::setDefaultTranslator($translate);
Zend_Form::setDefaultTranslator($translate);
}
Par la suite, je peux faire ce test de langue:
if(Zend_Registry::get(’session’)->lang==’en’){
Sinon, dans une vue ou un view helper, ceci fonctionne:
$this->view->translate(» Mot à traduire» )
Je fonctionnes avec un dossier langues identiques et des tableaux php
MERCI pour ce nouveau tutoriel, il faut surtout pas arrêter !
laurent HADJADJ
2 septembre 2009 à 14:16
3Bonjour, j’ai un message :
Fatal error: Class ‘Plugin_Translate’ not found in C:\wamp\www\Babel\application\Bootstrap.php on line 103
Pourtant le fichier Translate.php est bien dans le include_path.
Avez-vous une idée ?
Merci
Clément
2 septembre 2009 à 14:18
4@laurent HADJADJ: tu as bien mis ce fichier Translate.php dans applications/plugins/ ?
laurent HADJADJ
2 septembre 2009 à 15:46
5Oui, j’ai crée un dossier plugins, j’ai même ajouté dans application.ini le chemin avec la commande :
;resources.frontController.pluginDirectory = APPLICATION_PATH « /Plugins»
;resources.frontController.plugins.Translate = « Plugin_Translate»
Rien à faire, j’ai toujours le même message.
batmanvapromotr
3 septembre 2009 à 2:29
6The clear answer;)
Dusk
3 septembre 2009 à 9:45
7Bonjour,
Je viens ici car je commence avec Zend et je trouve très sympa ce tuto
D’autant plus que j’hésite également avec Symfony ^^
J’ai une question HS concernant cette partie ^^ Je voudrais savoir si vous comptez mettre un tutoriel de l’utilisation d’ajax avec zend en mode MVC ?
Merci
franck
5 septembre 2009 à 19:39
8sa me semble sympa, mais le démo ne fonctionne pas
Clément
5 septembre 2009 à 19:52
9@franck: A bon ? Comment ça tu obtiens une erreur ?
Clément
5 septembre 2009 à 19:53
10@Dusk: Oui et même si cela n’ai pas prévu pour le moment dans le tuto WatchMyDesk, je le ferais à part
David
6 septembre 2009 à 11:16
11Pas de réponse?
franck
6 septembre 2009 à 19:15
12@Clement, sur la première page pas d’erreur mais pas d’image comme sur les screenshots ci-haut, dans la page Login, j’ai ceci:
Information:
Message: Action « login» does not exist and was not trapped in __call() …
Clément
6 septembre 2009 à 20:06
13@franck: Normal, l’action n’ai pas encore prête, ce site est uniquement présent dans le but de présenter l’évolution du site
franck
6 septembre 2009 à 20:28
14@clement: daccord
je n’ai rien a redire alors. Je vais patienter
Ferdinand AMOI
7 septembre 2009 à 19:20
15Le lien du téléchargement du zip ne marche pas
Clément
7 septembre 2009 à 20:32
16@Ferdinand AMOI: C’est corrigé ! Désolé pour le dérangement !
serval
14 septembre 2009 à 14:25
17J’ai jamais vu de tuto avec autant de fautes de frappes, de syntaxe, de manque de rigueur dans la rédaction, absence totale d’explication, d’oubli de portions de code et j’en passe…je pense que beaucoup de personnes ont abandonné ou bien ils te disent que c’est du bon boulot pour faire plaisir (hypocrisie). Et ne demande pas des exemples de manque de rigueur il y en a des douzaines dans chaque billet Espérons aussi tu vas pas dire que peut être tu as d’autres activités qui fait que tu fais ce que tu peux pour bien faire n’est pas en soi une excuse sur un minimum de qualité
Ou bien tu te fous des lecteurs ou bien c ‘est de l’incompétence et dans les deux cas vraiment je ne te félicite pas
Regarde la qualité pédagogique du tuto symfony du site de la Ferme et prend en de la graine
j’espère que tu prendra cette critique comme une remarque constructive toi qui te prétend apporter des connaissance
Allé !!! un petit effort, courage pour la suite et bonjour chez toi
Clément
16 septembre 2009 à 9:33
18@David: tout a fait. Même si celui-ci n’est pas obligatoire grâce au méthode magique de PHP (__set et __get).
Bonne remarque
c’est corrigé
uduvudu
16 septembre 2009 à 9:37
19mdrrrrr again si tu corrige fais le correctement
protected $_view et non pas $view
car dans le constructeur on a $this->_view
Clément
16 septembre 2009 à 9:43
20@uduvudu: Corrigé autant pour moi
Merci !
blondin_59
16 septembre 2009 à 10:57
21les episodes de watchmydesk sous zendframwork en video ca serait parfait. Ou alors avoir la source de l’application uploadee ca serai bien ossi. Qu’en pensez vous ???
Clément
16 septembre 2009 à 12:18
22@blondin_59: J’y réfléchis depuis un moment et voici mon analyste :
Les vidéos me prendrais beaucoup de temps même si je pense que cela reste une excellente solution (à voir)
Pour les sources, je pense que ça peut se faire
Je vous en reparle dans peu de temps.
Merci de tes remarques !
colombey
16 septembre 2009 à 12:41
23clement ton « (a voir)» sur la remarque de blondin, n’y a t il pas dernier ca une notion de remuneration!!??
Clément
16 septembre 2009 à 13:14
24@colombey: Euuh non
Ce blog est gratuit et restera gratuit. Par contre si toute fois je faisait un énorme tuto payant, ce ne sera pas cher du tout. Et ça en vaudra la peine. Mais comme je te le dis, cela n’est pas sur du tout.
leViconte
16 septembre 2009 à 14:03
25Pour utiliser au maximum zendframework
dans index.php
Zend_layout::startMvc(APPLICATION_PATH . ‘/layouts’);
$view = Zend_Layout::getMvcInstance()->getView();
$view->doctype(’XHTML1_STRICT’);
dans layout.php on remplace les lignes de doctype par
doctype();?>
et celle de css par
headlink()->appendStylesheet(’css/main.css’);
Sinon, Tous tes DIVs (top, header, center et footer) se trouvent dans layouts et dans ton index.phtml il n’y a rien
a part
Hello !!
text; ?>
c’est ca ou j’ai mal compris ?? par ce que c’est un peu ambigu dans la succession de code plus haut
gg
17 septembre 2009 à 19:24
26réagissant par rapport au Post précédent de SERVAL, je suis 100% avec toi.
Il est dommage de voir un travail qui semble fastidieux, long et très intéressant bafoué de détails manquant qui ferait de cet ensemble un parfait Tutorial.
pour ma part, je me suis offert un bouquin et la lecture des tutoriels officiels, qui restent plus professionnel. (la gratuité délimite l’amateurisme sur le net)
Pyksel
27 septembre 2009 à 9:07
27Super génial ce tuto… Mais la suite c’est pour quand ?
eric
18 octobre 2009 à 1:14
28A partir de cet épisode, les liens permettant de changer de langue ont disparus. Si je reprends ceux que l’on avait avant, ils ne fonctionnent plus : aucun effet. Des idées ?
Clément
25 octobre 2009 à 14:52
29@eric: C’est tout a fait normal vu que les langues sont maintenant gérées depuis l’url
Gwinyam
19 novembre 2009 à 19:46
30Dis moi très cher, tu pourrais nous mettre un zip de tout watchmydesk? J’ai essayé de reproduire mais j’y arrive pas, il y a un truc qui refuse obstinément de marcher, va comprendre, perso j’ai abandonné là. C’est dommage d’ailleurs parce que tu fournis un des très rares tutos en français qui soit complet d’ailleurs^^
Gwinyam
19 novembre 2009 à 19:47
31Euh j’ai oublié de te remercier grandement pour tout
Clément
21 novembre 2009 à 17:42
32@Gwinyam: C’est prévu, pour le moment je suis un peu dépassé par les évènements ^^ mais c’est prévu !
Gwinyam
28 novembre 2009 à 17:07
33Ok, merci bien
coolmad
21 mai 2010 à 0:08
34Salut,
Très bon tuto. Je l’ai suivi jusqu’au bout mais ça ne marche pas chez moi. J’ai cette erreur
Fatal error: Class ‘Plugin_Translate’ not found
Serait il possible d’avoir tout le code source s’il te plait? Ou au moins toute la partie translation etc….
Merci d’avance
raf
25 août 2010 à 19:46
35Cela fait bien longtemps que Serval a posté son message, mais pour quelqu’un qui donne des leçons d’orthographes, il ne devrait pas oublié un s à « connaissances» loooooool.
Ton tutoriel est très bien et l’orthographe ni change rien, merci.
Laisser un commentaire
Devenir Fan de Dator.fr
Nuage de tags
Sponsors
Blogoliste
Blogs Amis
Derniers Posts
Derniers Commentaires
Les meilleurs sujets
Propulsé par WordPress