为python实现一个惰性字符串,可用于gettext
speaklater的Python项目详细描述
为翻译提供惰性字符串的模块。基本上是你 获取一个似乎是字符串但每 根据您提供的可调用项计算值的时间。
例如,您可以有一个全局函数 具有当前设置语言值的延迟字符串。
示例:
>>> from speaklater import make_lazy_string >>> sval = u'Hello World' >>> string = make_lazy_string(lambda: sval)
此延迟字符串的计算结果将为sval变量的值。
>>> string lu'Hello World' >>> unicode(string) u'Hello World' >>> string.upper() u'HELLO WORLD'
如果更改该值,则惰性字符串也将更改:
>>> sval = u'Hallo Welt' >>> string.upper() u'HALLO WELT'
当与线程local和gettext结合使用时,这尤其方便 可翻译字符串的翻译或指令:
>>> from speaklater import make_lazy_gettext >>> from threading import local >>> l = local() >>> l.translations = {u'Yes': 'Ja'} >>> lazy_gettext = make_lazy_gettext(lambda: l.translations.get) >>> yes = lazy_gettext(u'Yes') >>> print yes Ja >>> l.translations[u'Yes'] = u'Si' >>> print yes Si
惰性字符串不是真正的字符串,因此如果将此类字符串传递给 执行实例检查的函数将失败。那样的话 必须使用unicode和/或string显式转换它,具体取决于 惰性字符串封装的字符串类型。
要检查字符串是否延迟,可以使用is lazy>字符串函数:
>>> from speaklater import is_lazy_string >>> is_lazy_string(u'yes') False >>> is_lazy_string(yes) True
版本1.2中的新功能:现在还可以将关键字参数传递给 与make_lazy_string一起使用的回调。