/** * Called when the buffer containing the original page is flushed. Triggers the translation process. * @param string $buffer Original page * @return string Modified page buffer */ function process_page(&$buffer) { /* if (!$this->target_language) { global $wp; $this->on_parse_request($wp); } */ tp_logger('processing page hit with language:' . $this->target_language, 1); $start_time = microtime(TRUE); // Refrain from touching the administrative interface and important pages if ($this->is_special_page($_SERVER['REQUEST_URI'])) { tp_logger("Skipping translation for admin pages", 3); } elseif ($this->target_language == '') { tp_logger("Skipping translation where target language is unset", 3); if (!$buffer) { tp_logger("seems like we had a premature flushing"); $this->tried_buffer = true; } } elseif ($this->options->is_default_language($this->target_language) && !$this->options->enable_default_translate) { tp_logger("Skipping translation for default language {$this->target_language}", 3); } else { // This one allows to redirect to a static element which we can find, since the redirection will remove // the target language, we are able to avoid nasty redirection loops if (is_404()) { global $wp; if (isset($wp->query_vars['pagename']) && file_exists(ABSPATH . $wp->query_vars['pagename'])) { // Hmm tp_logger('Redirecting a static file ' . $wp->query_vars['pagename'], 1); $this->tp_redirect('/' . $wp->query_vars['pagename'], 301); } } tp_logger("Translating {$_SERVER['REQUEST_URI']} to: {$this->target_language}", 1); //translate the entire page $parse = new parser(); $parse->fetch_translate_func = array(&$this->database, 'fetch_translation'); $parse->prefetch_translate_func = array(&$this->database, 'prefetch_translations'); $parse->url_rewrite_func = array(&$this, 'rewrite_url'); $parse->split_url_func = array(&$this, 'split_url'); $parse->dir_rtl = in_array($this->target_language, transposh_consts::$rtl_languages); $parse->lang = $this->target_language; $parse->default_lang = $this->options->is_default_language($this->target_language); $parse->is_edit_mode = $this->edit_mode; $parse->might_json = $this->attempt_json; $parse->is_auto_translate = $this->is_auto_translate_permitted(); // TODO - check this! if (stripos($_SERVER['REQUEST_URI'], '/feed/') !== FALSE) { tp_logger("in rss feed!", 2); $parse->is_auto_translate = false; $parse->is_edit_mode = false; $parse->feed_fix = true; } $parse->change_parsing_rules(!$this->options->parser_dont_break_puncts, !$this->options->parser_dont_break_numbers, !$this->options->parser_dont_break_entities); $buffer = $parse->fix_html($buffer); $end_time = microtime(TRUE); tp_logger('Translation completed in ' . ($end_time - $start_time) . ' seconds', 1); } return $buffer; }