在网页应用中使用Python本地化或等效方法?
Python的地区设置功能似乎想要从系统设置中读取地区信息,或者通过调用setlocale来设置地区。但这两种方法对我来说都不太好用,因为我想在一个网页应用中使用,想要的地区设置是用户的地区。
而且在地区文档中有一些警告,让人觉得这个功能有点可怕:
此外,有些实现方式存在问题,频繁更改地区设置可能会导致程序崩溃。这让正确使用地区设置变得有点麻烦。
还有
在某些库的例程中调用setlocale()通常是个坏主意,因为这会影响整个程序。
那么,在网页应用中有没有合理的地区设置替代方案呢?Babel是否合适,还是有其他选择?我希望找到一个可以处理货币、日期和数字格式的工具。
[更新] 为了更清楚,我最感兴趣的是不同地区的日期、数字和货币格式化。
4 个回答
Django的国际化框架解决了setlocale()
的一些不足之处,因为它根本不使用这个方法。这样一来,每次请求时都会设置地区信息。如果你使用LocaleMiddleware
,它可以根据用户的浏览器设置(也就是Accept-Language
)来自动调整地区信息。想了解更多,可以查看文档。
locale
对于需要支持多种地区设置的应用来说并不好用——它的设计真的不适合这些应用(基本上任何服务器端的应用,包括网页应用)。如果条件允许的话,PyICU 是一个非常优秀的解决方案——它提供了高质量的国际化和本地化支持,速度快,灵活性强(缺点是,虽然ICU的文档不错,但PyICU的文档就不太好;-)。可惜的是,并不是总能使用自己的扩展... :-(。
特别是,我仍在寻找一个适合App Engine应用的可靠国际化和本地化解决方案——“翻译”本身并不是最主要的问题(你可以直接切换到合适的模板),问题在于还有很多其他本地化的方面(这些方面ICU支持得很好,比如排序规则等等)。我想之前提到的Babel 是一个比较合理的起点。