Cet article plonge dans des techniques avancées pour utiliser la bibliothèque GetText en PHP, en se concentrant sur les lieux de secours, la commutation des paramètres régionaux et les domaines de messages remplacés.
Concepts clés:
msgids
dans d'autres domaines rationalise la traduction et améliore les performances. Évitez de se traduire la langue par défaut. dgettext()
pour basculer entre plusieurs domaines de traduction. N'oubliez pas que gettext()
n'utilise qu'un seul domaine par défaut, défini via textdomain()
, tandis que dgettext()
nécessite que les domaines soient pré-liés à l'aide de bindtextdomain()
. Structure du répertoire et lieux de secours:
Une structure de répertoire optimale évite la traduction inutile des paramètres par défaut (par exemple, en_us). Au lieu d'utiliser des identifiants comme "Hello_world", utilisez directement la chaîne de langage par défaut réelle comme msgid
. Cette approche minimise les frais généraux de traitement.
L'image ci-dessous illustre un exemple de structure de répertoire:
Exemples de fichiers de traduction (.po
et compilé .mo
):
français (fr_FR
):
<code>#Test token 1 msgid "Hello World!" msgstr "Bonjour tout le monde!" #Test token 2 msgid "Testing Translation..." msgstr "Test de traduction..."</code>
es_ES
arabe (
<code>#Test token 1 msgid "Hello World!" msgstr "¡Hola mundo!" #Test token 2 msgid "Testing Translation..." msgstr "Prueba de traducción..."</code>
ar_EG
<code>#Test token 1 msgid "Hello World!" msgstr "!أهلا بالعالم" #Test token 2 msgid "Testing Translation..." msgstr "...اختبار الترجمة"</code>
Le fichier gère la sélection des paramètres locaux à l'aide de paramètres ou de sessions:
locale.php
Une utilisation de l'échantillon dans
<?php session_start(); $language = isset($_GET["lang"]) ? $_GET["lang"] : (isset($_SESSION["lang"]) ? $_SESSION["lang"] : "en_US"); $_SESSION["Language"] = $language; $folder = "Locale"; $domain = "messages"; $encoding = "UTF-8"; putenv("LANG=" . $language); setlocale(LC_ALL, $language); bindtextdomain($domain, $folder); bind_textdomain_codeset($domain, $encoding); textdomain($domain); ?>
test-locale.php
Accéder à
<?php require_once "locale.php"; echo _("Hello World!"), "<br></br>"; echo _("Testing Translation..."); ?>
test-locale.php?lang=fr_FR
Overridant le domaine actuel:
Utiliser pour accéder aux traductions à partir d'un domaine différent (par exemple, "erreurs"). Surtout, n'oubliez pas de lier ce domaine en utilisant
dans: dgettext()
bindtextdomain()
locale.php
dans
<?php // ... (locale.php code) ... bindtextdomain("errors", "Locale"); bind_textdomain_codeset("errors", "UTF-8"); // ... (rest of locale.php code) ... ?>
test-locale.php
Cela traduira correctement "Erreur d'obtention de contenu" et "Erreur de sauvegarde des données" si des traductions existent dans le domaine "Erreurs" pour le paramètre régional sélectionné.
<?php // ... (include locale.php) ... echo "<br></br>"; echo dgettext("errors", "Error getting content"), "<br></br>"; echo dgettext("errors", "Error saving data"); ?>
Résumé et FAQ:
Cette section résume les apprentissages clés et fournit des réponses aux questions fréquemment posées sur la localisation du PHP, couvrant des sujets tels que les meilleures pratiques, la manipulation des pluriels, les langues de droite à gauche et la gestion des traductions. La section FAQ est étendue et fournit des informations détaillées sur divers aspects de la localisation de PHP. La section FAQ d'origine a été conservée dans son intégralité.
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!