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 :

Conseils conception d'un site multi-langues


Sujet :

Langage PHP

  1. #41
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    J'utilise des tableaux car cela me permet de séparer mes traductions en plusieurs catégorie. Je peux par exemple créer une catégorie par fichier php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    $lang['common'] = array();
    $lang['common']['lang'] = 'English';
    $lang['common']['date_format'] = 'm/d/Y';
    $lang['common']['money_symbol'] = '£';
    $lang['common']['money_name'] = 'Pound';
    $lang['common']['test'] = '';
    $lang['index.php'] = array();
    $lang['index.php']['text1'] = 'texte 1';
    $lang['index.php']['text2'] = 'texte 2';
    $lang['page1.php'] = array();
    $lang['page1.php']['text1'] = 'texte 1';
    En ce qui concerne xml, je ne suis pas très fan, je préfère tout charger en php directement.

    Pour la fonction define, elle sert uniquement à créer des constantes (des "variables" qui ne peuvent pas etre modifier par la suite dans le code).
    Don en gros, si tu ne réutilise pas la variable $lang dans ton code, tu ne devrais pas avoir de problème.
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  2. #42
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    je ne sais comment te remercier

    Je peux par exemple créer une catégorie par fichier php
    je pense que c'est ce que je vais faire:
    fr_errors.php
    fr_buttons.php
    fr_titles.php
    fr_messages.php
    ...
    comment ca j'appelle uniquement les fichiers dont j'ai besoin!!

    oh lala, j'ai un peu de mal a comprendre ton script, je vais devoir m'en inspirer pour creer un script adapter a mon cas!!
    puisque je vais avoir differents fichiersnpas langue, pense tu qu'un systeme d'anglets sera bien adapte a mon cas??

    quelle est la difference entre fr_nom.icn.php et fr_nom.php ?? j'imagine pas grand chose!!

    Donc en gros, si tu ne réutilise pas la variable $lang dans ton code, tu ne devrais pas avoir de problème.
    je ne vois pas trop ce que tu veux dire!!
    je ne sais toujours pas si je dois utiliser des simples variable, ou des tableaux ou la fonction define()
    que me recommandes tu?

  3. #43
    Membre du Club
    Homme Profil pro
    Épine dans le pieds
    Inscrit en
    Mai 2004
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Épine dans le pieds

    Informations forums :
    Inscription : Mai 2004
    Messages : 425
    Points : 55
    Points
    55
    Par défaut
    Je continue ma revue du web sur ce sujet (à défaut de connaissances propres ) :

    Pas très loin d'ici, une évocation des différentes méthodes.

    Il y a aussi celui-ci qui contient des éléments intéressants.

    Bonne journée

    Px

  4. #44
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    ca y est, je ne vais pas m'eterniser sur ce sujet, j'ai opté pour des fichiers de textes et j'ai deja commence a bosser la dessus. j'espere ne pas regreter ce choix!!

    j'ai cree 5 fichiers dans le dossier fr ou en:
    buttons.inc.php
    email.inc.php
    errors.icn.php
    general.inc.php
    texts.inc.php

    puis a l'interieur de ces fichiers j'ai declarer mes variable sans utiliser la fameuse fonction define(). afin de ne pas rencontrer un conflit de variable, toutes les variables contenues dans les fichiers de langues commencent par $int_variable (int pour international)

    j'espere par la suite pouvoir creer une interface simple pour les traducteurs...

  5. #45
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    J'utilise également le même fonctionnement, lire un fichier (peu volumineux) est souvent bien plus rapide qu'une requête SQL.

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    <?php
     
    /**
     * @author Thomas RAMBAUD
     * @copyright 2009
     */
     
    class culture{
    	private $code, $name, $texts, $languages;
    	public $dom;
    	const TEXT_NOT_FOUND = '[%s]';
     
    	public function __construct($code = 'fr'){					
    		$this->dom = new DOMDocument('1.0');
    		$this->dom->load(iJROOT.'core/resources/'.$code.'/texts.xml');
    		$this->code = $code;		
    		$texts = $this->dom->getElementsByTagName('text');		
    		for ($i = 0; $i < $texts->length; $i++) {
    			$this->texts[$texts->item($i)->getAttribute('id')] = $texts->item($i);
    		}
    	}
     
    	public function getString($alias, $tolower = false){
    		if(!isset($this->texts[$alias]))
    			return sprintf(self::TEXT_NOT_FOUND, $alias);			
    		else 
    			return ($tolower) ? strtolower($this->texts[$alias]->nodeValue) : $this->texts[$alias]->nodeValue;
     
    	}
     
    	public function getStrings(){
    		return $this->texts;
    	}
     
    	public function getEncoding(){
    		return $this->dom->documentElement->getAttribute('encoding');
    	}
     
    	public function getDir(){
    		return $this->dom->documentElement->getAttribute('dir');
    	}			
     
    	public function getLanguages(){
    		if($this->languages === NULL){
    		    $this->languages= array();
    		    $rep = iJROOT.'core/resources/';
    	        $dir = opendir($rep);
    	        while($f = readdir($dir)){
    	            if($f !== '.' && $f !== '..' && is_dir($rep.$f)) $this->languages[] = $f;
    	        }
    	        closedir($dir);	
    		}
            return $this->languages;
        }
     
    	public function save(){
    		$this->dom->save(iJROOT.'core/resources/'.$this->code.'/texts.xml');
    	}
     
    	public function getCode(){
    		return $this->code;
    	}
    }
    ?>
    Fichier core/resources/en/texts.xml :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <language code="en" encoding="ISO-8859-1" dir="ltr">
    	<text id="administration"><![CDATA[Administration]]></text>
    	<text id="adda"><![CDATA[Add a %s]]></text>
    	<text id="valid">Valid</text>
    	<text id="create"><![CDATA[Create]]></text>
    	<text id="creation"><![CDATA[Creating]]></text>
    	<text id="close"><![CDATA[Close]]></text>
    	<text id="contact"><![CDATA[Contact]]></text>
    	<text id="aboutus"><![CDATA[About us]]></text>
    	<text id="properties"><![CDATA[Properties]]></text>
    	<text id="name"><![CDATA[Name]]></text>
    	<text id="alias"><![CDATA[Alias]]></text>
    	<text id="content"><![CDATA[Content]]></text>
    	<text id="documents"><![CDATA[Documents]]></text>
    	<text id="document"><![CDATA[Document]]></text>
    	<text id="user"><![CDATA[User]]></text>
    	<text id="users"><![CDATA[Users]]></text>
    	<text id="usertypes"><![CDATA[User types]]></text>
    	<text id="usertype"><![CDATA[User type]]></text>
    	<text id="documenttypes"><![CDATA[Document types]]></text>
    	<text id="documenttype"><![CDATA[Document type]]></text>
    	<text id="datatypes"><![CDATA[Datatypes]]></text>
    	<text id="datatype"><![CDATA[Datatype]]></text>
    	<text id="parameters"><![CDATA[Parameters]]></text>
    	<text id="parameter"><![CDATA[Parameter]]></text>
    	<text id="templates"><![CDATA[Templates]]></text>
    	<text id="template"><![CDATA[Template]]></text>
    	<text id="scripts"><![CDATA[Scripts]]></text>
    	<text id="script"><![CDATA[Script]]></text>
    	<text id="defaulttemplate"><![CDATA[Default template]]></text>
    	<text id="allowedtemplates"><![CDATA[Allowed templates for this document types]]></text>
    	<text id="nameexists"><![CDATA[A %s with this name already exists]]></text>
    	<text id="infos"><![CDATA[Infos]]></text>
    	<text id="tabs"><![CDATA[Tabs]]></text>
    	<text id="tab"><![CDATA[Tab]]></text>
    	<text id="name"><![CDATA[Name]]></text>
    	<text id="order"><![CDATA[Order]]></text>
    	<text id="description"><![CDATA[Description]]></text>
    	<text id="alloweddocumenttypes"><![CDATA[Children document types allowed]]></text>
    	<text id="manageproperties"><![CDATA[Manage properties]]></text>
    	<text id="managetabs"><![CDATA[Manage tabs]]></text>
    	<text id="addproperty"><![CDATA[Add a new property]]></text>
    	<text id="delete"><![CDATA[Delete]]></text>
    	<text id="sort"><![CDATA[Sort]]></text>
    	<text id="cut"><![CDATA[Cut]]></text>
    	<text id="paste"><![CDATA[Paste]]></text>
    	<text id="refresh"><![CDATA[Refresh]]></text>
    	<text id="quit"><![CDATA[Exit]]></text>
    	<text id="cancel"><![CDATA[Cancel]]></text>
    	<text id="search"><![CDATA[Search]]></text>
    	<text id="searchresults"><![CDATA[Search results]]></text>
    	<text id="searchresultscountfor"><![CDATA[%1$s results for &quot;%2$s&quot;]]></text>
    	<text id="noresult"><![CDATA[No results]]></text>
    	<text id="regexvalidation"><![CDATA[Validation RegEx]]></text>
    	<text id="regexvalidationerrormsg"><![CDATA[Message if error while validating RegEx]]></text>
    	<text id="saved"><![CDATA[saved]]></text>
    	<text id="deleted"><![CDATA[deleted]]></text>
    	<text id="modified"><![CDATA[modified]]></text>
    	<text id="cacheduration"><![CDATA[Cache duration]]></text>
    	<text id="password"><![CDATA[Password]]></text>
    	<text id="email"><![CDATA[E-mail]]></text>
    	<text id="languages"><![CDATA[Languages]]></text>
    	<text id="language"><![CDATA[Language]]></text>
    	<text id="relatedinfos"><![CDATA[Related informations of %1$s %2$s]]></text>
    	<text id="roles"><![CDATA[Roles]]></text>
    	<text id="role"><![CDATA[Role]]></text>
    	<text id="publish"><![CDATA[Publish]]></text>
    	<text id="areyousure"><![CDATA[Are you sure ?]]></text>
    	<text id="yes">Yes</text>
    	<text id="no">No</text>
    	<text id="datatypecontrol"><![CDATA[Datatype editor control]]></text>
    	<text id="controlnotfound"><![CDATA[The control %s cannot be found.<br/>]]></text>
    	<text id="type"><![CDATA[Type]]></text>
    	<text id="move"><![CDATA[Move]]></text>
    	<text id="urlpart"><![CDATA[Part of the URL of the document]]></text>
    	<text id="associatedtemplate"><![CDATA[Associated template]]></text>
    	<text id="sortingdocumentofcategory"><![CDATA[Sorting child document of %s]]></text>
    	<text id="loadinprogress"><![CDATA[Load in progress]]></text>
    	<text id="documentmoved"><![CDATA[The document %s has been correctly moved to %s]]></text>
    	<text id="movingdocument"><![CDATA[Moving document]]></text>
    	<text id="movingtemplate"><![CDATA[Moving template]]></text>
    	<text id="documentnotallowedhere"><![CDATA[The document type %s is not allowed in the document type %s]]></text>
    	<text id="errorwhilemoving"><![CDATA[Error while moving]]></text>
    	<text id="configuration"><![CDATA[Configuration]]></text>
    	<text id="configurationgeneral"><![CDATA[General]]></text>
    	<text id="configurationsaves"><![CDATA[Backups]]></text>
    	<text id="never"><![CDATA[Never]]></text>
    	<text id="icon"><![CDATA[Icon]]></text>
    	<text id="status"><![CDATA[Status]]></text>
    	<text id="created_by"><![CDATA[Created by %1$s on %2$s]]></text>
    	<text id="creator"><![CDATA[Creator]]></text>	
    	<text id="change"><![CDATA[Change]]></text>
    	<text id="setchildrenstatus"><![CDATA[Set children status]]></text>
    	<text id="views"><![CDATA[Views]]></text>
    	<text id="view"><![CDATA[View]]></text>
    	<text id="import_tab"><![CDATA[Importer a tab]]></text>
    	<text id="published"><![CDATA[Published]]></text>
    	<text id="unpublished"><![CDATA[Unpublished]]></text>
    	<text id="validated"><![CDATA[Validated]]></text>
    	<text id="created"><![CDATA[Created]]></text>
    	<text id="showhide"><![CDATA[Show / Hide]]></text>
    </language>
    À utiliser comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $c = new culture('en');
    echo $c->getString('errorwhilemoving');
    J'ai extrait cette classe de mon CMS mais elle doit fonctionner de manière otarcique.

  6. #46
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    trop de choix tue le choix lol

    j'avoue n'avoir jamais codé et utilisé les classes & orienté objet en PHP
    ta solution semble tres propre et claire mais j'ai peur de me lancer dans une affaire que je ne maitrise pas!!

    j'en profite pour te poser une question tres importante pour moi:

    lorsqu'on a par exemple un fichier d'inclusion php: text.php qui contient ce qui suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $var1 = "valeur 1";
    $var2 = "valeur 2";
    $var3 = array("valeur 1", "valeur 2", "valeur 3");
    est il facile de modifier/ ajouter/ supprimer une variable de ce fichier et comment?

    Merci

  7. #47
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Non c'est un peu compliqué, notamment car il y a de nombreuses méthodes déclarer / remplir un tableau (j'ai déjà utilisé cette technique).

    Mais c'est pas impossible, suffirait que tu génères un tableau :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // on a édité les chaines de language, on les a stocké dans  un tableau $strings, maintenant on veux modifier le fichier où elles sont stockées
    // $strings array[string]string
    $file_content = '$strings = array(';
    foreach($strings as $key => $val){
        $file_content .= '\''.$key.'\' => \''.$val.'\'';
    }
    $file_content .= ');';
    // fwrite
    Autre solution, utiliser serialize/unserialize, ca te permet de faire ca facilement.

  8. #48
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    oh lalaaa, je suis donc obligé d'avoir que des variables array???
    j'ai pour l'instant declare des variables comme ca:
    $int_agenda_all = "Agenda complet";
    $int_articles_all = "Voir tous les articles";
    $int_books_all = "Voir tous les ouvrages";
    $int_books_iir = "Ouvrages IIF";
    ...

    faut il tout refaire?????

  9. #49
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    bonjour, j'espere que vous avez passe un bon week end!!

    je cogite beaucoup en ce moment par rapport a la maniere d'implementer les fichiers langues, car une fois la decision prise, plus moyen d'y revenir.

    c'est sur que là j'utiliserai les fichiers texts mais comme "ThomasR" a dit, ca risque d'etre complique pour mettre a jour ce fichier texte!!
    en faisant des recherches j'ai trouve la fonction file() http://fr.php.net/manual/fr/function.file.php qui retourne le contenu du fichier dans un tableau, penses tu que cette fonction peut regler le probleme??

    sinon, je reflechis aussi a mettre en place un fichier xml comme "ThomasR" a mentionne dans son premier message mais y a t il un moyen simple de recuperer la valeur souhaitee sans passer par les fonction et classes etant donné que je suis en PHP5 et que simplexml a l'air d'etre simple comme son nom l'indique??

    merci beaucoup

  10. #50
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    +10 pour le XML
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  11. #51
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par Thes32 Voir le message
    +10 pour le XML
    qu'est ce que tu veux dire par ca???

  12. #52
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Citation Envoyé par redah75 Voir le message
    qu'est ce que tu veux dire par ca???
    C'est une excellente idée de passer par XML...
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  13. #53
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    oui, c'est ce que je me suis dit mais je galere pour adopter cette solution. j'ai meme lance un topic a ce sujet: http://www.developpez.net/forums/d84...hp5-simplexml/

    ca serai sympa si tu peux y donner ton avis

    Merci

  14. #54
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Citation Envoyé par redah75 Voir le message
    personnellement, je n'ai pas utilisé une table de donnees pour les traductions.
    j'ai creer des fichiers langues (fr.php, en.php) qui contiennt TOUS les textes, titres et messages contenus sur le site web en les definissant avec la fonction define("VARIABLE", "Valeur");

    reste a savoir si c'est la bonne methode et comment stocker des variables de type tableau avec define()
    Bonjour,

    Donc tu dois taper du code à chaque fois que tu veux ajouter une chaine à traduire ? Ca doit être laborieux..

    define sert à déclarer des constantes, donc pas de tableau.

    Je trouve qu'une classe dédiée, qui s'appuie soit sur des fichiers soit sur une base de données, est plus interessant, et surtout plus maintenable.

  15. #55
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Bonjour Thomas,

    au fait j'ai opté pour un fichier xml en me basant sur le premier script que tu m'as filé et je t'en remercie. la discussion et les questions sont en cours sur cette page : http://www.developpez.net/forums/d84...hp5-simplexml/
    je metterai a jour ce topic une fois que j'aurai tous les elements pour ceux a qui ca peut interesse

  16. #56
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Enfinnnnnnn
    j'aimerais juste vous faire part de la solution pour la quelle j'ai opté et qui me parait la plus adapté apres des semaines de cogitation et de recherche!!

    j'utiliserai des fichiers textes pour les traductions mais des fichiers xml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <translation>
    	<a>Administration</a>
    	<d>Load in progress</d>
    	<e>The document %s has been correctly moved to %s</e>
    	<f>Moving document</f>
    	<g>Moving template</g>
    	<h>The document type %s is not allowed in the document type %s</h>
    	<z>valeur</z>
    </translation>
    bien évidemment remplacer <a>, <b>, ... par le nom des variables

    ensuite a l'aide de la fonction simpleXML (PHP5 et +), je peux faire differentes manips en toute simplicité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // inclure le fichier text
    $xml = simplexml_load_file("chemin/fr ou en/fichier.inc.xml") ;
     
    // ajouter un element (variable a traduire)
    $xml->addChild('variable', 'valeur');
     
    // mettre a jour un element
    $xml->c = "Nouvelle valeur";
     
    // supprimer un element
    unset($xml->b);
     
    // et enfin enregistrer le fichier
    $xml->saveXML("fichier.inc.xml");
    voila en gros comment il faut proceder

    A bientot

  17. #57
    Membre du Club
    Homme Profil pro
    Épine dans le pieds
    Inscrit en
    Mai 2004
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Épine dans le pieds

    Informations forums :
    Inscription : Mai 2004
    Messages : 425
    Points : 55
    Points
    55
    Par défaut
    Bonjour,

    Je vais essayer la structure détaillée dans ton dernier post mais je voudrais juste avoir 3 précisions.

    Dans ton fichier xml, tu crées une sous-partie qui s'appelle "translation":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <translation>
    	<a>Administration</a>
    	<d>Load in progress</d>
    	<e>The document %s has been correctly moved to %s</e>
    	<f>Moving document</f>
    	<g>Moving template</g>
    	<h>The document type %s is not allowed in the document type %s</h>
    	<z>valeur</z>
    </translation>
    - Sais-tu si on peut créer plusieurs sous-parties, et si oui, peut-on attribuer le même nom à deux variables chacune située dans une sous-partie différente. Dans ce cas, comment accède-t'on à ces variables ?

    - Existe-t'il une méthode particulière pour ajouter une information à ces variables, en plus de leur nom et de leur contenu, un séparateur prévu dans le format xml, ou un genre de méthode array ?

    - Je vois que tu affectes un signe % aux valeurs non constantes, situées à l'intérieur des chaînes, vas-tu utiliser un simple str_replace pour affecter la valeur au moment de l'utilisation de la variable xml ou existe-t'il une méthode normalisée pour ça ?

    De mon coté, j'ai fait des recherches sur les différentes méthodes de publication de contenus et je ne suis pas absolument convaincu des avantages du xml sur le stockage en base de données.

    Par exemple, des CMS comme joomla font un usage intensif des bases de données pour générer leurs pages. Pourquoi procéder ainsi alors que le xml semble relativement facile à mettre en oeuvre ? ll existe des sites très fréquentés ( http://www.gazzetta.gr) sous Joomla avec des temps de réponses plutôt rapides.

    Merci de vos avis.

    Px

  18. #58
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par Perplexe Voir le message
    - Sais-tu si on peut créer plusieurs sous-parties, et si oui, peut-on attribuer le même nom à deux variables chacune située dans une sous-partie différente. Dans ce cas, comment accède-t'on à ces variables ?
    Oui mais il faut alors ajouter un niveau supplémentaire étant donné qu'un document XML ne peut avoir qu'un élément racine. Et gérer cela en conséquence (ie : $sxml->sous-partie->msgid).

    Citation Envoyé par Perplexe Voir le message
    - Existe-t'il une méthode particulière pour ajouter une information à ces variables, en plus de leur nom et de leur contenu, un séparateur prévu dans le format xml, ou un genre de méthode array ?
    ?

    Citation Envoyé par Perplexe Voir le message
    - Je vois que tu affectes un signe % aux valeurs non constantes, situées à l'intérieur des chaînes, vas-tu utiliser un simple str_replace pour affecter la valeur au moment de l'utilisation de la variable xml ou existe-t'il une méthode normalisée pour ça ?
    C'est le format des fonctions v?s?printf. Pas besoin de faire les remplacements à la main.

    Citation Envoyé par Perplexe Voir le message
    Par exemple, des CMS comme joomla font un usage intensif des bases de données pour générer leurs pages. Pourquoi procéder ainsi alors que le xml semble relativement facile à mettre en oeuvre ? ll existe des sites très fréquentés ( http://www.gazzetta.gr) sous Joomla avec des temps de réponses plutôt rapides.
    Ça dépend de la gestion qu'on veut ou non avoir dessus (avec gettext c'est plutôt à la main), du contenu (pour un CMS, il n'y a pour ainsi dire que la base de donnée qui soit adaptée) et des performances recherchées.

  19. #59
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 901
    Points : 79
    Points
    79
    Par défaut
    Existe-t'il une méthode particulière pour ajouter une information à ces variables, en plus de leur nom et de leur contenu, un séparateur prévu dans le format xml, ou un genre de méthode array ?
    peut etre ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <element id="id_element" couleur="couleur" ...>texte traduit</element>
    - Je vois que tu affectes un signe % aux valeurs non constantes, situées à l'intérieur des chaînes, vas-tu utiliser un simple str_replace pour affecter la valeur au moment de l'utilisation de la variable xml ou existe-t'il une méthode normalisée pour ça ?
    j'allais te dire sprintf mais etant donné que je n'ai jamais utilise cette fonction, je t'avoue ne pas savoir la difference entre vprintf, sprintf et vsprintf!!

  20. #60
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Citation Envoyé par redah75 Voir le message
    peut etre ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <element id="id_element" couleur="couleur" ...>texte traduit</element>
    En XML on fera plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <section name="authentication">
        <text id="login">Identifiant</text>
        <text id="password">Mot de passe</text>
    </section>
    ...
    Citation Envoyé par redah75 Voir le message
    j'allais te dire sprintf mais etant donné que je n'ai jamais utilise cette fonction, je t'avoue ne pas savoir la difference entre vprintf, sprintf et vsprintf!!
    vprintf est l'équivalent de printf mais un tableau est passé en paramètre au lieu de fournir chaque argument comme paramètre de la fonction.

    vsprintf est l'équivalent de sprintf mais un tableau est passé en paramètre comme décrit précédemment.

    http://fr.php.net/manual/fr/function.vsprintf.php

Discussions similaires

  1. Utilisation XML/XSL pour un site multi langues
    Par bigsister dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 22/01/2007, 17h36
  2. Site multi langue
    Par didarmor dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 14/12/2006, 23h42
  3. Problème site multi langues
    Par dolf13 dans le forum Langage
    Réponses: 9
    Dernier message: 31/08/2006, 13h05
  4. Réponses: 12
    Dernier message: 04/11/2005, 17h28
  5. Architecture d'un site multi-langues
    Par seben dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 25/09/2005, 16h23

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