巴别塔开发

巴别塔作为类库有着悠久的历史,可以追溯到TRAC项目。从那时起,它已经发展成为一个独立开发的项目,实现了CLDR项目的数据访问。

本文档试图尽可能地解释项目的一般规则,以防您想要帮助开发。

跟踪CLDR

一般来说,该项目的目标是尽可能密切地使用CLDR数据。这在过去造成了一些令人沮丧的问题,因为数据完全不在我们的控制之下。为了将挫折感降至最低,我们通常通过以下方式处理CLDR更新:

  • 只有巴别塔的主要版本才能提升CLDR数据。

  • 切勿对CLDR数据执行自定义错误修复。

  • 千万不要绕过巴别塔中的CLDR错误。如果您在数据中发现问题,请向上游报告。

  • 尽快调整数据的解析,否则以后会失控。这尤其需要更大的更新,从而改变多元化和更多。

  • 尽量不要针对可能会更改的特定CLDR数据进行测试。

Python版本

目前应该支持以下Python版本:

  • Python 2.7

  • Python 3.4及更高版本

  • PyPy Tracking 2.7和3.2及更高版本

虽然PyPy目前不支持3.3,但它确实支持传统的Unicode文字,这极大地简化了整个情况。

文档必须构建在Python2上,Python3对文档的支持是一个可选的目标。文档中的代码示例最好是以一种使其在2.x和3.x上都能工作的风格编写,优先于2.x和3.x。

统一码

Unicode在巴别塔是一件大事。以下是规则的设置方式:

  • 在内部,一切都是Unicode,这才是有意义的Unicode。此规则的例外是在Python2上传统上为字节的内容。例如,只要有可能,Python2上的文件名就应该被视为字节。

  • 在边界显式编码/解码。永远不要以无法重写的方式假定编码。通常应将UTF-8视为默认编码。

  • Dot Not Use(不要使用) unicode_literals ,而不是使用 u'' 字符串语法。这是因为前者由于不小心将字符串升级为Unicode而引入了无数的Unicode问题,而这是不应该的。(例如文档字符串)。

日期和时区

通常情况下,Babel中的所有时区支持都是基于pytz的,而这正是它所依赖的。Babel应该假设时区对象是基于pytz的,因为只有那些对象具有实际正确工作的API(由于非基于UTC的时区的API问题)。

要做的假设:

  • 在可能的情况下使用UTC。

  • 对当地时间要格外小心。在不知道确切时区的情况下不要使用当地时间。

  • time 没有日期是一个非常无用的构造。不要试图支持它的时区。如果这样做,则假定假定当前本地日期而不是UTC日期。