ThinkPhp n'a pas le support I18N / L10N intégré et complet comme certains frameworks plus grands. Cependant, vous pouvez la mettre en œuvre efficacement en utilisant une combinaison de techniques et potentiellement en tirant parti des bibliothèques externes. La stratégie de base consiste à séparer les chaînes traduites de votre code et à utiliser un mécanisme pour sélectionner les traductions appropriées en fonction des paramètres régionaux de l'utilisateur.
Voici une approche commune:
en.php
, es.php
, fr.php
) dans un répertoire dédié (par exemple, application/lang
). Chaque fichier contiendra un tableau associatif où les clés représentent les identificateurs uniques pour vos chaînes et vos valeurs représentent le texte traduit. Par exemple, en.php
:<code class="php"><?php return [ 'hello' => 'Hello', 'welcome' => 'Welcome to our website!', 'login' => 'Login', ];</code>
Détection de la langue: déterminez la langue préférée de l'utilisateur. Cela peut être fait à travers plusieurs méthodes:
$_SERVER['HTTP_ACCEPT_LANGUAGE']
pour obtenir la langue préférée du navigateur. C'est souvent peu fiable, mais un bon point de départ./en
, /es
).Lang
de ThinkPhp (si disponible dans votre version) ou une fonction personnalisée. Exemple à l'aide d'une fonction personnalisée:<code class="php">function loadLanguage($locale = 'en') { $langFile = APP_PATH . 'lang/' . $locale . '.php'; if (file_exists($langFile)) { return require $langFile; } return []; // Fallback to default language } $lang = loadLanguage(getLocale()); // getLocale() is a helper function to detect the locale</code>
<code class="php">echo $lang['hello']; // Outputs "Hello" (or the translation in the selected language)</code>
N'oubliez pas de gérer les erreurs potentielles gracieusement si une clé de traduction est manquante.
'submit'
, utilisez 'submit_form'
. ThinkPhp n'a pas de formatage I18N intégré pour la date et le numéro de numéro. Vous devrez utiliser l'extension Intl
de PHP. Assurez-vous qu'il est activé dans votre configuration PHP.
Les classes IntlDateFormatter
et NumberFormatter
dans l'extension Intl
sont cruciales. Voici un exemple:
<code class="php">use IntlDateFormatter; use NumberFormatter; // ... (Language detection as before) ... $formatter = new IntlDateFormatter($locale, IntlDateFormatter::LONG, IntlDateFormatter::NONE); echo $formatter->format(time()); // Formats the current date according to the locale $numberFormatter = new NumberFormatter($locale, NumberFormatter::DECIMAL); echo $numberFormatter->format(1234.56); // Formats the number according to the locale</code>
N'oubliez pas d'ajuster les constantes de style IntlDateFormatter
(par exemple, IntlDateFormatter::SHORT
, IntlDateFormatter::MEDIUM
) pour correspondre au format de date / heure souhaité. De même, ajustez le style de NumberFormatter
au besoin.
Il n'y a pas d'extensions ThinkPHP très populaires et dédiées uniquement axées sur I18N / L10N. L'approche décrite ci-dessus est généralement suffisante. Cependant, vous pouvez tirer parti des bibliothèques PHP existantes comme:
N'oubliez pas que pour des applications plus simples, l'approche manuelle décrite dans la première section pourrait être suffisante. Pour les projets plus grands avec de nombreuses traductions, une approche plus structurée utilisant gettext
ou une bibliothèque similaire peut être préférable. Pesez soigneusement la complexité de l'intégration avec les avantages avant de choisir une bibliothèque spécifique.
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!