[F] views: fix 2 unicode errors
1. You can now use valid unicode strings in ValidationError exception.
Previously, if 'err' contains unicode, UnicodeDecodeError was raised by format_errors()
>>> templstr = '<li>%s</li>\n'
>>> e = ValidationError(None, {None: u'oué, une exception en unicode!'})
>>> templstr % e
'<li>None (None): ou\xc3\xa9, une exception en unicode!</li>\n'
>>> templstr = u'<li>%s</li>\n'
>>> templstr % e
u'<li>None (None): ou\xe9, une exception en unicode!</li>\n'
2. The message of an Exception can contains unicode. But it now properly managed by “informal” string representation.
We can easily fix the problem by using the Exception.message attribute that still contains the original message.
>>> a = AssertionError(u'séfdsdf')
>>> a.message
u's\xe9fdsdf'
>>> str(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 1: ordinal not in range(128)
>>> a = ValueError(u'fsdfsdéfsdfs')
>>> str(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
>>> a
ValueError(u'fsdfsd\xe9fsdfs',)
>>> unicode(a)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 6: ordinal not in range(128)
>>> a.message
u'fsdfsd\xe9fsdfs'
Internationalisation
====================
Le systme d'internationalisation de l'interface web d'cubicweb est bas sur le
systme `GNU gettext`_.
.. _`GNU gettext`: http://www.gnu.org/software/gettext/
Messages internationaliser
----------------------------
Marquage des messages internaliser
````````````````````````````````````
Les chaines de caractres internationaliser sont marqus par l'appel la
fonction `_` *OU* par la mthode quivalent de la requte dans le code python ou
dans les expressions python de template TAL.
Dans les templates cubicweb-tal, il est galement possible d'insrer une chaine
traduire via les balises `i18n:content` et `i18n:replace`.
De plus des messages correspondant aux entits/relations utiliss par le schma
de l'application seront automatiquement ajouts.
Renvoi d'un message internationalis lors de la construction d'une page
```````````````````````````````````````````````````````````````````````
La fonction *built-in* `_` ne doit servir qu'** marquer les messages
traduire**, non pas rcuprer une traduction. Il faut pour cela utiliser la
mthode `_` de l'objet requte, sans quoi vous rcuprerez l'identifiant de
message au lieu de sa traduction dans la langue propre la requte.1
Gestion des catalogues de traduction
------------------------------------
Une fois l'application rendu internationalisable cot code, reste grer les
catalogues de traductions. cubicweb-ctl intgre pour cela les commandes suivantes :
* `i18ncubicweb`, met jour les catalogues de messages *de la librairie
cubicweb*. Sauf si vous dveloppez sur le framework (et non votre propre
application), vous ne devriez pas avoir utiliser cette commande
* `i18ncube`, met jour les catalogues de messages *du composant* (ou de tous
les composants). A la suite de cette commande, vous devez mettre jour les
fichiers de traduction *.po* dans le sous-rpertoire "i18n" de votre
template. videmment les traductions prcdentes toujours utilises ont t
conserves.
* `i18ninstance`, recompile les catalogues de messages *d'une instance* (ou de
toutes les instances) aprs mise jour des catalogues de son composant. Cela
est effectu automatiquement lors d'une cration ou d'une mise jour. Les
catalogues de messages compils se trouvent dans le rpertoire
"i18n/<lang>/LC_MESSAGES/cubicweb.mo" de l'application o `lang` est
l'identifiant de la langue sur 2 lettres ('en' ou 'fr' par exemple)
Le cas classique
````````````````
Vous avez ajout et/ou modifi des messages d'un composant utilis par votre
application (en ajoutant une nouvelle vue ou en ayant modifi le schma par
exemple) :
1. `cubicweb-ctl i18ncube <composant>`
2. diter les fichiers <composant>/xxx.po dans pour y rajouter les traductions
manquantes (`msgstr` vide)
3. `hg ci -m "updated i18n catalogs"`
4. `cubicweb-ctl i18ninstance <monapplication>`