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);
         }
     }
 }