Maison  >  Article  >  développement back-end  >  Comment CakePHP gère-t-il plusieurs langues ?

Comment CakePHP gère-t-il plusieurs langues ?

WBOY
WBOYoriginal
2023-06-06 08:03:241025parcourir

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 ! ”:

  • Générez un nouveau fichier .po et traduisez-le
  • Compilez le fichier .po traduit en un fichier .mo
  • #🎜🎜 #Placez le fichier .mo dans le répertoire de langue où se trouve le programme, par exemple locale/zh_CN/LC_MESSAGES/default.mo
Ensuite, lorsque l'application utilisera la chaîne, CakePHP charge automatiquement le fichier de traduction approprié et renvoie la chaîne traduite.

6. Comment modifier dynamiquement la langue ?

Si nous devons changer dynamiquement de langue ou si la couche d'affichage doit prendre en charge les paramètres de commutation multilingue, nous devons modifier dynamiquement les paramètres régionaux. Les développeurs peuvent utiliser la bibliothèque de classes I18n et le composant Session pour y parvenir.

Par exemple, nous pouvons écrire le code suivant dans UsersController :

public function changelang($lang = null) {
    if ($lang) {
        $this->request->getSession()->write('Config.language', $lang);
    }
    return $this->redirect($this->referer());
}

Dans le code ci-dessus, vérifiez d'abord si $lang est vide. S'il n'est pas vide, Config. la langue est définie sur $lang (obtenue à partir de la demande du client), sinon la langue par défaut est utilisée.

Lorsque l'utilisateur se connecte, nous pouvons définir la locale actuelle en fonction de la locale précédemment définie. Le code est le suivant :

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'));
        }
    }
}

Dans le code ci-dessus, lorsque l'utilisateur. se connecte avec succès, $this->request->data'Users' sera utilisé pour obtenir la langue sélectionnée par l'utilisateur, qui est enregistrée dans Config.langue dans le code suivant. De cette façon, chaque fois que l'utilisateur se connectera, l'application utilisera préférentiellement les paramètres régionaux précédemment enregistrés pour la traduction.

7. Résumé

Dans cet article, nous avons présenté la méthode de CakePHP pour gérer plusieurs langues. Tout d'abord, vous devez générer des fichiers de traduction au format gettext, puis placer ces fichiers dans un répertoire spécifique. Grâce à la bibliothèque de classes I18n et à la fonction __(), le programme peut automatiquement sélectionner le fichier de traduction approprié et renvoyer la chaîne traduite. Enfin, nous avons également expliqué comment utiliser le composant Session pour modifier dynamiquement les paramètres régionaux. De plus, nous devons également noter que le traitement multilingue nécessite beaucoup de travail de traduction. Nous devons veiller à distinguer les concepts i18n et l10n et les écrire de manière flexible pour faciliter les travaux de maintenance ultérieurs.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn