实现了Python中用于与gettext一起使用的懒惰字符串
项目描述
一个提供翻译懒惰字符串的模块。基本上,你得到一个看起来像是字符串的对象,但每次根据你提供的可调用对象评估值时,它都会改变值。
例如,你可以有一个全局的 lazy_gettext 函数,它返回一个带有当前设置语言值的懒惰字符串。
示例
>>> 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'
当与线程局部和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_string 函数
>>> from speaklater import is_lazy_string >>> is_lazy_string(u'yes') False >>> is_lazy_string(yes) True
新功能 1.2:现在也可以通过 make_lazy_string 使用关键字参数传递回调。