Sans compter la gestion des pluriels, et de langue bien sympa qui gère le pluriel en fonction d’intervalle
Si tu gère pas, tu te retrouve à faire des trucs bien naze genre : vous avez 1 message(s).
L’i18n, c’est la grosse merde a gérer dans les applications dynamiques.
En php, gettext est la meilleure solution (ca gère les pluriels, l’encodage, ca parse les fichiers tout seul pour en extraire les chaînes, etc).
Cependant, à ma connaissance, il ne gère pas les formats monétaires, et évidement n’a absolument aucune incidence sur les critères de trie de données extraites d’une base. Faut utiliser les fonctions de localisation de la base, pour cela.
Autre problème, la langue à utiliser doit être initialisée avec un setenv() bien pourri.
Ce qui veut dire que dans certaine configuration de php (CGI/module + un ou deux autre paramêtre du monde de l’ombre que je n’ai pas réussis à cerner), si deux clients font une requete en même temps, l’un pour de l’anglais, l’autre pour du russe, les deux se retrouverons avec une page soit anglais, soit russe. Pas glop du tout.
Solution : écrire en php l’extension gettext de php, comme cela, plus besoin de faire du setenv.
En gros, faut une fonction pour parser le fichier qui correspond à la langue du client et qui charge le resultat dans un tableau, une fonction pour extraire de ce tableau les chaines au singulier, et une autre pour extraire les chaines au pluriel.
Et chance, le format des fichiers gettext est ouvert, et pas trop compliqué (faut utilise pack() pour parser le binaire, mais ca se fait relativement facilement).
Comme cela, on garde les outils de gettext pour extraire les chaines du source et gérer les traductions, et au niveau php, on a tout ce qui faut indépendament de l’extension gettext.
Voir ici pour un parser :
Parser gettext .po
A+