2009-10-25 11 views
5

Je suis à la recherche d'un moyen conforme aux normes de stocker du contenu multilingue pour une application Web. Jusqu'à présent, j'ai utilisé mes propres fonctions "translate()" qui lisent les données d'un fichier ou d'une table de dictionnaire dans une base de données. Toutefois, la mise à jour des dictionnaires dans une table de base de données est très fastidieuse si vous travaillez avec différentes copies de l'application Web. J'aime gettext car il y a une multitude d'outils disponibles pour cela. Cependant, je développe des applications pour différentes plates-formes. Je ne suis absolument pas disposé à faire face aux manières de merde de setlocale() et consorts - à savoir les douzaines de variations de chaînes de caractères différentes qui varient d'un système à l'autre que vous devez fournir pour que cela fonctionne. Plus jamais. J'ai un ensemble de langues - disons de, en, et es - et je veux charger le dictionnaire approprié et travailler avec _() sans toucher setlocale() ou bindtexdomain() une seule fois.i18n avec gettext mais sans les tracas de la localisation?

Est-ce que c'est en quelque sorte possible d'utiliser gettext? Ou quelqu'un connaît-il une autre solution simple, petite, rapide (!) I18n pour PHP qui peut fonctionner avec des fichiers .po/.mo, de préférence sans nécessiter d'extension PHP?

+2

Il n'est pratiquement pas possible d'utiliser gettext en PHP sans utiliser l'extension gettext, mais ne vous inquiétez pas, c'est une extension assez courante/standard de PHP et la plupart des installations l'ont déjà activé. – sorin

+1

@Sorin: C'est possible, il y a une implémentation PHP native avec la plupart, sinon toutes, les fonctions gettext. –

+0

@votingmeisfree wordpress et cakephp, pour n'en nommer que quelques-uns, utilisez les fichiers po et mo sans utiliser l'implémentation de gettext. Ils ouvrent le fichier directement. – T0xicCode

Répondre

2
+0

Et il ne nécessite pas l'extension gettext :) Ils ont aussi des adaptateurs pour des sources plus conviviales - tableau, xml, csv etc –

+0

Merci, cela semble intéressant. J'ai regardé et Zend pendant un bon moment et peut-être que je vais essayer. Je préférerais toujours une solution autonome légère, si quelqu'un en connaît une. –

+0

Oh, c'est plus léger que ça en a l'air. Vous pouvez utiliser uniquement les classes dont vous avez besoin: pour Zend_Translate, vous n'avez besoin que de Zend_Translate, Zend_Locale, Zend_Loader et Zend_Exception (peut-être que je me trompe et que vous aurez besoin de plus ou moins, essayez-le) –

3

Cette méthode devrait fonctionner même avec des endroits non standard:

$locale = 'someWeirdLocale'; 

putenv('LC_MESSAGES=' . $locale); 
bindtextdomain('domain', './locale'); 
textdomain('domain'); 

Amusez-vous!

+1

Cela ne fonctionne pas sous Windows 7 - PHP5 5.3.0 – Blaise