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 :

[Tableaux] i18n internationnalisation applications php [Tutoriel]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2004
    Messages : 99
    Points : 112
    Points
    112
    Par défaut [Tableaux] i18n internationnalisation applications php
    Bonjour,

    Je réfléchis actuellement à une solution pour l'internationnalisation de mes applications / sites php (ça peut s'appliquer à d'autres languages, mais je cible php), j'ai trouvé quelques retours interressant ici :

    http://www.phpinsider.com/smarty-forum/viewtopic.php?t=84

    et je me demandais ce qu'en pense les développeurs de développez.com, avez vous déja utilisé des librairies d'internationnalisation type celles de Pear, d'autres ? maisons ?

    Mettez vous tout en base avec plusieurs tuples, un pour chaque langue ?
    Utilisez vous des constantes, y compris en base, avant de les traduires ? (via fichier d'include ou base), utilisez vous xml ?

    Je pense que celà pourrait être interressant de faire un petit tour de table

    Merci d'avance pour vos réponses
    Ne vous cassez plus la tête
    Aide à distance et/ou intervention à distance à partir de 30€ TTC. Demandez moi un devis gratuit !

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 66
    Points : 85
    Points
    85
    Par défaut
    Salut,

    Pour les fichiers de langues, je pense que je vais stocker les valeurs dans un fichier XML, et en générer un tableau PHP près à l'emploi, pour éviter de parser le fichier à chaque fois.

    Ca ferait un fichier comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <properties>
        <property name="title" value="titre de mon site" />
    </properties>
    Le nom des balises n'ést pas définitif, c'est juste pour l'exemple (j'ai pas d'autres noms en tête).

    Du coup le fichier PHP généré serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $lang = array(
        'title' => 'titre de mon site',
         ...... => ....
    );
    Je pense faire ça pour chaque page.

    Pour manipuler tout ça, et accéder à une valeur, une classe Lang est le tour et joué.
    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
     
    class Lang
    {
        private $data;
     
        public function __get($name)
        {
            return isset($this->lang[$name]) ? $this->lang[$name] : 'undefined';
        }
     
        public function load($file)
        {
            ...
        }
    }
     
    $lang = new Lang();
    $lang->load('admin_fr.xml');
     
    echo $lang->title; // affichera la valeur de "title", définie dans le fichier XML, ou bien "undefined", si elle est indéfinie
    Le principe est là.
    Faut voir ensuite comment rendre ça "pratique" à l'utilisation.


    Sinon il y a aussi la fonction gettext(), faut voir ...
    Ca m'enchante pas plus que ça

    P.S: C'est juste des idées tout ça. J'ai pas assez d'expérience dans la création de sites multilingues pour savoir qu'est ce qui est le plus pratique.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Il y a une classe lang sur PHPLibrairies qui peut t'aider.

    Pour ma part, je suis en train de m'user avec gettext()...enfin avec setlocale() précisément.
    Dernière modification par Domi2 ; 02/08/2011 à 22h53.

  4. #4
    Membre du Club
    Profil pro
    Consultant informatique
    Inscrit en
    Novembre 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2003
    Messages : 52
    Points : 47
    Points
    47
    Par défaut
    Pear::Translation2, bien sur

    http://pear.php.net/package/Translation2

    J'ai pas encore testé le 2 je devrais l'implementer tres prochainement sur mon site, mais il a l'air tres complet :

    This class provides an easy way to retrieve all the strings for a multilingual site from a data source (i.e. db).
    The following containers are provided, more will follow:
    - PEAR:B
    - PEAR::MDB
    - PEAR::MDB2
    - gettext
    - XML
    - PEAR:B_DataObject (experimental)
    It is designed to reduce the number of queries to the db, caching the results when possible.
    An Admin class is provided to easily manage translations (add/remove a language, add/remove a string).
    Currently, the following decorators are provided:
    - CacheLiteFunction (for file-based caching)
    - CacheMemory (for memory-based caching)
    - DefaultText (to replace empty strings with their keys)
    - ErrorText (to replace empty strings with a custom error text)
    - Iconv (to switch from/to different encodings)
    - Lang (resort to fallback languages for empty strings)
    - SpecialChars (replace html entities with their hex codes)
    - UTF-8 (to convert UTF-8 strings to ISO-8859-1)

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Pour l'internationalisation, je travaille en interne en utf-8 et je convertis à l'affichage en leCharsetChoisiParLAdmin+NCR (Numeric Character References) avec une fonction maison à base d'iconv.
    Je fais en sorte de récupérer en entrée de l'utf-8 aussi (avec l'attribut accept-charset de l'élément <form>) mais pour pallier au support de cet attribut plus ou moins inconsistant je détecte ou pas s'il s'agit d'utf-8 (avec une petite regex) et si ce n'est pas le cas je convertis en utf-8 depuis leCharsetChoisiParLAdmin.
    Après, bien sûr, si tu choisis de travailler en 100% utf-8, ça simplifie quelque peu les choses.

    Pour la localisation, j'utilise un système un peu comme nic58 sauf que j'utilise directement des tableaux (séparés en plusieurs fichiers sous forme de module) et que ma classe Lang est statique, et que je ne fais pas $lang->title mais Lang::localize('Title'), comme gettext. Si la traduction est introuvable, ça renvoit pas "undefined" mais le texte en anglais.

    Tu sembles mélanger allégremment internationalisation et localisation. L'internationalisation c'est la capacité de ton application à travailler avec des données en toutes langues, et la localisation c'est le fait d'avoir une interface traduite.
    Du moins, je crois.
    Boost ftw

  6. #6
    Invité
    Invité(e)
    Par défaut [i18n] Problème d'encodage avec gettext
    Pb d'encodage avec gettext déplacé dans un nouveau topic: http://www.developpez.net/forums/sho....php?p=1396378
    Dernière modification par Invité ; 02/10/2006 à 14h02.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Tableaux] Message d'erreur PHP
    Par carmen256 dans le forum Langage
    Réponses: 9
    Dernier message: 15/05/2006, 13h09
  2. application php+mysql de gestion executable
    Par kephrem dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 03/02/2006, 09h55
  3. [Tableaux] lien automatique en php
    Par e-m.guillaume dans le forum Langage
    Réponses: 9
    Dernier message: 30/01/2006, 23h44
  4. [EasyPHP] Probleme de deployement d'une application PHP sous linux
    Par stomerfull dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 16/01/2006, 15h39
  5. [Tableaux] cases à cocher et PHP
    Par tjoce dans le forum Langage
    Réponses: 5
    Dernier message: 20/10/2005, 10h06

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