Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/03/2011, 12h55   #1
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
Par défaut gettext : parser un fichier INI

J'ai un projet en PHP5 / MVC
J'utilise gettext avec PoEdit pour parser les sources pour l'i18n. ca mache nickel.
La où ca se complique :
Je souhaite, pour mes classes de vues, placer certaines valeurs dans un fichier INI. Ca fonctionne tres bien pour tout, sauf ce qui concerne les titre de vue, labels de boutons HTML, bref tout ce qui touche a la langue.
La est mon probleme.
J'aimerais placer les titres de mes vues dans le fichier INI
mais je ne vois pas comment faire pour que gettext parse mon fichier INI et extraie les titres, labels de boutons, etc.. a traduire.
Le seul moyen que je vois pour l'instant c'est d'abandonner le format INI et faire un tableau de config PHP que gettexte pasera sans probleme.

une solution ?
merci d'avance
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h18   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
utilise autre chose que gettext, pour parser les ini y'a parse_ini_file
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/03/2011, 14h39   #3
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
le parsage du INI ne pose aucun probleme.
J'utilise parse_ini_file().
Mon probleme c'est que je veux mettre des expression en francais dans mon INI mais gettext ne va pas les parser pour les ajouter a son dictionnaire .po
puisque c'est un .ini et pas un .php.
A moins que j'arrive a forcer le parsage du .INI et que je mette dedans des expression du type :

[views]
myView.title = _('le titre de la vue')

est ce plus clair ?
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 14h57   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
c'est a faire dans ta function pour récupérer le ini ça
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/03/2011, 15h20   #5
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
en fait faut que les expression gettext soient écrite en dur dans un fichier parsable par le moteur gettext.
Ca peut pas etre dynamique (ou alors j'ai une connaissance limitée de gettext)

Je cite l'exemple d'un conteneur statique au format INI mais ca pourrait tout aussi bien etre un YAML ou XML.
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 15h42   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
c'est à toi de faire un adaptateur prévu pour, et de passer pas une autre fonction que directement gettext

par exemple

Code :
1
2
[views]
myView.title = 'le titre de la vue'
Code :
1
2
3
4
5
function _ini($text)
{
    $ini = parse_ini_file('truc.ini');
    return _($ini->myView->title);
}
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/03/2011, 15h47   #7
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
Tu utilise gettext ?
les expression ajoutées au fichier .po sont uniquement celles contenues dans un fichier PHP, marquées en tant que argument de la fonction native '_()'
Il faut que ces expression existent en dur. dans le fichier a parser (parser au sens du moteur gettext, pas au sens du parsage INI)
En gros il faudrait que le mtoeur gettext puisse aussi parser d'autres fichiers que des .php
Je vais voir , simplement en changeant l'extension du .ini en .php, si moteur peut le parser. Puis ensuite je remet l'extension .ini
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 15h50   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
mais non gettext accepte aussi les variables heureusement d'ailleurs...
rien ne t’empêche de faire ca :
Code :
1
2
$msg = 'le titre de la vue';
echo _($msg);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/03/2011, 15h51   #9
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
oui bien sur que gettext accepte les variables.
Mais la question avant tout est : comment ajouter la valeur 'titre de ma vue' au dictionnaire du .po ?
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 15h54   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
c'est pas du-tout le but de gettext, php ne compile pas les .po, c'est a toi des les rajouter dans ton logiciel, ou alors utilise un autre systeme
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 29/03/2011, 16h49   #11
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
en effet :
le moteur gettext parse les sources PHP et ajout les expressions dans le dictionnaire .po et compile le .po en .mo.
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 16h47   #12
Membre du Club
 
Inscription : février 2005
Messages : 63
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 63
Points : 48
Points : 48
Je vais tenter d’être plus clair :

j'ai donc créé une classe FooView
dans laquelle y a un membre nommé $titre

Je crée la valeur du titre dans mon fichier INI :
Code :
1
2
[views]
FooView.titre = _('Bienvenue);
qui sera chargé tel que :

Code :
1
2
3
4
5
6
7
8
9
class FooView
{ 
   private $titre;
   public function setTitre()
   {
      $this->titre = _( IniConfig::get(__CLASS__, 'titre') );
   }
 
}
Je charge PoEdit, je met a jour le catalogue
il ne me trouve aucune expression a ajouter dans son dictionnaire.

Pour aller jusqu'au bout de la problématique,
je transpose la config du fichier INI dans un tableau classique PHP.
Et la bien sur PoEdit trouve de nouvelles entrées.

Conclusion : je n'ai aucun moyen d'ajouter dans le dictionnaire .po des expressions issues d'un fichier INI.
Ça marche qu'avec des fichier .php

Y a t-il moyen de trouver une solution a ce problème ?
merci
elderion est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2011, 17h12   #13
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 465
Points : 8 465
c'est :
Code :
FooView.titre = 'Bienvenue';
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h41.


 
 
 
 
Partenaires

Hébergement Web