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