Python 的区域设置实现似乎想要从系统设置中读取区域设置或通过 setlocale 调用进行设置。这些都不适合我,因为我想在 Web 应用程序中使用这些功能,其中所需的区域设置是用户的区域设置。
并且在 locale docs 中有一些警告让整个事情变得可怕:
除此之外,还有一些实施 经常被破坏 区域设置更改可能会导致核心转储。 这使得现场有些痛苦 正确使用
还有
打电话通常是个坏主意 setlocale() 在某些库例程中, 因为作为副作用,它会影响 整个节目
那么,是否有一个合理的区域设置可供在网络应用程序中使用?是Babel吗,还是还有其他选择?我正在寻找能够处理货币以及日期和数字的东西。
locale
对于任何需要支持多种语言环境的应用程序来说都没有好处——它对于这些应用程序(基本上是任何服务器端应用程序,包括 Web 应用程序)的设计确实很糟糕。 在可行的情况下,PyICU是一个极其的卓越解决方案——顶级质量的 i18n/L10n 支持、速度、灵活性(缺点:虽然 ICU 的文档很好,但 PyICU 的文档没那么好;-)。 唉,并不总是允许您部署自己的扩展...:-(.
特别是,我仍在为 App Engine 应用程序寻找可靠的 i18n/L10n 解决方案 - “翻译”本身是最少的问题(您可以切换到正确的模板集),问题是存在还有许多其他 L10n 方面(ICU 很好地支持的方面,例如排序规则等)。我想已经提到的 Babel 是唯一明智的起点。
如果您要处理货币、日期和数字,最好的方法是在浏览器传递给您的区域设置上单击
setlocale
。 Python 文档中有很多针对真正不合时宜的平台的 zomgz 警告;其中大部分都可以忽略。
“频繁的区域设置更改”应该不重要,除非我遗漏了一些东西。
您没有做消息目录或任何奇特的事情,所以坚持使用 Python 为您提供的内容。
Django 的 i18n 框架通过不使用它来弥补
setlocale()
的缺点。这样,区域设置是根据请求设置的,如果您使用 LocaleMiddleware
,则可以根据 UserAgent Accept-Language
设置进行更改。请参阅文档。