2010-03-26 4 views
4

Je sais comment créer des fichiers .po et comment générer des fichiers .mo, puis les utiliser pour la traduction sur mon site alimenté par Codeigniter. Cependant, je ne suis pas tout à fait sûr sur la façon de changer la langue de l'interface graphique du site. Je veux m'en tenir au schéma d'appel d'URL par défaut de codeigniter: www.domain.com/controllername/method/param1/param2.Support multilingue utilisant gettext avec codeigniter, bonne pratique?

appelant le serveur comme celui-ci est une évidence: www.domain.com/controllername?lang=en

Faire que pour chaque contrôleur en utilisant le schéma d'URL par défaut, me oblige à mettre en œuvre la même méthode dans tous les controller, juste pour passer le paramètre lang à la fonction setlocale() et ensuite se lier à mon nom de domaine .po. Se sent maladroit ...

Toutes les idées comment vous travaillez avec gettext dans codeigniter? Et oui, je veux travailler avec gettext.

Répondre

1

Je vérifie la langue de l'utilisateur accroissant la détection à "post_controller_constructor", et je l'ai mis à un endroit globalement disponible (par exemple en changeant à l'exécution la langue dans le fichier de configuration). Un contrôleur doit juste utiliser la valeur.

La langue est détectée avec la vérification suivante en repli

  1. il a été réglé par l'intermédiaire d'un paramètre GET (par exemple? Lang = en)?
  2. il a été mis dans un cookie?
  3. Quel est le langage suggéré par le navigateur?
  4. utiliser la langue par défaut configuré

Si une langue est pas prise en charge, cependant, utilisez la valeur par défaut. Définissez ou actualisez le cookie avec les nouvelles données.

Vous n'avez pas besoin généralement d'utiliser le paramètre GET, evenctuallly juste une fois si l'utilisateur clique pour changer la langue

+0

Que voulez-vous dire par "accrocher la détection à 'post_controller_constructor'"? – DanMan

+0

Je voulais dire "J'ajoute un rappel au hook 'post_controller_constructor". Voir http://codeigniter.com/user_guide/general/hooks.html. Vous avez besoin que votre code soit exécuté après l'instanciation de la classe de contrôleur, mais avant que votre méthode de contrôleur spécifique ne soit appelée –

+0

Intéressant. Merci. – DanMan

2

Je viens de faire une bibliothèque qui peut automatiquement traduire tout le texte entre {t} et {/ t} dans la vue, j'ai posté ici au cas où quelqu'un veut l'utiliser au lieu d'appeler la fonction gettext dans la vue:

http://www.chuongduong.net/page/15/codeigniter-gettext-with-smarty-or-parser-template-without-php-code-in-view.html

le code peut être vue:

<html> 
<head> 
<title>{blog_title}</title> 
</head> 
<body> 

<h3>{blog_heading}</h3> 
{blog_entries} 

<h5>{t}Title is{/t} {title}</h5> 

<p>{t 1="<b>" 2="</b>"}Click here %1to see%2 me{/t}{body}</p> 

<p>{t 1="{id}" 2="author"}The id is: %1 wrote by %2{/t}</p> 

<p>{t 1="<a href=\"link here\">" 2="</a>"}Please lick on me%2{/t}</p> 

{/blog_entries} 

</body> 

</html> 
Questions connexes