plugin_screen_hook_suffix = add_submenu_page('amazon_ai', 'Translate', 'Translate', 'manage_options', 'amazon_ai_translate', array( $this, 'amazonai_gui' )); } public function amazonai_gui() { ?>

Translate Configuration

common = new AmazonAI_Common(); $this->common->init(); add_settings_section('amazon_ai_translate', "Amazon Translate configuration", array( $this, 'translate_gui' ), 'amazon_ai_translate'); add_settings_field('amazon_polly_trans_enabled', __('Enable translation support:', 'amazonpolly'), array( $this, 'translation_enabled_gui' ), 'amazon_ai_translate', 'amazon_ai_translate', array( 'label_for' => 'amazon_polly_trans_enabled' )); register_setting('amazon_ai_translate', 'amazon_polly_trans_enabled'); if ($this->is_language_supported()) { if ( $this->common->is_translation_enabled() ) { if ( $this->common->validate_amazon_translate_access() ) { add_settings_field('amazon_ai_audio_for_translation_enabled', __('Enable audio for translations:', 'amazonpolly'), array( $this, 'audio_for_translation_enabled_gui' ), 'amazon_ai_translate', 'amazon_ai_translate', array( 'label_for' => 'amazon_ai_audio_for_translation_enabled' )); add_settings_field('amazon_polly_trans_langs', __('Target languages:', 'amazonpolly'), array( $this, 'translations_gui' ), 'amazon_ai_translate', 'amazon_ai_translate', array( 'label_for' => 'amazon_polly_trans_langs' )); register_setting('amazon_ai_translate', 'amazon_polly_trans_src_lang'); register_setting('amazon_ai_translate', 'amazon_ai_audio_for_translation_enabled'); foreach ($this->common->get_all_translable_languages() as $language_code) { register_setting('amazon_ai_translate', 'amazon_polly_trans_langs_' . $language_code, 'strval'); register_setting('amazon_ai_translate', 'amazon_polly_trans_langs_' . $language_code . '_voice', 'strval'); register_setting('amazon_ai_translate', 'amazon_polly_trans_langs_' . $language_code . '_label', 'strval'); register_setting('amazon_ai_translate', 'amazon_polly_trans_langs_' . $language_code . '_display', 'strval'); } } } } } /** * Render the translation target languages input. * * @param string $language_label Label which should be used for this language. * @param string $language_name Name (in english) of this language. * @param string $lanuage Language code. * @param string $voice_list List of available voices. * @param string $src_lang Source Language (code). * @since 2.0.0 */ private function show_translate_option($src_lang, $voice_list, $lanuage, $language_name, $language_label, $selected_display_value) { if (empty($src_lang)) { $src_lang = 'en'; } if ($src_lang == $lanuage) { return; } $lan_option = 'amazon_polly_trans_langs_' . $lanuage; $lan_voice_option = 'amazon_polly_trans_langs_' . $lanuage . '_voice'; $lan_label_option = 'amazon_polly_trans_langs_' . $lanuage . '_label'; $lan_display = 'amazon_polly_trans_langs_' . $lanuage . '_display'; $disabled = ''; if (($src_lang == $lanuage) or ('en' == $lanuage)) { $disabled = 'disabled'; } echo ''; echo 'common->check_if_language_is_checked($lan_option, $src_lang) . ' ' . $disabled . '>' . $language_name . ' '; $voice_id = get_option($lan_voice_option); if ($this->common->is_audio_for_translations_enabled()) { echo '  Voice: '; } echo ''; echo 'Label: '; echo ''; $display_values = [ 'Flag', 'Label' ]; echo 'Display: '; echo ''; echo ''; } /** * Render the translation target languages input. * * @since 2.0.0 */ public function translations_gui() { /** * Compare two voices for ordering purpose. * * @param string $voice1 First voice. * @param string $voice2 Second voice. * @since 1.0.0 */ function sort_voices($voice1, $voice2) { return strcmp($voice1['LanguageName'], $voice2['LanguageName']); } $translate_enabled = $this->common->is_translation_enabled(); if ($translate_enabled) { $src_lang = $this->common->get_source_language(); $voice_list = $this->common->get_polly_voices(); usort($voice_list['Voices'], 'sort_voices'); echo ''; foreach ($this->common->get_all_translable_languages() as $language_code) { $language_name = $this->common->get_language_name($language_code); $language_label = $this->common->get_language_label($language_code); $selected_display_value = $this->common->get_language_display($language_code); $this->show_translate_option($src_lang, $voice_list, $language_code, $language_name, $language_label, $selected_display_value); } echo '
'; } else { echo '

Amazon Translate needs to be enabled

'; } } private function is_language_supported() { $is_language_supported = false; $supported_languages = $this->common->get_all_translable_languages(); $selected_source_language = $this->common->get_source_language(); if (in_array($selected_source_language, $supported_languages)) { return true; } else { return false; } } /** * Render input for dciding if audio should be generated for translations. * * @since 2.5.0 */ public function audio_for_translation_enabled_gui() { $translate_enabled = $this->common->is_translation_enabled(); $is_polly_enabled = $this->common->is_polly_enabled(); if ($translate_enabled) { if ($is_polly_enabled) { echo 'common->checked_validator('amazon_ai_audio_for_translation_enabled') . ' > '; } else { echo '

Amazon Polly (Text-To-Speech) needs to be enabled

'; } } else { echo '

Amazon Translate needs to be enabled

'; } } /** * Render the enable Translation input. * * @since 2.0.0 */ public function translation_enabled_gui() { if ($this->is_language_supported()) { if ($this->common->validate_amazon_polly_access()) { if ($this->common->is_s3_enabled()) { $start_value = $this->common->checked_validator('amazon_polly_trans_enabled'); $translate_accessible = $this->common->is_translation_enabled(); $supported_regions = array( 'us-east-1', 'us-east-2', 'us-west-2', 'eu-west-1' ); $selected_region = get_option('amazon_polly_region', ''); if (in_array($selected_region, $supported_regions)) { echo 'common->checked_validator('amazon_polly_trans_enabled') . '> '; if ('checked' == trim($start_value)) { if (!$translate_accessible) { echo '

Amazon Translate not accessible. You need to update your IAM policy.

'; } } } else { echo '

You need to use one of following regions: N.Virginia, Ohio, Oregon, Ireland

'; update_option('amazon_polly_trans_enabled', ''); } } else { echo '

Amazon S3 Storage needs to be enabled

'; } } else { echo '

Please verify your AWS Credentials are accurate

'; } } else { echo '

Translate functionality not supported for this language

'; } } function translate_gui() { // Empty } }