Programming, Math, etc. · lab
Voir tous les documents en génie logiciel
Fiche de révisionGuide de TP
Rédigée à partir de ce document, puis vérifiée avant publication.
Ce TP porte sur la manipulation des locales, c’est-à-dire la régionalisation des applications selon la culture de l’utilisateur connecté. Vous apprendrez à visualiser, modifier et utiliser les locales dans différents environnements : shell Linux, C++, pages web avec JavaScript, Java et PHP. Ce TP nécessite un environnement Linux avec locales configurées, un compilateur C++11, un serveur PHP local, et un éditeur pour créer des pages HTML et programmes.
php -S localhost:8000.Commencez par observer la locale actuellement utilisée dans votre session :
$ locale
Pour connaître toutes les locales disponibles sur votre système :
$ locale -a
Pour changer temporairement la locale de votre session, par exemple en allemand :
$ LC_ALL=de_DE.utf8
$ date
Mo 15. Okt 15:34:11 CEST 2012
$ date
Mon Oct 15 15:33:24 CEST 2012
La commande date affiche la date dans la locale courante. Ici, on observe la différence entre la locale allemande et la locale par défaut.
Créez un programme C++ minimal avec le code suivant :
#include <iostream>
int main(int argc, char **argv)
{
return 0 ;
}
Compilez en C++11 (par exemple sous Eclipse CDT, sélectionnez ISO C++ 11 dans les paramètres du projet).
Testez la représentation des chaînes avec char[], std::string et std::wstring. Ensuite, modifiez la locale courante en début de programme avec :
setlocale(LC_ALL, "locale");
Remplacez "locale" par une locale valide présente dans /etc/locale.gen.
Affichez une date formatée selon la locale courante, puis selon la locale allemande de_DE, pour observer les différences de représentation des caractères Unicode.
Créez un fichier HTML avec un encodage spécifié dans l’en-tête :
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Écrivez un script JavaScript pour afficher une date localisée :
<script type="text/javascript">
var d = new Date(Date.UTC(2019, 03, 26, 3, 0, 0));
document.write(d.toLocaleDateString());
</script>
Testez l’affichage de la date dans la locale de l’utilisateur connecté, puis dans une autre locale comme en_US. Explorez aussi d’autres fonctions de localisation, par exemple pour les nombres.
Dans Eclipse, créez un programme Java avec le code suivant :
Locale loc = Locale.getLocale(); // locale courante
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, loc);
String formattedDate = df.format(yourDate);
Remplacez yourDate par un objet Date valide. Vérifiez que la locale utilisée correspond bien à celle lue depuis un shell Linux. Essayez avec d’autres locales pour observer les différences de format.
Lancez un serveur PHP local dans un terminal :
$ php -S localhost:8000
Dans un autre terminal, créez un fichier test.php contenant des instructions manipulant des chaînes de caractères avec encodage correct. Par exemple, pour afficher une variable JavaScript initialisée par PHP :
<script>
var myvar = <?php echo json_encode($myVarValue); ?>;
window.alert(myvar);
</script>
Faites de même pour insérer du contenu HTML textuel dans un élément via innerHTML et dans un attribut HTML, en choisissant des chaînes comportant des caractères Unicode.
Exemple d’utilisation de caractères Unicode :
$unicodeChar = "\u{1000}";
Ou encodez vous-même une chaîne en UTF-8 :
<?php
header('content-type:text/html;charset=utf8');
?>
<html>
<head>
</head>
<body>
<?php
echo("\xE3\x82\xA2"); // affiche un caractère oriental
?>
</body>
</html>
Vous pouvez ajouter un tag meta pour spécifier l’encodage dans la page HTML et vérifier quel encodage le navigateur utilise : celui du code HTML ou celui des headers HTTP (normalement, ce sont les headers qui priment).
Enfin, initialisez la locale PHP à partir de la locale envoyée par le navigateur client dans la requête HTTP. Pour visualiser les headers HTTP envoyés par votre navigateur, utilisez :
https://manytools.org/http-html-text/http-request-headers/
Vous pouvez tester votre programme avec les caractères Unicode suivants :
\U0001F309\ud83c\udf09\U0002008AExemples d’écriture en différents langages :
wchar_t s[] = "𠂊";std::string = u8"𠂊";Sous Linux, la variable s ci-dessus est traitée comme un seul mot 32 bits UTF-32 représentant le caractère Han U+2008A.
LC_ALL modifiant l’affichage des dates.LC_ALL ne modifie pas la locale du système, seulement celle de la session en cours.content-type) peut causer des erreurs d’affichage./etc/locale.gen peut empêcher la sélection d’une locale valide.