Regardez comment le Mantis BugTracking software gère l'internationalisation. La méthode qu'ils utilisent est plutôt sympa.
Informations complémentaires: Il a été des années que je l'ai utilisé, mais un rapide coup d'oeil à travers le code source montre que cette partie du code n'a pas changé de manière significative. Ils utilisent le catalogue de messages commun et obtiennent message approche que de nombreux produits utilisent. Leur API de langage est assez simple - le phpxref output is available et ce n'est pas si surprenant. Le catalogue de messages est implémenté comme un script PHP qui obtient simplement include
'd. Par exemple, the catalog for English contient des entrées comme:
$s_new_bug = 'New Issue';
$s_bugnote_added = 'Note Added';
Il contient environ 1 600 déclarations. La magie intéressante se passe à l'intérieur de lang_load
. Lorsqu'une langue est chargée, le fichier de catalogue est inclus afin que toutes les variables qu'elle définit soient définies dans la portée locale. Lang_load
effectue une itération sur les variables définies localement et génère une mappe de message basée sur les noms des variables afin qu'elle puisse rechercher le message par son nom. Par exemple, après le chargement de l'extrait précédent, ce sera comme si les déclarations suivantes ont été exécutées:
$g_lang_strings['en']['new_bug'] = 'New Issue';
$g_lang_strings['en']['bugnote_added'] = 'Note Added';
Lorsque l'interface utilisateur a besoin d'accéder à un « codé en dur » chaîne, il utilise un appel comme lang_get('new_bug')
qui:
- Lookup la langue préférée dans les paramètres de l'utilisateur actuel
- Assurez-vous que la carte de la langue est chargée en appelant
lang_load()
- Renvoie la valeur de la carte de langue appropriée
La chose intéressante est que toute la machinerie est chargée paresseusement. Vous ne payez pas pour le fait qu'ils ont une cinquantaine de langues définies jusqu'à ce que vous ayez besoin d'accéder à l'un d'entre eux. Dans l'ensemble, c'est probablement l'une des applications PHP les plus inpressives que j'ai creusées au fil des ans.
Devrait ajouter 1337 comme étiquette;) – RCIX