Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1 2
Salut Akis,
Akis a écrit:
//edit : En fait, c'était à cause de moi, je faisais aucun echo
Je te rassure, cela m'est souvent arrivé et ça m'arrive encore. ;-)
Concernant le pluriel, je pense qu'il est préférable de faire deux traductions différentes, car selon les langues, le pluriel n'est pas forcément géré de la même manière.
Sinon, je n'ai pas compris ta dernière phrase, peux tu être un peu plus explicite?
Cordialement, Azema.
Dernière modification par Azema (22-06-2008 19:26:30)
Hors ligne
Pour les variables dans les traductions, tu peut passer par un print_f :
print_f($translate->_("Ma valeur = %s"),$valeur);
En gros le translate va renvoyer sa chaine au print_f, qui va lui se débrouiller.
J'avais chercher aussi pour afficher des messages d'erreur tout en affichant la valeur de l'élement incorrect, par exemple pour le mail, afficher :
"bla@bla n'est pas une adresse email valide"
Hors ligne
Bonjour,
j'ai suivi le tutoriel mais zend me sort une erreur comme quoi aucun fichier langue fr à été trouvé.
En effet :
$translate = new Zend_Translate ($adaptateur, '/languages/fr/default.mo', 'fr');
Je ne vois pas le moment où l'on cré ce fichier dans ce tuto.
Un peu d'aide serait la bienvenue.
Merci.
Hors ligne
Bonjour,
C'est à la fin du point 7 du tuto. C'est un fichier de traduction créé avec POEdit (ou xgettext).
A+, Philippe
Hors ligne
Bonjour,
Merci pour ta réponse.
Ben justement à la fin du 7 il y 'a :
"Il ne vous reste plus qu'a enregistrer votre catalogue et vous devriez retrouver votre fichier default.mo dans le répertoire /language/en/"
Mais quand est ce qu'on complète /language/fr/ ??
Merci d'avance.
Hors ligne
Si le français est la langue de base du site, tu n'as pas à utiliser un fichier de traduction pour le français.
Tu n'as besoin de fichier de traduction que pour les autres langues.
A+, Philippe
Hors ligne
Comment indique t on ça alors ?
// Nous instancions l'objet Zend_translate en indiquant comme première langue le français. $translate = new Zend_Translate ($adaptateur, '/languages/fr/default.mo', 'fr'); // Nous ajoutons la langue anglaise $translate->addTranslation('/languages/en/default.mo', 'en');
Il faut changer quelque chose là non puisque le fichier "/languages/fr/default.mo" n'existera donc pas ?
Merci
Hors ligne
Bonjour titpapy,
titpapy a écrit:
// Nous instancions l'objet Zend_translate en indiquant comme première langue le français.
$translate = new Zend_Translate ($adaptateur, '/languages/fr/default.mo', 'fr');
Le fichier /languages/fr/default.mo est vide. Nous indiquons seulement à l'objet translate quelle langue nous souhaitons utiliser.
Mais dans tes sources, les textes sont en français, nous n'avons donc pas de traductions à réaliser, par contre si par exemple, il y avait du texte, dans les sources, en anglais, il faudrait que le fichier cité plus haut, contienne les traductions en français.
Si par contre, tu décides de mettre la langue de ton site en anglais, il te faudra traduire le français de tes sources en anglais. Et c'est là que ton fichier /languages/en/default.mo va jouer son rôle.
Cordialement, Azema.
Hors ligne
Ok d'accord cette fois j'ai tout saisi
Merci de votre aide précise et utile.
Bonne continuation.
Hors ligne
J'obtiens l'erreur suivante :
default.mo est vide
<b>Fatal error</b>: Uncaught exception 'Zend_Translate_Exception' with message ''../languages/fr/default.mo' is not a gettext file' in D:\wamp\www\statsgame\library\Zend\Translate\Adapter\Gettext.php:95 Stack trace: #0 D:\wamp\www\statsgame\library\Zend\Translate\Adapter.php(407): Zend_Translate_Adapter_Gettext->_loadTranslationData('../languages/fr...', 'fr', Array) #1 D:\wamp\www\statsgame\library\Zend\Translate\Adapter.php(193): Zend_Translate_Adapter->_addTranslationData('../languages/fr...', 'fr', Array) #2 D:\wamp\www\statsgame\library\Zend\Translate\Adapter.php(108): Zend_Translate_Adapter->addTranslation('../languages/fr...', 'fr', Array) #3 D:\wamp\www\statsgame\library\Zend\Translate\Adapter\Gettext.php(51): Zend_Translate_Adapter->__construct('../languages/fr...', 'fr', Array) #4 D:\wamp\www\statsgame\library\Zend\Translate.php(121): Zend_Translate_Adapter_Gettext->__construct('../languages/fr...', 'fr', Array) #5 D:\wamp\www\statsgame\library\Zend\Translate.php(72): Zend_Translate->setAdapter('gettext', '../languages in <b>D:\wamp\www\statsgame\library\Zend\Translate\Adapter\Gettext.php</b> on line <b>95</b><br>
EDIT :
En remplaçant avec fr/default.mo (vide) par en/default.mo mes textes sont retraduit en anglais alors que je suis en français pourtant ça ne devrait pas ?
Solution :
Reprendre les fichiers sources (php, phtml), commenter tous les blocs de traductions afin de pouvoir les supprimer
Cliquer sur mettre à jours le catalogue et valider
Placer le fichier en/default.po dans fr/default.po (écraser si besoin)
Décommenter les fichiers sources
Cliquer sur mettre à jours le catalogue et valider
Traduire dans la langue voulue
Dernière modification par etaty (29-10-2008 18:43:05)
Hors ligne
Bonjour,
Merci pour ce tutorial.
Il ne me reste qu'un seul soucis... Lorsque j'essaie de faire une traduction dans mon IndexController, j'ai une erreur :
Notice: Undefined variable: translate in /volume1/web/OZ_0001/application/controllers/IndexController.php on line 10
Fatal error: Call to a member function _() on a non-object in /volume1/web/OZ_0001/application/controllers/IndexController.php on line 10
Voici mon bout de code :
<?php
$translate = Zend_Registry::get('translate');
// La classe correspond au controller INdex qui est le controleur par défaut
class IndexController extends Zend_Controller_Action
{
function indexAction()
{
$this->view->title = $translate->_("Voici le titre de ma page");
$this->view->selectedIndex = "current";
$this->view->selectedCompte = "";
}}
Hors ligne
Salut,
D'après ce qui a été dit dans ce topic, la méthode "_()" n'est dispo que dans la vue.
Dans le controlleur (avec ton code):
$translate->translate('chaine à traduire');
A+ benjamin.
Dernière modification par Delprog (04-10-2009 19:03:14)
Hors ligne
Non, en fait tu peux appeler la méthode translate dans le controller à partir de l'objet view.
$this->view->translate("Ma chaine à traduire");
ou bien
$this->view->_("Ma chaine à traduire");
Les deux formes doivent fonctionner.
P.S.: Petite astuce, car je viens de me confronter au problème. Il faut utiliser les doubles quotes dans la méthode translate.
$this->view->translate("Ma chaine sera récupérée par PoEdit"); $this->view->translate('Ma chaine ne sera pas récupérée par PoEdit');
Idem dans les fichiers de vue, du style les *.tpl
Faîtes attention aux chaines dans les balises JavaScript, si votre méthode se trouve entre quotes (simples ou doubles), PoEdit ne retrouvera pas la chaine.
Du moins, c'est ce qui m'est arrivé.
Bon courage à tous.
Hors ligne
Bonjour à tous,
Voici un nouvel élément que je souhaitais ajouter à ce tuto, il s'agit de la forme plurielle dans PoEdit et Zend_Translate.
Il y a plusieurs manipulation à faire :
+ Dans PoEdit, allez dans la configuration de vos catalogues :
-- vous devez ajouter "nplurals=2; plural=n>1;" dans Formes plurielles dans les informations générales. (sans les quotes)
-- et "plural:1,2" dans les mots clefs. (sans les quotes)
+ Dans votre projet Zend, utiliser la méthode "plural" de Zend_Translate pour utiliser les formes plurielles.
La signature de la méthode plural:
[lang=php]plural(string $formeSinguliere, string $formePlurielle, int $nbElements)
Bon courage à vous
Hors ligne
Pages: 1 2