plugin_screen_hook_suffix = add_submenu_page('amazon_ai', 'Translate', 'Translate', 'manage_options', 'amazon_ai_translate', array(
$this,
'amazonai_gui'
));
}
public function amazonai_gui()
{
?>
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 ) {
$disabled = 'disabled';
}
#Some translations between languages are not supported by the service.
#Details: https://docs.aws.amazon.com/translate/latest/dg/pairs.html
if (!$this->common->is_translation_supported($src_lang, $lanuage)) {
$disabled = 'disabled';
}
echo '';
echo '| common->check_if_language_is_checked($lanuage, $src_lang) . ' ' . $disabled . '>' . $language_name . ' | ';
$voice_id = get_option($lan_voice_option);
if ( $src_lang != $lanuage ) {
if ($this->common->is_audio_for_translations_enabled()) {
echo ' Voice: ';
}
}
echo ' | ';
echo 'Label: | ';
echo '';
$display_values = [ 'Flag', 'Label', 'Flag + Label' ];
$only_labels = array("ar", "fa", "hi", "ms");
if ( in_array($lanuage, $only_labels) ) {
$display_values = [ '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 = $this->common->get_aws_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
}
}