function send_strings_to_translation_service($string_ids, $target_language, $translator_id) { /** @var WPML_String_Translation $WPML_String_Translation */ global $WPML_String_Translation; if (sizeof($string_ids) > 0) { $project = $this->basket->get_project(); $strings = array(); $word_count = 0; $source_language = $this->basket->get_source_language(); foreach ($string_ids as $string_id) { $string_data_query = "SELECT id, context, name, value FROM {$this->wpdb->prefix}icl_strings WHERE id=%d"; $string_data_prepare = $this->wpdb->prepare($string_data_query, $string_id); $string_data = $this->wpdb->get_row($string_data_prepare); $word_count += $WPML_String_Translation->estimate_word_count($string_data->value, $source_language); $strings[] = $string_data; } $xliff = new WPML_TM_Xliff_Writer($this->job_factory); $res = $project->send_to_translation_batch_mode($xliff->get_strings_xliff_file($strings, $source_language, $target_language), 'String Translations', '', '', $source_language, $target_language, $word_count); if ($res) { foreach ($strings as $string_data) { $translation_service = TranslationProxy_Service::get_translator_data_from_wpml($translator_id); $added = icl_add_string_translation($string_data->id, $target_language, null, ICL_TM_WAITING_FOR_TRANSLATOR, $translation_service['translator_id'], $translation_service['translation_service'], TranslationProxy_Batch::update_translation_batch($this->basket->get_name())); if ($added) { $data = array('rid' => $res, 'string_translation_id' => $added, 'timestamp' => date('Y-m-d H:i:s'), 'md5' => md5($string_data->value)); $this->wpdb->insert($this->wpdb->prefix . 'icl_string_status', $data); //insert rid } } $this->wpdb->insert($this->wpdb->prefix . 'icl_core_status', array('rid' => $res, 'module' => '', 'origin' => $source_language, 'target' => $target_language, 'status' => ICL_TM_WAITING_FOR_TRANSLATOR)); if ($project->errors && count($project->errors)) { $res['errors'] = $project->errors; } return $res; } } return 0; }
/** * @param $item_type_name * @param $item_type * @param $strings_basket_items * @param $translators * @param $basket_name */ public static function send_strings_jobs($item_type_name, $item_type, $strings_basket_items, $translators, $basket_name) { /** @var $iclTranslationManagement TranslationManagement */ global $iclTranslationManagement, $wpdb, $wpml_translation_job_factory; $strings_local = array(); if (!empty($strings_basket_items)) { // for every string in cart // collect strings for local translation // collect string for remote translation $strings_remote = array(); foreach ($strings_basket_items as $basket_item_id => $basket_item) { foreach ($basket_item['to_langs'] as $language_code => $action) { if (is_numeric($translators[$language_code])) { $strings_local[$language_code][] = $basket_item_id; } else { $strings_remote[$language_code][] = $basket_item_id; } } } if ($strings_remote) { foreach ($strings_remote as $target => $string_ids) { $basket = new WPML_Translation_Basket($wpdb); $st_tp_job = new WPML_TP_String_Job($wpdb, $basket, $wpml_translation_job_factory); $result = $st_tp_job->send_strings_to_translation_service($string_ids, $target, $translators[$target]); if (isset($result['errors']) && count($result['errors'])) { foreach ($result['errors'] as $error) { $error_message = array('type' => 'error', 'text' => $error); $iclTranslationManagement->add_message($error_message); } } if (!$result) { foreach ($string_ids as $string_id) { $default_string_language = $basket->get_source_language(); $string = icl_get_string_by_id($string_id, $default_string_language); $message = array('type' => 'error', 'text' => sprintf(__('String "%s" has not been sent.', 'wpml-translation-management'), $string)); $iclTranslationManagement->add_message($message); } break; } } } foreach ($strings_local as $target => $string_ids) { self::translation_send_strings_local($string_ids, $target, $translators[$target], $basket_name); } } }