Module Internationalisation Ne Fonctionne Pas

Bonjour,

j’ai implanté les fonctionnalités d’internationalisation sur mon site web, en suivant entièrement cet article et celui là. J’utilise donc deux tables pour stocker les messages à traduire et les messages traduits.

Cependant le mécanisme de traduction ne fonctionne pas, et aucun message d’erreur ne s’affiche à l’écran; en effet lorsque j’appelle l’instruction


echo Yii::t('Menu','tata');

dans le code de la vue, j’obtiens à l’écran le message


tata.

Voici le code de la vue:




<?php


$this->pageTitle=Yii::app()->name . ' - Chants';

$this->breadcrumbs=array(

        'Chants',

);


echo "<h1>Chants</h1>";

echo Yii::t('Menu','tata');

?>

Voici le code du fichier protected/viewslayouts/main.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>


</head>


<body>


<div class="container" id="page">


        <div class="backgroundGeneral">

                <div id="mainmenu">

                        <?php $this->widget('zii.widgets.CMenu',array(

                                'items'=>array(

                                        array('label'=>'Accueil', 'url'=>array('/site/index')),

                                        array('label'=>'Curriculum vitae', 'url'=>array('/mespagesweb/cv', 'view'=>'cv')),

                                        array('label'=>'Enseignement et recherche', 'url'=>array('/mespagesweb/enseignementrecherche', 'view'=>'enseignementrecherche')),

                                        array('label'=>'Déconnexion ('.Yii::app()->user->name.')', 'url'=>array('/site/logout'), 'visible'=>!Yii::app()->user->isGuest),

                                        array('label'=>'Forum', 'url'=>array('/site/pages/introduction.php')),

                                        array('label'=>'Divers', 'url'=>array('/mespagesweb/introduction')),

                                        array('label'=>'Contact', 'url'=>array('/site/contact')),

                                        array($this->widget('application.components.widgets.languageSelector')),

                                ),

                        )); ?>


                </div><!-- mainmenu -->


                <?php echo $content; ?>


                <div class="footer">

                        Copyright &copy; <?php echo "2003-", date('Y'); ?><br/>

                        Tous droits réservés.<br/>

                </div><!-- footer -->

        </div><!--backgroundGeneral-->


</div><!-- page -->


</body>

</html>

Merci par avance pour toute aide.

Dans ton fichier de configuration (/config/main.php), il faut ajouté ceci :



'sourceLanguage' =&gt; 'en',


        'language'=&gt;'fr',

Bonjour Co-k-ine, merci pour ta réponse. J’avais déjà précisé les langages source et cible dans le fichier de configuration; voici le code du fichier de configuration:


<?php


// uncomment the following to define a path alias

// Yii::setPathOfAlias('local','path/to/local-folder');


// This is the main Web application configuration. Any writable

// CWebApplication properties can be configured here.

return array(

	'basePath'=>dirname(__FILE__).DIRECTORY_SEPARATOR.'..',

	'name'=>'Mon site web',

	//gtf ... 'defaultController' => 'home',


	// preloading 'log' component

	'preload'=>array('log'),


	// autoloading model and component classes

	'import'=>array(

		'application.models.*',

		'application.components.*',

		'application.controllers.*', 

		'application.classes.*', 


	),


	'modules'=>array(

		// uncomment the following to enable the Gii tool

		

		'gii'=>array(

			'class'=>'system.gii.GiiModule',

			'password'=>'***************',

			// If removed, Gii defaults to localhost only. Edit carefully to taste.

			'ipFilters'=>array('127.0.0.1','::1'),

		),

		

	),


	// application components

	'components'=>array(

		'user'=>array(

			// enable cookie-based authentication

			'allowAutoLogin'=>true,

		),

		// uncomment the following to enable URLs in path-format

		

		'urlManager'=>array(

			'class'=>'application.components.UrlManager',

			'urlFormat'=>'path',

			'showScriptName'=>true,

			'rules'=>array(

				'<language:(fr|en)>/' => 'site/index',

				'<language:(fr|en)>/<action:(contact|login|logout)>/*' => 'site/<action>',

				'<language:(fr|en)>/<controller:\w+>/<id:\d+>'=>'<controller>/view',

				'<language:(fr|en)>/<controller:\w+>/<action:\w+>/<id:\d+>'=>'<controller>/<action>',

				'<language:(fr|en)>/<controller:\w+>/<action:\w+>'=>'<controller>/<action>',

			),

		),

		

		'db'=>array(

			'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',

		),

		// uncomment the following to use a MySQL database

		

		'db'=>array(

			'connectionString' => 'mysql:host=localhost;dbname=gestionEmployes',

			'emulatePrepare' => true,

			'username' => 'root',

			'password' => 'root',

			'charset' => 'utf8',

		),


		'db' => array(

			'class' => 'CDbMessageSource',

			'connectionString' => 'mysql:host=localhost;dbname=internationalisation',

			'emulatePrepare' => true,

			'username' => 'root',

			'password' => 'root',

			'charset' => 'utf8',

		),


		'errorHandler'=>array(

			// use 'site/error' action to display errors

			'errorAction'=>'site/error',

		),

		'log'=>array(

			'class'=>'CLogRouter',

			'routes'=>array(

				array(

					'class'=>'CFileLogRoute',

					'levels'=>'error, warning',

				),

				// uncomment the following to show log messages on web pages

				

				/*array(

					'class'=>'CWebLogRoute',

				),*/

				

			),

		),

	),


	// application-level parameters that can be accessed

	// using Yii::app()->params['paramName']

	'params'=>array(

		// this is used in contact page

		'adminEmail'=>'tonguimferdinand@netscape.net',

	),


	'sourceLanguage' => 'en',

	'language' => 'fr', // the language that the user is using and the application should be targeted to


    'behaviors'=>array(

        'onBeginRequest' => array(

            'class' => 'application.components.behaviors.BeginRequest',

        ),

    ),


    // application components

    'components'=>array(

        'request'=>array(

            'enableCookieValidation'=>true,

		'class' => 'application.components.HttpRequest',

            'enableCsrfValidation'=>true,


        ),


        'session' => array(

		//'class'=>'application.components.CSSafeSession',

		'autoStart' => false,

		'timeout' => 86400,

	),

                // ...some other components here...

    ),

    // application-level parameters

    'params'=>array(

  	'languages'=>array('fr'=>'fr', 'en'=>'en'),

    ),

);

Je ne vois pas le problème, désolé !

Il faut attendre que Raoul passe dans le coin, il s’y connait bien :)

@co-k-ine : LOL … ben en fait je m’y connais pas tant que ça sur le sujet, vu que j’ai utilisé uniquement le composant CPhpMessageSource (pas de DB donc).

@guim : Cela étant dit, d’après la config déjà, il semble bizarre d’avoir défini 3 composants dont le nom est ‘db’ !

En fait, je crois qu’il faut déclarer le composant message de la façon suivante :




'components' => array(

   'messages' => array(

  	'class' => 'CDbMessageSource',

   ),

),



Par défaut, le composant CDbMessageSource accèdera à la base en utilisant un composant dont le nom est ‘db’. Si tu veux en changer, tu peux initialiser l’attribut ‘connectionID’.

Par exemple :




'components' => array(

   'messages' => array(

  	'class' => 'CDbMessageSource',

  	'connectionID' => 'myDb'   // utilisera le composant 'myDb'

   ),

),



Pour tous les paramètres de config CDbMessageSource, tu peux te référer à http://www.yiiframew…DbMessageSource

Bonne chance ;)

8)

slt,

Pour le multi-language sous Yii je te conseille pour démarrer l’utilisation d’une extension simple

qui utilise non pas un BDD mais des fichiers de langues php situés dans le repertoire ‘messages’.

(Yii regorge d’extension très sympathiques toutes prêtes alors pourquoi s’en priver?)

en effet c’est ce que tu devrais faire lorsque tu emploies le code

echo Yii::t(‘Menu’,‘tata’);

pour que cela fonctionne il te faut disposer d’un fichier Menu.php situé dans le rep messages/fr

ce fichier Menu.php devra contenir


<?php

return array('tata' => 'mon message en FR',

);

?>

un fichier Menu.php situé en messages/en devra contenir


<?php

return array('tata' => 'my english message',

);

?>

pour assurer la traduction en anglais

etc…

l’extension que je te suggère pour commencer le multilanguage est

http://www.yiiframework.com/extension/languagepicker

Il en existe une autre plus récente et basée sur du bootstrap(très joli skin Html5) mais je n’ai pas testé…

http://www.yiiframework.com/extension/language-picker#hh2

bon courage!

NB : oui effectivement il faudrait revoir le config/main.php, des trois déclarations ‘db’ laquelle reste en vigueur au moment de l’exécution du code?