在 Web 应用程序中使用 Python 语言环境或等效语言?

问题描述 投票:0回答:4

Python 的区域设置实现似乎想要从系统设置中读取区域设置或通过 setlocale 调用进行设置。这些都不适合我,因为我想在 Web 应用程序中使用这些功能,其中所需的区域设置是用户的区域设置。

并且在 locale docs 中有一些警告让整个事情变得可怕:

除此之外,还有一些实施 经常被破坏 区域设置更改可能会导致核心转储。 这使得现场有些痛苦 正确使用

还有

打电话通常是个坏主意 setlocale() 在某些库例程中, 因为作为副作用,它会影响 整个节目

那么,是否有一个合理的区域设置可供在网络应用程序中使用?是Babel吗,还是还有其他选择?我正在寻找能够处理货币以及日期和数字的东西。

python web-applications internationalization
4个回答
16
投票

locale
对于任何需要支持多种语言环境的应用程序来说都没有好处——它对于这些应用程序(基本上是任何服务器端应用程序,包括 Web 应用程序)的设计确实很糟糕。 在可行的情况下,PyICU是一个极其的卓越解决方案——顶级质量的 i18n/L10n 支持、速度、灵活性(缺点:虽然 ICU 的文档很好,但 PyICU 的文档没那么好;-)。 唉,并不总是允许您部署自己的扩展...:-(.

特别是,我仍在为 App Engine 应用程序寻找可靠的 i18n/L10n 解决方案 - “翻译”本身是最少的问题(您可以切换到正确的模板集),问题是存在还有许多其他 L10n 方面(ICU 很好地支持的方面,例如排序规则等)。我想已经提到的 Babel 是唯一明智的起点。


1
投票

不要使用setlocale。

检查它是如何在 django 中完成的。看起来他们使用 gettext 库的类 api,并且不使用 setlocale 函数,我敢打赌这是有原因的。

他们手动存储每个线程的翻译检查这里它是如何实现的(gettext函数和_active字典)。


0
投票

如果您要处理货币、日期和数字,最好的方法是在浏览器传递给您的区域设置上单击

setlocale
。 Python 文档中有很多针对真正不合时宜的平台的 zomgz 警告;其中大部分都可以忽略。

“频繁的区域设置更改”应该不重要,除非我遗漏了一些东西。

您没有做消息目录或任何奇特的事情,所以坚持使用 Python 为您提供的内容。


0
投票

Django 的 i18n 框架通过不使用它来弥补

setlocale()
的缺点。这样,区域设置是根据请求设置的,如果您使用
LocaleMiddleware
,则可以根据 UserAgent
Accept-Language
设置进行更改。请参阅文档

© www.soinside.com 2019 - 2024. All rights reserved.