Bonjour,
1) Si tu n'utilises pas de cms,
continue à ne pas en utiliser !
Tu seras sur de meilleures bases selon moi pour apprendre.
2) Pour l'internationalisation, il y a plein de possibilités. Par exemple :
https://www.sitepoint.com/localizing-php-applications-1/
En gros, les traducteurs utilisent un logiciel qui s'appelle poedit :
https://poedit.net/
Tu leurs fournis un fichier avec une extension .po qui contient des ensembles de lignes du style :
msgid "Mon joli site"
msgstr "Mon joli site"
msgid "Bonjour"
msgstr "Bonjour"
Avec poedit, ils vont pouvoir créer un fichier de traduction dans une autre langue.
Et dans le code de ta page, tu vas insérer à l'endroit où doit s'afficher quelque chose des instructions php comme
<?= _("Mon joli site") ?>
ou
<?= _("Bonjour") ?>
La fonction _() est en fait un raccourci de la fonction php gettext(). Elle est prévue pour aller lire les traductions dans les fichiers générés par poedit.
Exemple complet
-----------------
1) Les scripts des pages du site
À la racine du site, on crée 2 scripts php : page_en.php et page_fr.php
Contenu de page_en.php
<!DOCTYPE html>
<?php
$language="en_US";
putenv("LANG=".$language);
setlocale(LC_ALL, $language);
$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
?>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="description" content="<?= _("Mon joli site utilisant gettext()") ?>">
<title><?= _("Mon joli site") ?></title>
</head>
<body>
<h1><?= _("Mon joli site") ?></h1>
<p><?= _("Bonjour") ?></p>
</body>
</html>
Contenu de page_fr.php
<!DOCTYPE html>
<?php
$language="fr_FR";
putenv("LANG=".$language);
setlocale(LC_ALL, $language);
$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
?>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="description" content="<?= _("Mon joli site utilisant gettext()") ?>">
<title><?= _("Mon joli site") ?></title>
</head>
<body>
<h1><?= _("Mon joli site") ?></h1>
<p><?= _("Bonjour") ?></p>
</body>
</html>
EDIT: tu peux éventuellement mettre ce qui est commun aux deux scripts dans un fichier php unique, et l'inclure ensuite dans page_en.php et page_fr.php.
Par exemple :
page_multi.php
<?php
putenv("LANG=".$language);
setlocale(LC_ALL, $language);
$domain = "messages";
bindtextdomain($domain, "Locale");
bind_textdomain_codeset($domain, 'UTF-8');
textdomain($domain);
?>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<meta name="description" content="<?= _("Mon joli site utilisant gettext()") ?>">
<title><?= _("Mon joli site") ?></title>
</head>
<body>
<h1><?= _("Mon joli site") ?></h1>
<p><?= _("Bonjour") ?></p>
</body>
</html>
Alors page_en.php devient :
<!DOCTYPE html>
<?php
$language="en_US";
?>
<html lang="en">
<?php include "page_multi.php";?>
Et page_fr.php devient :
<!DOCTYPE html>
<?php
$language="fr_FR";
?>
<html lang="fr">
<?php include "page_multi.php";?>
Mais de toute façon, dans un vrai site, ce sera sans doute un peu plus sophistiqué.
2) Les fichiers de traduction
Toujours à la racine du site, on crée un répertoire appelé "Locale" (attention aux majuscules/minuscules). Ce répertoire contiendra 2 sous-répertoires, "en_US" et "fr_FR". Et dans chacun de ces 2 sous-répertoires, on ajoute un sous-répertoire "LC_MESSAGES".
On crée le fichier suivant de n'importe quel nom avec l'extension .po (avec n'importe quel éditeur de texte) :
msgid "Mon joli site utilisant gettext()"
msgstr "Mon joli site utilisant gettext()"
msgid "Mon joli site"
msgstr "Mon joli site"
msgid "Bonjour"
msgstr "Bonjour"
On ouvre le fichier avec poedit via fichier=>Ouvrir. On ne modifie rien, et on l'enregistre dans Locale/fr_FR/LC_MESSAGES (en spécifiant comme langue le français si la question est posée) et en lui donnant le nom "messages". Ceci va créer dans le répertoire Locale/fr_FR/LC_MESSAGES deux fichiers : messages.po et messages.mo.
On transmet messages.po à un traducteur français-anglais. Celui-ci, avec poedit, ouvre ce fichier via fichier=>Nouveau à partir d'un fichier POT/PO...
Il spécifie comme langue l'anglais.
Le traducteur saisie les traductions, enregistre le résultat et renvoie les fichiers .po et .mo générés (ou seulement .po, mais alors il te faudra générer le .mo avec poedit).
Le .po du traducteur devrait ressembler à :
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: \n"
"PO-Revision-Date: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: Poedit 2.4.2\n"
"Last-Translator: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"Language: en\n"
msgid "Mon joli site utilisant gettext()"
msgstr "My pretty site using gettext()"
msgid "Mon joli site"
msgstr "My pretty site"
msgid "Bonjour"
msgstr "Hello"
On met les deux fichiers .po et .mo dans le répertoire Locale/en_US/LC_MESSAGES.
3) Utilisation
Il faut vérifier que le serveur php a gettext() activé. Si ce n'est pas le cas, il faut modifier le fichier php.ini (ce n'est pas très dur).
Il faut arrêter-redémarrer le serveur.
Il ne reste plus qu'à afficher dans un navigateur soit page_fr.php soit page_en.php pour vérifier le résultat.
Bien sûr, la première fois, c'est laborieux. Mais une fois qu'on est rodé, ça va assez vite. Et surtout, on a une méthode qui est largement utilisée par ailleurs.
Amicalement,
Modifié par parsimonhi (05 Feb 2021 - 10:17)