goa/doc/devmanual_fr/chap_i18n.txt
author Julien Jehannet <Julien Jehannet <julien.jehannet@logilab.fr>>
Tue, 02 Mar 2010 21:48:36 +0100
branchstable
changeset 4783 6dc34d4cf892
parent 1898 39b37f90a8a4
permissions -rw-r--r--
[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>`