IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Internationalisation de mon application


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut Internationalisation de mon application
    Bonjour

    J'ai une application que je souhaiterais internationaliser mais pour l'instant j'ai du mal à jongler avec les fichiers de propriétés et les locales; et mon expérience en PHP est assez minime.

    J'ai de l'expérience en Java donc c'est peut-être pour çà que j'y arrive pas: peut-être je reproduis des patterns de Java, à vous de me dire si çà change en PHP!
    J'ai donc un fichier header.php dans lequel j'ai des menus que je veux internationaliser/localiser : c'est là où je fais un $resourcesReader->getResource('home').
    Dans le getResource(), je récupère la locale et j'essaie d'afficher le contenu de $fr[$key], $fr ou $es ou $en dépendant de la locale, et définis dans Resources.php.
    Mais rien ne s'affiche....


    Voilà j'ai donc mon fichier index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php include 'include/header.php';?>
    J'ai également mon fichier include/header.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    <?php 
    	session_start();
     
    	include_once 'resources/Constants.php';
    	include_once 'include/locale.php';
    	include_once 'include/ResourcesReader.php';
     
    	$resourcesReader = new ResourcesReader();
     
    ?>
    <!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>
     
    </head>
    <body>
    	<div class="header">
    		<div class="lang">
    			<!-- defininition des trois liens pour changer de langue -->
    			<?php foreach ($AVAILABLE_LANGUAGES as $languageKey => $languageValue) { ?>
    				<a href="?language=<?=$languageKey?>"><?=$languageValue?></a>&nbsp;
    			<?php }?>
    		</div>
     
    		<!-- links -->
    		<div class="menu">
    			<a href="index.html"><?=$resourcesReader->getResource('home')?></a>
    			&nbsp;&nbsp;
    			<a href="about.html"><?=$resourcesReader->getResource('aboutme')?></a>
    			&nbsp;&nbsp;
    Voilà mon fichier resources/Constants.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    	$AVAILABLE_LANGUAGES = array(
    					'fr' => 'FR',
    					'en' => 'EN',
    					'es' => 'ES' );
     
    	$DEFAULT_LOCALE = 'en';
    ?>
    Voici mon fichier include/locale.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <?php
     
    	include_once 'resources/Constants.php';
     
    	// if the language change, set/update the cookie and put the language in session
    	if (isset($_GET['language'])){
    		$locale = $_GET['language'];
    		setcookie('locale',$locale);
    		$_SESSION['locale'] = $locale;
    		//setlocale(LC_ALL,$locale);
    	} 
     
    	// if the locale is not set in session, then try to get it from a cookie or use the default locale
    	if (!isset($_SESSION['locale'])){
    		if (isset($_COOKIE['locale'])){
    			$_SESSION['locale'] = $_COOKIE['locale'];
    		} else {
    			$_SESSION['locale'] = Constants.DEFAULT_LOCALE; 
    		}
    	}
    ?>
    Mon fichier include/ResourcesReader.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
     
    include_once 'resources/Resources.php';
     
    class ResourcesReader {
     
    	private $_map;
     
    	public function __construct(){
    		$this->_map = "";
    	}
     
    	public function getResource($key){
     
    		if (isset($_SESSION['locale'])){
    			switch ($_SESSION['locale']){
    				case 'fr': return $fr[$key];break;
    				case 'es': return $es[$key];break;
    				case 'en': return $en[$key];break;
    				default: return this::$en[$key];break;
    			}
    		} else {
    			return this::$en[$key];break;
    		}
     
    	}
    }
     
    ?>
    Mon fichier resources/Resources.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
     
    	$fr = array(
    		'home' => 'accueil',
    		'aboutme' => 'ˆ propos de moi');
     
    	$en = array(
    		'home' => 'home',
    		'aboutme' => 'about me');
    ?>

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    Merci d'avance pour votre aide, j'ai essayé pas mal de trucs donc j'ai posté là une des choses auxquelles j'ai pensé...

    J'ai mis une partie seulement des fichiers, le reste étant à mes yeux sans intéret par rapport à mon problème...

    J'imagine que je devrais penser à mettre dans un fichier séparé pour chaque resource, mais pour l'instant j'essayais de faire le lien déjà jusqu'à ma classe Resources.php, ce qui me parait une solution plus simple que 3 fichiers pour les 3 langues!

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 74
    Par défaut
    Bonjour,

    Vous avez un problème de scope au niveau de vos variables.

    En effet ce que vous avez fait revient à cela :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $var = 1;
    function toto() {
      return $var; // null car dans le scope de la fonction toto(), $var n'existe pas
    }

    Si vous souhaitez accéder à cette variable $var dans votre fonction (ou classe) vous devez la déclarer comme étant "global"

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $var = 1;
    function toto() {
       global $var;
       return $var; // 1 car PHP va chercher au dela du scope de la fonction pour la variable $var
    }

    Votre méthode "getResource" peut donc devenir :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    	public function getResource($key){
     
    		if (isset($_SESSION['locale'])){
    			switch ($_SESSION['locale']){
    				case 'fr':
                                        global $fr;
                                        return $fr[$key];
                                        break;
    				case 'es':
                                        global $es; 
                                        return $es[$key];
                                        break;
                                    // etc...
    			}
    		} else {
    			return this::$en[$key];break;
    		}
     
    	}

    Par contre la ligne this::$en[$key] ne vous produit aucune erreur ? Car this ne correspond à rien, si vous voulez vous référer à la classe elle-même c'est soit $this soit self.

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    Merci beaucoup pour la réponse çà va bien m'aider...
    Mais alors, pourquoi aucune erreur ne m'est sortie si la variable était inconnue?
    Rah c'est dur!..

    Je vais essayer rapidement de faire marcher le debugger de mon Eclipse, je pense que çà m'aidera!

    Merci :-)

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    179
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 179
    Par défaut
    Je vous remercie, je viens d'essayer et çà marche bien!

Discussions similaires

  1. Création d'un alias via mon application
    Par Neilos dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/10/2003, 00h29
  2. Comment faire générer du rtf par mon application?
    Par nickylarson dans le forum C++Builder
    Réponses: 3
    Dernier message: 13/08/2003, 10h35
  3. [Access] Mon application est détruite !!!
    Par mathias dans le forum Access
    Réponses: 4
    Dernier message: 26/06/2003, 15h14
  4. Réponses: 7
    Dernier message: 26/06/2003, 10h11
  5. Impossible de quitter mon application!
    Par Bouillou dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/11/2002, 21h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo