不依赖全局或线程本地状态的惰性字符串实现。
postpone的Python项目详细描述
惰性字符串的实现。可与gettext结合使用,用于Web应用程序的翻译。
它不如speaklater漂亮(另一个实现 但我想要的是即使 单线程交叉处理许多http请求(这在异步框架中发生)。
delay不依赖全局状态。它也不使用speaklater使用的thread.local()技巧。
使用示例:
>>>frompostponeimportevalr,LazyStringas_>>>translations={"Order {item}.":"Commander {item}.","Take a nap":"Faire une sieste","Stare at the wall for %s minutes.":"Fixer le mur pendant %s minutes.","a new pillow":"un nouvel oreiller"}>>>tasklist=[_("Order {item}.").format(item=_("a new pillow")),_("Take a nap")+'!',_("Stare at the wall for %s minutes.")%30]>>>evalr(tasklist,translations.get)['Commander un nouvel oreiller.','Faire une sieste!','Fixer le mur pendant 30 minutes.']
evalr遍历python字典、列表、元组或集合并应用 一个函数,用于封装在一个懒散的字符串对象中的所有字符串。
要将函数应用于单个表达式中的字符串,可以使用eval方法:
>>>s=_("Take a nap")+'!'>>>s.eval(str.upper)'TAKE A NAP!'>>>s.eval(translations.get)'Faire une sieste!'
或者,同样地,evalr函数
>>>evalr(_("a new pillow").capitalize(),translations.get)'Un nouvel oreiller'
对于大多数包含多个字符串或语言的项目,您可能希望 使用gettext模块为您提供翻译功能。
importgettexttranslation=gettext.translation("myproject","./locale",["fr"])translated_tasklist=evalr(tasklist,translation.ugettext)
Github回购:https://github.com/leforestier/postpone