CakePHP est un framework de développement PHP populaire qui aide les développeurs à créer rapidement des applications Web de haute qualité. Avec le développement de la mondialisation, de plus en plus d'applications doivent prendre en charge plusieurs langues, et CakePHP fournit également le support correspondant. Cet article présentera comment CakePHP gère plusieurs langues.
1. Prise en charge multilingue
La prise en charge multilingue est une fonctionnalité importante de CakePHP. À partir de la version 2.0, CakePHP prend en charge le format de fichier gettext, qui est un simple fichier texte contenant toutes les chaînes qui doivent être traduites. Dans CakePHP, nous pouvons utiliser la bibliothèque de classes I18n intégrée pour traiter les fichiers gettext.
2. Internationalisation et localisation (i18n et l10n)
Dans le traitement multilingue, il est nécessaire de comprendre les deux concepts d'internationalisation et de localisation.
i18n fait généralement référence à l'internationalisation, ce qui signifie préparer une application pour prendre en charge plusieurs paramètres régionaux ou langues, ce qui facilite l'adaptation de l'application aux utilisateurs et aux marchés cibles. Dans CakePHP, nous pouvons utiliser la bibliothèque de classes I18n pour implémenter l'internationalisation.
l10n fait généralement référence à la localisation, ce qui signifie adapter une application à une langue ou à un paramètre régional spécifique. De plus, l'application doit également utiliser la date, l'heure, le format de devise correspondant, etc. CakePHP peut très bien prendre en charge la localisation, aidant les développeurs à s'étendre à davantage de langues et de régions.
3. Comment générer des fichiers de traduction ?
Pour utiliser le support multilingue, vous devez d'abord générer des fichiers de traduction au format de fichier gettext, puis placer ces fichiers de traduction dans le répertoire correspondant. Dans CakePHP, vous pouvez utiliser la commande cake i18n extract pour générer le fichier modèle par défaut, qui est un fichier .pot.
$ bin/cake i18n extract
Après avoir exécuté la commande ci-dessus, CakePHP vérifiera tous les fichiers CakePHP et les fichiers d'application, extraira les chaînes qu'ils contiennent et décidera quels caractères sont nécessaires traduire. Générez ensuite un fichier .pot, qui sera utilisé comme fichier modèle pour la traduction et enregistré dans le répertoire localepot.
4. Comment importer des fichiers de traduction ?
Convertissez le fichier .pot généré en un fichier PO spécifique à la langue pour démarrer la traduction. Une fois la traduction terminée, enregistrez le fichier PO dans un répertoire de langue spécifique (tel que localezh_CNLC_MESSAGESdefault.po. En même temps, nous devons également compiler tous les fichiers PO traduits en fichiers MO et les placer dans le sous-répertoire LC_MESSAGES correspondant de la langue). annuaire.
Dans CakePHP, vous pouvez utiliser la bibliothèque de classes I18n pour charger des fichiers de traduction, comme indiqué ci-dessous :
//引入语言文件$file = ROOT . DS . 'locale' . DS . $language . DS . 'LC_MESSAGES' . DS . $domain . '.po'; $locale = new Locale();$locale->loadMo($file);
Dans le code ci-dessus, les valeurs de $langue et $ domain sont ce que le programme veut. La langue et le domaine du fichier de traduction à utiliser. Appelez la méthode $locale->loadMo() pour charger le fichier MO pour une langue et un domaine spécifiques. Une fois le chargement terminé, nous pouvons commencer à utiliser le fichier de traduction.
5. Comment utiliser les fichiers de traduction ?
Dans CakePHP, nous pouvons utiliser la fonction __() pour obtenir la chaîne traduite. Lors de l'utilisation de la fonction __(), si la chaîne n'est pas traduite dans le fichier de langue actuel, la chaîne d'origine sera renvoyée.
Par exemple, nous pouvons modifier la chaîne dans le fichier de vue de la manière suivante :
<?php echo __('Welcome to my website!'); ?>
Si nous voulons ajouter une nouvelle traduction, traduisez-la par "Bienvenue sur mon site Web ! ”:
public function changelang($lang = null) { if ($lang) { $this->request->getSession()->write('Config.language', $lang); } return $this->redirect($this->referer()); }
public function login() { if ($this->request->is('post')) { if ($this->Auth->login()) { //Set language based on user preference $this->request->getSession()->write('Config.language', $this->request->data['Users']['language_preference']); $this->redirect($this->Auth->redirectUrl()); } else { $this->Flash->error(__('Invalid username or password, try again')); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!