public function ajax_translate()

in admin/AmazonAI-Translator.php [246:362]


	public function ajax_translate() {

		check_ajax_referer( 'pollyajaxnonce', 'nonce' );

		$common = $this->common;
		$polly = new AmazonAI_PollyService($common);

		$logger = new AmazonAI_Logger();
		$logger->log(sprintf('%s Ajax Translate', __METHOD__));

		$post_id = $_POST['post_id'];
		$phase   = $_POST['phase'];
		$langs   = $_POST['langs'];

		$logger->log(sprintf('%s Phase ( %s )', __METHOD__, $phase));

		$step       = '';
		$percentage = 0;
		$message    = '';

		$all_langs = [];
		$index     = 0;

		$source_language  = $common->get_source_language();
		$translate_client = $common->get_translate_client();

		if ( empty( $source_language ) ) {
			$message    = 'Amazon Translate functionality needs to be enabled before publishing the post';
			$step       = 'done';
			$percentage = 100;

			$logger->log(sprintf('%s Transalte functionality is not enabled )', __METHOD__));

		} else {

			foreach ( $common->get_all_translatable_languages() as $supported_lan ) {
				if ( $common->is_language_translatable( $supported_lan ) and ( $supported_lan != $source_language ) ) {
					if ($common->if_translatable_enabled_for_language($supported_lan)) {
						$all_langs[ $index ] = $supported_lan;
						$index++;
					}
				}
			}

			if ( 'start' == $phase ) {

				$langs = $all_langs;
				update_post_meta( $post_id, 'amazon_ai_source_language', $source_language );

			} else {

				$logger->log(sprintf('%s Languages ( %s )', __METHOD__, implode(" ", $langs)));

				# Check what language
				$language_code = array_shift( $langs );

				#Retrieve original text
				$content = get_post_field('post_content', $post_id);
				$clean_text = $common->clean_text( $post_id, false, false );

				$logger->log(sprintf('%s Translating from ( %s ) to ( %s )', __METHOD__, $source_language, $language_code));
				$wp_filesystem = $common->prepare_wp_filesystem();

				if ( $common->is_language_translatable( $language_code ) and ( $language_code != $source_language ) ) {

					try {
						$clean_title = $common->clean_text( $post_id, false, true );
						$translated_title = $this->translate( $translate_client, $clean_title, $source_language,  $language_code);
						$translated_text = $this->translate_post( $common, $translate_client, $content, $source_language,  $language_code);
						update_post_meta( $post_id, 'amazon_polly_transcript_' . $language_code, $translated_text );
						update_post_meta( $post_id, 'amazon_polly_transcript_title_' . $language_code, $translated_title );
						$sentences = $common->break_text( $translated_text );

						// Create audio files for files only if this functionality is enabled.
						if ( $common->is_audio_for_translations_enabled() ) {
							$logger->log(sprintf('%s Starting preparing audio version', __METHOD__));
							$polly->convert_to_audio( $post_id, '', '', $sentences, $wp_filesystem, $language_code );
						}
					} catch(Exception $e) {
						error_log($e);
					}
				}

				$percentage = 100 - ( count( $langs ) / $index ) * 100;
			}//end if

			if ( empty( $langs ) ) {
				$step    = 'done';
				$message = 'Translation completed!';
			}
		}//end if

		$temp_langs = $langs;
		$next_lang = array_shift( $temp_langs );

		if ( ! empty( $next_lang ) ) {
			$logger->log(sprintf('%s Next language ( %s ))', __METHOD__, $next_lang));
			$message = 'Translating from ' . $common->get_language_name( $source_language ) . ' to ' . $common->get_language_name( $next_lang );
		} else {
			$message = 'Translation completed!';
		}

		if ( empty( $source_language ) ) {
			$message = 'Amazon Translate functionality needs to be enabled before publishing the post';
		}

		echo wp_json_encode(
			array(
				'step'       => $step,
				'langs'      => $langs,
				'percentage' => $percentage,
				'message'    => $message,
			)
		);

		wp_die();
	}