6.12. Localisation et Unicode
Comme les lecteurs de la documentation en anglais l'auront remarqué, je ne suis pas originaire d'un pays anglophone (je suis français, et plus précisément breton - "Karrigell" est un mot breton). J'ai donc inclus un programme pour faciliter l'internationalisation des scripts.
6.12.1 Localisation
Dans un script, à chaque fois que vous voulez qu'un message soit traduit dans une langue donnée, au lieu de l'écrire comme une chaîne normale avec des guillemets, on l'écrit comme argument d'une fonction appelée _, de cette façon :
print _("Bonjour tout le monde")
Pour les scripts Python Inside HTML (PIH) il existe un raccourci, <%_ > :
<%_ "Bonjour tout le monde" %>
Le menu d'administration donne accès à une interface web pour créer et modifier facilement la traduction des chaînes de caractères
6.12.3 Prise en charge d'Unicode
Unicode est un standard normalisé qui sert à représenter tous les styles d'écriture dans le monde. Pour chaque signe (une lettre dans un alphabet, un idéogramme dans une langue asiatique), Unicode définit un nombre unique, appelé "point de code". Comme les ordinateurs et les réseaux ne savent manipuler que des octets, une correspondance doit être définie entre ces "points de code" et un ou plusieurs octets ; ces correspondances sont appelées "encodages"
Du fait qu'il existe beaucoup d'encodages différents, quand un programme doit imprimer un signe (une lettre grecque, un signe chinois) il doit recevoir deux informations : la chaîne de caractères qui représente le signe (une séquence d'octets) et l'encodage utilisé. S'il reçoit seulement une chaîne, le programme peut essayer de deviner l'encodage (c'est ce que fait généralement un navigateur web) mais sans aucune garantie de succès
Quand vous écrivez un script, le mieux à faire est d'indiquer
explicitement l'encodage utilisé : pour cela, il existe une fonction intégrée,
SET_UNICODE_OUT(encodage)
, où encodage
est une chaîne de caractères comme 'iso-8859-1' ou 'utf-8'
S'il n'est pas défini, l'encodage du document sera celui spécifié dans
le fichier de configuration de l'hôte par output_encoding
.
Sa valeur par défaut est None
, ce qui veut dire qu'aucun
encodage n'est défini. Il est beaucoup plus sûr d'en définir un,
habituellement 'iso-8859-1' pour les langues qui utilisent l'alphabet
latin et 'utf-8' pour les autres écritures. Si rien n'est défini, vous
devez vous fier au navigateur pour deviner l'encodage utilisé, ce qui
peut conduire à des rendus inattendus
6.12.3 Exemple
from HTMLTags import * def index(): SET_UNICODE_OUT("utf-8") print FORM(INPUT(name="foo")+INPUT(Type="submit",value="Ok"), action="bar") def bar(foo): foo = unicode(foo,"utf-8").encode("iso-8859-1") SET_UNICODE_OUT("iso-8859-1") print foo
Dans index()
, nous indiquons que l'encodage est utf-8 ;
le navigateur enverra les données entrées au clavier par l'utilisateur avec cet
encodage
La fonction bar
reçoit la valeur foo comme une chaîne de
caractères en octets, l'encodage utf-8 d'une chaîne Unicode. Nous voulons
l'imprimer en utilisant un autre encodage, défini par la ligne
SET_UNICODE_OUT("iso-8859-1")
: il faut donc d'abord encoder
la chaîne Unicode avec cet encodage, ce qui est réalisé dans la première ligne
de bar()
. Nous pouvons alors imprimer foo
, qui sera
rendu sous la forme attendue