public function amazon_polly_ajax_translate()

in admin/class-amazonpolly-admin.php [2152:2245]


	public function amazon_polly_ajax_translate() {

		check_ajax_referer( 'pollyajaxnonce', 'nonce' );

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

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

		$all_langs = [];
		$index     = 0;
		$src_lang  = get_post_meta( $post_id, 'amazon_polly_transcript_source_lan', true );


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

		} else {
			foreach ( $this->translate_langs as $supported_lan ) {
				if ( $this->check_if_translate( $supported_lan ) and ( $supported_lan != $src_lang ) ) {
					$all_langs[ $index ] = $supported_lan;
					$index++;
				}
			}

			if ( 'start' == $phase ) {
				$langs = $all_langs;
			} else {

				if ( ( $key = array_search( 'en', $langs ) ) !== false ) {
					$language_code = 'en';
					unset( $langs[ $key ] );
				} else {
					$language_code = array_shift( $langs );
				}

				if ( 'en' == $language_code ) {
					$clean_text = $this->clean_text( $post_id );
				} else {
					$clean_text = get_post_meta( $post_id, 'amazon_polly_transcript_en', true );
					$src_lang   = 'en';
				}

				$wp_filesystem = $this->prepare_wp_filesystem();

				if ( $this->check_if_translate( $language_code ) and ( $language_code != $src_lang ) ) {
					$translated_text = $this->translator->translate( $this->translate_client, $clean_text, $src_lang,  $language_code);
					update_post_meta( $post_id, 'amazon_polly_transcript_' . $language_code, $translated_text );
					$sentences = $this->break_text( $translated_text );
					$this->convert_to_audio( $post_id, '', '', $sentences, $wp_filesystem, $language_code );
				}

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

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

		$next_langs = $langs;
		if ( ( 'en' != $src_lang ) && ( $key = array_search( 'en', $next_langs ) ) !== false ) {
			$next_lang = 'en';
		} else {
			$next_lang = array_shift( $next_langs );
		}

		if ( ! empty( $next_lang ) ) {
			$message = 'Translating from ' . $this->amazon_polly_map( $src_lang ) . ' to ' . $this->amazon_polly_map( $next_lang );
		} else {
			$message = 'Translation completed!';
		}

		if ( empty( $src_lang ) ) {
			$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();
	}