2009-10-11 10 views
4

L'implémentation des paramètres régionaux de Python semble vouloir soit lire les paramètres régionaux à partir des paramètres du système, soit les paramétrer via un appel setlocale. Aucun de ceux-ci ne fonctionne pour moi puisque je voudrais utiliser les capacités dans une application Web, où les paramètres régionaux souhaités sont les paramètres régionaux de l'utilisateur.Utilisation des paramètres régionaux Python ou équivalent dans les applications Web?

Et il y a des avertissements dans le locale docs qui font toute la peur chose:

En plus de cela, une mise en œuvre sont brisés de telle manière que fréquente changements de paramètres régionaux peuvent provoquer des décharges de base. Cela rend le lieu un peu douloureux utiliser correctement

Et

Il est généralement une mauvaise idée d'appeler setlocale() dans une routine de bibliothèque, depuis comme un effet secondaire affecte la programme complet

Alors, est-il une alternative locale raisonnable pour une utilisation dans les applications web? Y at-il Babel ou y a-t-il d'autres alternatives? Je cherche quelque chose qui va gérer les devises ainsi que les dates et les chiffres. [Mise à jour] Pour clarifier, je m'intéresse au formatage de date, de nombre et de devise pour divers paramètres régionaux.

Répondre

0

Votre meilleure approche sera de setlocale sur les paramètres régionaux que le navigateur vous passe, si vous faites des devises, des dates et des chiffres. Il y a beaucoup d'avertissements de zomgz dans la documentation de Python pour des plates-formes vraiment hors-couleur; la plupart d'entre eux peuvent être ignorés.

"Les changements fréquents de paramètres régionaux ne devraient pas avoir d'importance, à moins que je ne manque quelque chose.

Vous n'êtes pas en train de faire des catalogues de messages ou quoi que ce soit de fantaisiste, alors restez fidèle à ce que Python vous offre.

+3

setlocale n'est pas sûr pour les threads. Sur n'importe quel serveur Web multithread, les paramètres régionaux d'une requête interfèrent avec les paramètres régionaux pour un autre, avec des résultats bizarres. – bobince

1

N'utilisez pas setlocale.

Vérifiez comment cela est fait dans django. Il semble qu'ils utilisent la classe api de la bibliothèque gettext et n'utilisent pas la fonction setlocale. Je parie qu'il y a une raison à cela.

Ils stockent manuellement un translation par thread check here comment il est implémenté (fonction gettext et _active dictionary).

+0

ce lien a mal tourné. – LhasaDad

10

locale n'est bon pour aucune application qui doit prendre en charge plusieurs paramètres régionaux - il est vraiment mal conçu pour ces applications (essentiellement toute application côté serveur, y compris les applications web). Dans la mesure du possible, PyICU est un largement supérieur à solution supérieure - support de haute qualité i18n/L10n, vitesse, flexibilité (inconvénient: alors que les docs ICU sont bons, PyICU, eh bien, pas tellement ;-). Hélas, vous n'êtes pas toujours autorisé à déployer vos propres extensions ... :-(.

En particulier, je suis toujours à la recherche d'une solution solide i18n/L10n pour les applications App Engine - "traduction" en soi est le moins de problèmes (vous pouvez simplement passer au bon ensemble de modèles), le problème est qu'il existe de nombreux autres aspects L10n (ceux que ICU supporte si bien, tels que les règles de classement, etc, etc).Je suppose que le Babel déjà mentionné est le seul endroit raisonnable à partir duquel commencer.

0

Le framework i18n de Django résout les défauts de setlocale() en ne l'utilisant pas. De cette façon, les paramètres régionaux sont définis par demande et si vous utilisez LocaleMiddleware, il peut être configuré pour changer en fonction du paramètre UserAgent Accept-Language. Voir le docs.

+0

Merci zgoda. Je suis à la recherche de certaines fonctionnalités fournies par les paramètres régionaux, notamment la mise en forme des devises, des noms et des nombres. Je n'ai pas vu ça dans les docs django. – Parand

+0

Ceux-ci appartiennent à l10n (localisation), pas i18n. Je peux recommander Babel - http://babel.edgewall.org/, il a une bonne intégration de Django et est beaucoup plus précis que le module local de python. – zgoda

Questions connexes