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 :

MultiLangue ? PO ? Performances ? [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut MultiLangue ? PO ? Performances ?
    Bonjour,


    j'ai regardais différentes manière de faire du multilangue:
    Array
    gettext

    L'array, je vois en terme de performances.

    Gettext, je comprend le fonctionne et les avantages (outils de génération, binaire en memore)
    Le problème de gettext c'est l'emplacement de ces fichier (LC_MESSAGES), un répertoire qui n'apporte rien.
    Wordpress ou Drupal utilise des class de lecture mais ça apporte quelque chose compte tenu de la mise en cache? Parser un fichier binaire contre lire une array directement ?

    Vous, comment voyez vous la chose ?
    (En dehors des outils externalisé pour la génération des traduction)

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    Pour l'internationalisation, j'ai opté pour le format .tmx
    Couplé avec DOMDocument et Intl, c'est le pied.
    Le truc, c'est que ce qui existe est assez léger en terme de fonctionnalités.
    Tu peux t'inspirer du parser tmx de ZF2 : ici
    A l'usage, tu verras que les fonctionnalités sont insuffisantes, il va falloir sérieusement compléter la classe. Mais c'est un bon début.

    En terme de performances, ça roule. Le dernier site que j'ai développé en français et et en anglais avait aux alentours de 1500 entrées dans le dictionnaire et après profilage, le temps moyen par page pour le chargement des ressources textes tournait autour de 0,022ms.

    Et pour ne rien gâcher, le format est supporté par beaucoup de logiciels de traduction (heureusement vu que c'est une norme).
    Tu peux aussi écrire tes dictionnaires entièrement à la main vu que c'est du xml.
    Bref, simple, rapide et très flexible.

  3. #3
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Pour l'internationalisation, j'ai opté pour le format .tmx
    Couplé avec DOMDocument et Intl, c'est le pied.
    Pourquoi pas direct le format pour ResourceBundle ?

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    Pourquoi pas direct le format pour ResourceBundle ?
    A l'époque quand je me suis attelé à l'internationalisation, il n'était pas possible de gérer les traductions imbriquées avec RessourceBundle. Je ne sais pas si cela a évolué depuis.
    Le temps me manque pour m'y coller à nouveau. J'y jeterai un coup d'oeil à un peu plus tard histoire de voir si je dois faire évoluer le bouzin.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    A l'époque quand je me suis attelé à l'internationalisation, il n'était pas possible de gérer les traductions imbriquées avec RessourceBundle. Je ne sais pas si cela a évolué depuis.
    Le temps me manque pour m'y coller à nouveau. J'y jeterai un coup d'oeil à un peu plus tard histoire de voir si je dois faire évoluer le bouzin.
    Qu'est ce que t'appelles traductions imbriquées ?

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le problème de gettext c'est l'emplacement de ces fichier (LC_MESSAGES), un répertoire qui n'apporte rien.
    C'est quoi un répertoire qui apporte quelque chose ?

    Je n'ai jamais essayé le format TMX , mais perso je suis pas fan du xml. C'est souvent très verbeux pour pas grand chose. Après ça semble pouvoir gérer la mise en forme ce qui semble très intéressant.

    Coté gettext , le cache que apache fait des fichiers de langue est un vrai plus niveau performance. C'est également le standard actuel du multilangue.

    Coté inconvénient , son installation peut vite devenir pénible. Selon le système , les locales installées et celle dont on as besoin ça devient parfois la galère.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    Qu'est ce que t'appelles traductions imbriquées ?
    C'est la présence d'un ou plusieurs mots du dictionnaire au sein d'une traduction.

    Citation Envoyé par grunk Voir le message
    Je n'ai jamais essayé le format TMX , mais perso je suis pas fan du xml. C'est souvent très verbeux pour pas grand chose. Après ça semble pouvoir gérer la mise en forme ce qui semble très intéressant.
    Verbeux : justement le tmx ne l'est pas trop.
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <tu tuid="mdp">
        <tuv xml:lang="fr"><seg>mot de passe</seg></tuv>
        <tuv xml:lang="en"><seg>password</seg></tuv>
    </tu>
    Après la souplesse est liée à l'attribut datatype. En fonction de cette valeur, il est possible de renvoyer directement le formatage vers ICU (date, number, currency, message...)
    Un dernier exemple plus complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <tu tuid="date.naissance.invalide">
        <tuv xml:lang="fr"><seg>votre date de naissance (<ph datatype="long_date">date</ph>) est incorrecte</seg></tuv>
        <tuv xml:lang="en"><seg>your date of birth (<ph datatype="long_date">date</ph>) is invalid</seg></tuv>
    </tu>
    ou avec les traductions imbriquées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <tu tuid="date.naissance">
        <tuv xml:lang="fr"><seg>date de naissance</seg></tuv>
        <tuv xml:lang="en"><seg>date of birth</seg></tuv>
    </tu>
    <tu tuid="date.naissance.invalide">
        <tuv xml:lang="fr"><seg>votre <ph datatype="tuid">date.naissance</ph> (<ph datatype="long_date">date</ph>) est incorrecte</seg></tuv>
        <tuv xml:lang="en"><seg>your <ph datatype="tuid">date.naissance</ph> (<ph datatype="long_date">date</ph>) is invalid</seg></tuv>
    </tu>
    A la fin, une fois message récupéré, il ne reste plus qu'à le passer dans la moulinette de formatage des string pour le rendu final.

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Je pense pas qu'il ai de l'imbriquer avec ICU, faudrait voir si tu peux importer des fichiers TMX, puisque tu peux importer des fichiers XLIFF

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Perso j'aime bien le côté en cache sur le serveur, mais j'aimerai pouvoir mettre mes traduction où je veux.
    LC_MESSAGES n'apporte rien dans le sens où ils est inutile. C'est selon moi plus propre sans.

    Pour ce qui est du xml (tmx ), ça m'intéresse moyennement parce que les temps de parse xml en php son pas super. Je préfère encore faire une array .

    Merci pour vos conseil. Les PO semble plus être une mode qu'elle'un réel avantage. En tout cas si on utilise pas le gettext directement sur des .mo ...

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    ResourceBundle est le plus rapide

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    j'ai vu un blog qui parle de benchmark:
    http://mel.melaxis.com/devblog/2006/...t-fast-enough/

    il ne parle pas de ResourceBundle...

    Auriez vous un bench de ces performance? j'ai un peu de mal à croire qu'un binaire soit plus lent à lire qu'un XML...

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par dtcSearch Voir le message
    j'ai vu un blog qui parle de benchmark:
    http://mel.melaxis.com/devblog/2006/...t-fast-enough/

    il ne parle pas de ResourceBundle...

    Auriez vous un bench de ces performance? j'ai un peu de mal à croire qu'un binaire soit plus lent à lire qu'un XML...
    ResourceBundle c'est du binaire

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    j'ai pas dutout les même score

    ext : 468
    php : 570
    string : 1502

    EDIT :

    res : 667

    EDIT 2 :

    res : 1607 sans les require_once

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Merci stealth35,

    je pense que je vais faire mes propres essais aussi parce que là, la différence est énorme par rapport à ce que le mec affiche.

    Pourriez vous me fournir vos source pour le bench avec ResourceBundle?
    (histoire de faire des testes de perf, ça me semble un super bon compromis)

  15. #15
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    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
    <?php
    $lang = "en"; $locale_file = "en_US";
    if ($_GET["lang"] == "de"){ $lang = "de"; $locale_file = "de_DE"; }
     
     
    $locale_reader = new ResourceBundle($lang, __DIR__.'/res');
     
    function __($text){
    	global $locale_reader;
    	return $locale_reader->get($text);
    }
     
    ?><!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" xml:lang="<?=$lang?>" lang="<?=$lang?>">
    <head>
    	<title><?=__("hello")?></title>
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
     
    	<h1><?=__("benchmark")?></h1>
     
    	<p><?=__("message")?></p>
     
    </body>
    </html>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    de {
        hello { "Hallo Welt!" }
        benchmark { "PHP Lokalisierungs-Benchmark" }
        message { "Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden. Dies ist eine Testseite zum Vergleichen der verschiedenen Lokalisierungs-Methoden." }
    }

  16. #16
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    Avec le pack fourni pas le mec => http://mel.melaxis.com/devblog/wp-co...-benchmark.zip

    bench (ab -n 1000 URL):
    gettext-ext: 70 => http://pastebin.com/5HxRDree
    gettext-php: 80 => http://pastebin.com/VwR2Kub1
    stringids: 88 => http://pastebin.com/89gxVrre

    bench (ab -n 5000 -c 10 URL):
    gettext-ext: 152 => http://pastebin.com/ge2503Sm
    gettext-php: 179 => http://pastebin.com/ubsT2shV
    stringids: 175 => http://pastebin.com/KAv9Az9e

    j'ai un peu de mal à y croire, mais un tableau d'array est aussi rapide que l'utilisation de .po ?

    ps: je teste les ResourceBundle dès que j'ai une machine qui le prends:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    E:\xampp\php>pecl install intl
    downloading intl-2.0.0.tgz ...
    Starting to download intl-2.0.0.tgz (145,979 bytes)
    ................................done: 145,979 bytes
    111 source files, building
     
    Warning: require_once(System.php): failed to open stream: No such file or directory in R\PEAR\Registry.php on line 356
     
    Warning: require_once(System.php): failed to open stream: No such file or directory in E:\xampp\php\PEAR\PEAR\Registry.php on line 356
     
    Fatal error: require_once(): Failed opening required 'System.php' (include_path='\xampp\php\pear') in E:\xampp\php\PEAR\PEAR\Registry.php on line 356

  17. #17
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    tu peux pas installer de PECL sous windows comme ça, Intl est fournis par default sous windows depuis la 5.2

  18. #18
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    bah j'utilise xampp 1.7.7 mais en version USB, peu être que c'est le pourquoi...

    je vais gratter un peu plus dans le détail
    en tout cas merci stealth35, ça m'a bien fait chercher et ça éguise plus mon avis, j'ai vraiment hâte de tester ResourceBundle

    édit:
    OK, dans ext merci

  19. #19
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    regarde si t'as le dll dans le dossier ext, sinon prendre la bonne version sur le site de php (en .zip)

  20. #20
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 347
    Par défaut
    sniff...

    j'ai la version 1.0

    je testerai chez moi je vais bien pouvoir le faire marcher RRRrr

    ps: après d'autre bench, dès qu'on utilise une langue non native, ça n'influe pas les résultats...

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [maintenance][performance] Que faire comme maintenance ?
    Par woodwai dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 06/11/2003, 16h39
  2. Performance xml
    Par MicKCanE dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 07/07/2003, 07h41
  3. [ POSTGRESQL ] Problème de performance
    Par Djouls64 dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 26/05/2003, 17h18
  4. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 11h37
  5. performance entre 3DS, ase, asc ...
    Par amaury pouly dans le forum OpenGL
    Réponses: 3
    Dernier message: 24/03/2003, 12h41

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