Fork of implements a lazy string for python useful for use with 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 一起使用的回调。