Tornado的模板翻译函数'_',它来自哪里?

时间:2012-09-24 15:17:56

标签: python templates internationalization tornado

我需要修饰默认的tornado.locale.Locale.translate以添加一些额外的逻辑。

在模板中,translate方法是一个下划线(如gettext约定所规定的那样),但我找不到定义或传递的位置(我希望它被指定为模板环境变量别名前面提到的translate方法)

我的另一个选择是用我自己的方法替换所有出现的'_'方法,但我更喜欢坚持标准符号,所以我不必在之后调整字符串提取。

1 个答案:

答案 0 :(得分:2)

没关系,我刚刚发现它:

在龙卷风的web.py中:

   def render_string(self, template_name, **kwargs):
        """Generate the given template with the given arguments.

        We return the generated string. To generate and write a template
        as a response, use render() above.
        """
        # If no template_path is specified, use the path of the calling file
        template_path = self.get_template_path()
        if not template_path:
            frame = sys._getframe(0)
            web_file = frame.f_code.co_filename
            while frame.f_code.co_filename == web_file:
                frame = frame.f_back
            template_path = os.path.dirname(frame.f_code.co_filename)
        with RequestHandler._template_loader_lock:
            if template_path not in RequestHandler._template_loaders:
                loader = self.create_template_loader(template_path)
                RequestHandler._template_loaders[template_path] = loader
            else:
                loader = RequestHandler._template_loaders[template_path]
        t = loader.load(template_name)
        args = dict(
            handler=self,
            request=self.request,
            current_user=self.current_user,
            locale=self.locale,
            _=self.locale.translate,
            static_url=self.static_url,
            xsrf_form_html=self.xsrf_form_html,
            reverse_url=self.application.reverse_url
        )
        args.update(self.ui)
        args.update(kwargs)
        return t.generate(**args)

args字典有_=self.locale.translate;所以我可以在我的处理程序中装饰该对象。