La mise en œuvre des paramètres régionaux de Python semble vouloir lire les paramètres régionaux à partir des paramètres du système ou être défini via un appel de SetLocale. Ni l'un ni l'autre de ces travaux pour moi, car j'aimerais utiliser les capacités d'une application Web, où les paramètres régionaux souhaités sont les paramètres régionaux de l'utilisateur. P>
Et il y a des avertissements dans le Documents locaux qui rendent le tout effrayant: < / p>
En plus de cela, une implémentation sont cassés de telle manière que cela fréquente Les changements de localisation peuvent causer des décharges de base. Cela rend les paramètres régionaux un peu douloureux utiliser correctement p> blockQuote>
et p>
C'est généralement une mauvaise idée d'appeler SetLocale () dans une routine de bibliothèque, depuis l'effet secondaire, cela affecte la Programme complet p> blockQuote>
Ainsi, existe-t-il une alternative locale raisonnable pour une utilisation dans des applications Web? Est-ce que Babel Il ou y a-t-il d'autres alternatives? Je cherche quelque chose qui gérera les devises ainsi que les dates et les chiffres. P>
[MISE À JOUR] Pour clarifier, je suis le plus intéressé par la mise en forme de la date, du nombre et de la monnaie pour diverses localités. P>
4 Réponses :
Votre meilleure approche sera de CODE> SETLOCALE CODE> sur les paramètres régionaux que le navigateur vous transmet, si vous faites des devises, des dates et des numéros. Il y a beaucoup d'avertissements de Zomgz dans la documentation Python pour des plates-formes vraiment choquantes; la plupart d'entre eux peuvent être ignorés. P>
"Changements locaux fréquents" ne devrait pas avoir d'importance, sauf si je manque quelque chose. P>
Vous ne faites pas de catalogue de messages ou quoi que ce soit de fantaisie, alors collez-vous avec ce que Python vous donne. P>
SetLocale n'est pas le fil sûr. Sur tout serveur Web multi-threadé définissant le paramètre local d'une demande interférera avec les paramètres régionaux d'une autre, avec des résultats bizarres.
Vérifiez comment il se fait dans Django . On dirait qu'ils utilisent une API de classe de GetText Bibliothèque et n'utilisent pas la fonction SetLocale, je parie qu'il y a une raison pour cela. P>
Ils stockent manuellement un traduction par fil Vérifiez ici comment il est implémenté (fonction GetText et dictionnaire _actif). P>
Ce lien est devenu mauvais.
En particulier, je suis toujours à la recherche d'une solution solide I18N / L10N pour les applications de moteur d'applications - "Traduction" en soi est le moindre de problèmes (vous pouvez simplement passer à droite de modèles), le problème est qu'il existe de nombreux autres aspects L10N (ceux que l'ICU soutient si bien, tels que les règles de collement par exemple, etc.). Je suppose que le Babel est le seul endroit sensible à partir de. P > local code> n'est pas bon pour une application qui doit prendre en charge plusieurs locaux - c'est vraiment mal conçu pour ces applications (essentiellement toute application côté serveur, y compris les applications Web). Où réalisable, PYICU est un de vaste em> solution supérieure - top- Support de qualité I18N / L10N, vitesse, flexibilité (inconvénient: tandis que les docs de l'ICU sont bons, Pyicu, bien, pas tant ;-). Hélas, pas toujours êtes-vous autorisé à déployer vos propres extensions ...: - (. P>
Est-ce toujours valable en 2019 avec Python> = 3,7?
Le cadre I18N de Django travaille sur les lacunes de SetLocale () code> en l'utilisant. De cette façon, les paramètres régionaux sont définis par demande et si vous utilisez
localemiddleware code> il peut être réglé sur Modifier en fonction de la section UserAgent
Accepter-Langue code>. Voir le Docs . P>
Merci Zgoda. Je cherche certaines des fonctionnalités fournies par les paramètres régionaux - en particulier, la monnaie, le nom et le formatage du numéro. Je n'ai pas vu ceux des docs Django.
Celles-ci appartiennent à L10N (localisation), pas I18N. Je peux recommander Babel - babel.dgewall.org , il a une belle intégration Django et est beaucoup plus précise que Python's Construit dans le module locale.