L3 - Génie Logiciel – Manipulation des locales
Manipulation de locales (régionalisation)
Vous allez étudier dans ce TP les fonctions associées à la locale (culture) de l’utilisateur
connecté, à travers plusieurs outils et langages.
Interpréteur de commande
Visualisation de la locale en cours d’utilisation :
$ locale
Locales actuellement disponibles sur le système :
$ locale -a
Changement de la locale de la session courante :
$ LC_ALL=de_DE.utf8
$ date
Mo 15. Okt 15:34:11 CEST 2012
$ date
Mon Oct 15 15:33:24 CEST 2012
Programme C++
Créez un programme en C++, sous Eclipse CDT ou en ligne de commande. Votre programme
est idéalement en C++11 (sous Eclipse, clic droit sur le projet type Managed C++ Build, puis
C/C++ Build > Settings > Dialect > Language standard > ISO C++ 11).
Il doit contenir le code de démarrage suivant :
#include <iostream>
Advertisement
int main(int argc, char **argv)
{
return 0 ;
}
Avec le débogueur ou avec la console, testez la représentation des chaînes avec char[],
std::string et std::wstring. Il est recommandé de compiler en C++11 votre programme.
Changez la locale courante avec setlocale(LC_ALL, « locale ») en début de programme. Les
locales supportées sont celles dans /etc/locale.gen.
Affichez une date avec la locale courante, et avec la locale de_DE (comme la question plus
haut). Examinez la représentation des caractères Unicode.
Page web
Créez une page .html affichant :
- La date du jour dans la culture de l’utilisateur connecté
- Dans une autre culture, par exemple en_US
[email protected] - 2019
Prenez soin spécifier l’encodage en tête de fichier.
Spécifiez un encodage pour votre page (le but ici n’est pas d’étudier l’encodage, mais juste de
correctement le spécifier pour ne pas avoir de problème) :
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Ecrivez maintenant un programme Javascript pour afficher une date de manière localisée :
<script type="text/javascript">
var d = new Date(Date.UTC(2019, 03, 26, 3, 0, 0));
Advertisement
document.write(d.toLocaleDateString());
</script>
Recherchez d’autres fonctions de localisation, sur les nombres par exemple.
Programme Java
Créez un programme Java sous Eclipse permettant d’afficher une date en utilisant la locale de
l’utilisateur courant.
Locale loc = Locale.getLocale(); // locale courante
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT, loc);
String formattedDate = df.format(yourDate);
Vérifiez que la locale est bien celle correspondant à la valeur lue depuis un shell.
Essayez avec d’autres locales.
Programme PHP
Ouvrez un shell et tapez
$ php -S localhost:8000
Cela sert le répertoire courant dans un petit serveur Web.
Depuis un autre shell, éditer un fichier « test.php » contenant des instructions manipulant des
chaînes de caractères. Veillez à ce que ces chaînes soient correctement encodées, en utilisant les
bonnes API. Par exemple, pour afficher une variable :
<script>
var myvar = <?php echo json_encode($myVarValue); ?>;
window.alert(myvar);
Advertisement
</script>
Faites la même chose pour encoder du contenu HTML textuel, dans un élément (innerHTML),
et dans un attribut d’élément. Choisissez un contenu comportant des caractères Unicode :
$unicodeChar = "\u{1000}";
Ou bien encodez vous-même la chaîne en UTF-8 par exemple, comme suit :
<?php
header('content-type:text/html;charset=utf8');
?>
<html>
<head>
</head>
<body>
[email protected] - 2019
<?php
echo("\xE3\x82\xA2"); // affiche un caractère oriental
?>
</body>
</html>
Vous pouvez également ajouter un tag meta à votre page et voir quel encodage votre
navigateur choisi ; celui du code HTML, ou bien celui des headers (ce qui doit normalement
être le cas).
Advertisement
Enfin, initialisez la locale de PHP avec la locale correspondant au navigateur client. Le
navigateur client envoie sa locale dans sa requête HTTP. Pour visualiser la totalité des headers
envoyés depuis votre navigateur, aller sur :
https://manytools.org/http-html-text/http-request-headers/
Vous pouvez tester votre programme avec les caractères Unicode suivant :
Caractère Unicode U+1F309 : \U0001F309
UTF-16 : \ud83c\udf09
Visuel :
UTF-32 : \U0002008A
Ecriture en C :
wchar_t s[] = « \U0002008A » ;
Ecriture en C++ :
std::string = u8« \U0002008A » ;
Ecriture en Java :
<utiliser la représentation UTF-16 avec 2 mots>
Notons que sous Linux, ‘s’ (ci-dessus) est ici parfaitement traité. Il s’agit ici d’1 seul mot 32
bits UTF-32 qui représente le caractère U+2008A (le caractère « Han »).
[email protected] - 2019