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

Par*_*and 4 python django internationalization

Python的语言环境实现似乎想要从系统设置中读取语言环境,或者通过setlocale调用来设置它.这些都不适合我,因为我想在Web应用程序中使用这些功能,其中所需的语言环境是用户的语言环境.

并且语言环境文档中有警告会使整个事情变得可怕:

最重要的是,一些实现被打破,频繁的区域设置更改可能导致核心转储.这使得语言环境在正确使用时有些痛苦

在某些库例程中调用setlocale()通常是个坏主意,因为它会影响整个程序的副作用

那么,是否有一个合理的区域设置替代用于Web应用程序?是巴贝尔它还是有其他的选择吗?我正在寻找能够处理货币以及日期和数字的东西.

[更新]为了澄清,我对各种语言环境的日期,数字和货币格式最感兴趣.

Ale*_*lli 10

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

特别是,我仍然在为App Engine应用寻找一个可靠的i18n/L10n解决方案 - "翻译"本身是最少的问题(你可以切换到正确的模板集),问题是有许多其他L10n方面(ICU支持的那些方面,例如整理规则等,等等).我想已经提到过的Babel是唯一明智的起点.

  • 对于 2019 年 python >= 3.7 来说,这仍然有效吗? (2认同)

Jed*_*ith 0

如果您要处理货币、日期和数字,最好的方法是使用setlocale浏览器传递给您的区域设置。Python 文档中有很多针对真正不合时宜的平台的 zomgz 警告;其中大部分可以忽略不计。

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

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

  • setlocale 不是线程安全的。在任何多线程 Web 服务器上,为一个请求设置区域设置都会干扰另一个请求的区域设置,从而产生奇怪的结果。 (4认同)