OVH Cloud OVH Cloud

Localisation d'applis web

10 réponses
Avatar
casa
Bonjour,

Je localise une appli web. J'ai donc cherch=E9 un module pour faire =E7a.
J'ai trouv=E9 gettext, mais il ne convient pas =E0 cet usage. Je
chercherais quelque chose comme le syst=E8me de locales Java : de b=EAtes
fichiers texte et une API pour r=E9cup=E9rer les messages pour une locale
donn=E9e et un syst=E8me de locale par d=E9faut si possible. Quelqu'un
aurait-il une solution =E0 me proposer ?

Merci

10 réponses

Avatar
Laurent Rahuel
casa wrote:

Bonjour,

Je localise une appli web. J'ai donc cherché un module pour faire ça.
J'ai trouvé gettext, mais il ne convient pas à cet usage. Je
chercherais quelque chose comme le système de locales Java : de bêtes
fichiers texte et une API pour récupérer les messages pour une locale
donnée et un système de locale par défaut si possible. Quelqu'un
aurait-il une solution à me proposer ?

Merci


Salut,

C'est exactement ce que fait gettext a part que le fichier de traduction est
"précompilé". C'est ce qui est utilisé sur un bon nombre de framework web
comme Django par exemple et cela fonctionne très bien.

A plus,

Laurent.

Avatar
casa
Bonjour,

Merci pour cette réponse. Cependant, gettext ne me semble toujours pas
une solution satistfaisante :
- Le format des fichiers de localisation est (inutilement) compliqué.
- La phase de compilation me semble de trop. Si j'utilise Python, ce
n'est certainement pas pour compiler des ressources de localisation ;o)

J'ai développé un module pour faire ça, à la façon Java. Si
quelqu'un est intéressé, je peux poster le source.

Cordialement
Avatar
Laurent Rahuel
casa wrote:

Bonjour,

Merci pour cette réponse. Cependant, gettext ne me semble toujours pas
une solution satistfaisante :
- Le format des fichiers de localisation est (inutilement) compliqué.


Il permet de gérer les encodages, les pluralisations ... et c'est ce qui est
utilisé par quasiment tous les softs opensource que je connaisse.

- La phase de compilation me semble de trop. Si j'utilise Python, ce
n'est certainement pas pour compiler des ressources de localisation ;o)


Les pyc sont le pendant des .mo et cela peut être automatisé (toujours comme
exemple Django)


J'ai développé un module pour faire ça, à la façon Java. Si
quelqu'un est intéressé, je peux poster le source.


En général, j'evite de refaire ce que d'autres font déjà depuis longtemps et
surement mieux que ce que je pourrai faire tout seul. Mais bon, c'est une
question de philosophie.


Cordialement



A plus,

Laurent.

Avatar
casa
Rebonjour,

Je suis 100% d'accord avec toi sur tous les points. Néanmoins, pour
l'appli concernée (pour laquelle je gère 4 clefs de localisation dans
5 langues, sans gestion de pluriels), gettext me semble
surdimensionné. Je ne dis pas que cette lib est mauvaise, mais vu mes
besoins, je préfère une solution légère dont j'ai le contrôle.
Développer ma solution m'a pris 2 heures et remplit parfaitement le
cahier des chages.

Merci pour ces infos, je penserai à gettext lorsque mes besoins
évolueront.
Avatar
Méta-MCI
Bonjour !


gettext ... inutilement compliqué ... compilation me semble de trop...




Je suis tout à fait d'accord ; gettext en fait trop. Cela est peut-être
justifié, pour quelques rares besoins.

Perso, je me suis fait un mini module, avec une (seule) fonction, _() et un
dictionnaire de message, indexé sur les messages par défaut.

C'est (très) limité, mais facile à utiliser, et suffit à des besoins
simples.


Je ne vais montrer de code, car, sans doute trop simple,il ne fait pas même
pas 10 lignes....


@-salutations

Michel Claveau



Avatar
casa
Salut,

Justement, moins il fait de ligne, plus il est susceptible d'être
posté !!!
Avatar
Méta-MCI
Bon, d'accord.
Voichi, chi-dechous :



# -*- coding: utf-8 -*-

def u1252(chu):
if type(chu) is unicode: return chu.encode('cp1252','replace')
else: return chu

def _(m):
try: return u1252(msg[m][lang].decode('utf-8'))
except: return u1252(m.decode('utf-8'))


#exemples---------------------------------------------

msg={
"Contenu du fichier ":[
"Contenu du fichier ",
"Content of the file ",
"Inhalt der Datei ",
"Contingut del fitxer ",
"Contenido del fichero "
],
"Erreur":[
"Erreur",
"Error",
"Fehler",
"Error",
"Error"
],
"message envoyé":[
"Message envoyé",
"Message sent",
"Nachricht gesendet",
"Missatge enviat",
"Mensaje enviado"
]
}


#lang=0 #FR
#lang=1 #EN
#lang=2 #DE
#lang=3 #CA
#lang=4 #ES

lang=0
print _('message envoyé')

lang=1
print _('message envoyé')

lang=4
print _('message envoyé')
Avatar
casa
Merci pour ce bout de code. Il a le mérite d'être simple.
Personnellement, je passerais cependant la locale dans l'appel à la
localisation (de manière à gérer une locale par défaut pour éviter
des exceptions intempestives).
Avatar
Méta-MCI
Salut !

Perso... passerais la locale dans l'appel




Toutafé. Mais, pour les applis en question, j'ai un fichier de
configuration, car il n'y a pas que du Python.
Et puis, comme je l'ai dit précédemment, je voulait une alternative -très
simple- à gettext

Enfin, si ça t'a inspiré un peu, je suis content.

Et merci du retour d'info.



Michel Claveau



Avatar
Méta-MCI
Re !

Il y a quand même un petit avantage, à ne pas utiliser la locale comme
paramètre : c'est la possibilité de changer de langue à la volée.
Bon d'accord, ce n'est pas d'un usage très courant... sauf pour les tests
d'intégration.

@-salutations

MCI