'English','pl_PL'=>'Polski','de_DE'=>'Deutsch','fr_FR'=>'Français','es_ES'=>'Español','it_IT'=>'Italiano','pt_PT'=>'Português']; } public static function locale() { $saved=get_option('aiwest_interface_locale','auto'); return isset(self::supported()[$saved])?$saved:determine_locale(); } public static function content_locale() { $saved=get_option('aiwest_content_locale','auto'); return isset(self::supported()[$saved])?$saved:get_locale(); } public static function language_name($locale) { $names=['en'=>'English','pl'=>'Polish','de'=>'German','fr'=>'French','es'=>'Spanish','it'=>'Italian','pt'=>'Portuguese']; return $names[strtolower(substr((string)$locale,0,2))]??sanitize_text_field($locale); } public static function filter_locale($locale,$domain) { if($domain!==self::DOMAIN)return $locale; $saved=get_option('aiwest_interface_locale','auto'); return isset(self::supported()[$saved])?$saved:$locale; } public static function load() { $locale=self::locale(); // WordPress.org language packs take precedence over the bundled regional fallback. $global=WP_LANG_DIR.'/plugins/'.self::DOMAIN.'-'.$locale.'.mo'; $language=substr($locale,0,2);$fallback=['pl'=>'pl_PL','de'=>'de_DE','fr'=>'fr_FR','es'=>'es_ES','it'=>'it_IT','pt'=>'pt_PT']; $bundled=isset($fallback[$language])?AIWEST_PATH.'languages/'.self::DOMAIN.'-'.$fallback[$language].'.mo':''; $paths=array_values(array_unique(array_filter([$global,$bundled],static fn($path)=>$path && is_readable($path)))); if ($locale!==determine_locale()) { // A plugin-only override must not change WordPress's shared translation-controller locale. $translations=new MO();$loaded=false; foreach (array_reverse($paths) as $path) { $catalog=new MO(); if ($catalog->import_from_file($path)) {$translations->merge_with($catalog);$loaded=true;} } if ($loaded) {$GLOBALS['l10n'][self::DOMAIN]=$translations;unset($GLOBALS['l10n_unloaded'][self::DOMAIN]);} } else { foreach ($paths as $path) load_textdomain(self::DOMAIN,$path,$locale); } } public static function reload() { unload_textdomain(self::DOMAIN,true);self::load(); } public static function save() { foreach(['aiwest_interface_locale','aiwest_content_locale'] as $name){ $value=AIWEST_Security::post_text($name,'auto'); if($value!=='auto'&&!isset(self::supported()[$value]))$value='auto'; update_option($name,$value,false); } self::reload(); } public static function label($key) { $labels=['publish'=>__('Published','ai-webmaster-studio'),'draft'=>__('Draft','ai-webmaster-studio'),'private'=>__('Private','ai-webmaster-studio'),'trash'=>__('Trash','ai-webmaster-studio'),'future'=>__('Scheduled','ai-webmaster-studio'),'post'=>__('Post','ai-webmaster-studio'),'page'=>__('Page','ai-webmaster-studio'),'active'=>__('Active','ai-webmaster-studio'),'paused'=>__('Paused','ai-webmaster-studio'),'failed'=>__('Failed','ai-webmaster-studio'),'queued'=>__('Queued','ai-webmaster-studio'),'waiting'=>__('Waiting','ai-webmaster-studio'),'executing'=>__('Applying the approved command.','ai-webmaster-studio'),'pending'=>__('Pending','ai-webmaster-studio'),'completed'=>__('Completed','ai-webmaster-studio'),'error'=>__('Error','ai-webmaster-studio'),'running'=>__('Running','ai-webmaster-studio'),'question'=>__('Question','ai-webmaster-studio'),'command'=>__('Command for approval','ai-webmaster-studio'),'strategy'=>__('Strategy','ai-webmaster-studio'),'page_prompt'=>__('Page prompt','ai-webmaster-studio'),'site_builder_prompt'=>__('Site Builder prompt','ai-webmaster-studio'),'auto'=>__('Automatic','ai-webmaster-studio'),'improve'=>__('Improve content','ai-webmaster-studio'),'rewrite'=>__('Rewrite content','ai-webmaster-studio'),'seo'=>__('SEO','ai-webmaster-studio'),'faq'=>__('FAQ','ai-webmaster-studio'),'cta'=>__('Call to action','ai-webmaster-studio'),'visual'=>__('Appearance','ai-webmaster-studio')]; return $labels[$key]??$key; } public static function panel() { echo '

'.esc_html__('Languages','ai-webmaster-studio').'

'; foreach(['aiwest_interface_locale'=>__('Interface language','ai-webmaster-studio'),'aiwest_content_locale'=>__('Generated content language','ai-webmaster-studio')] as $name=>$label){ echo '


'; } echo '

'.esc_html__('The interface follows WordPress by default, including the administrator profile language. New website content follows the site language unless another language is selected here or explicitly requested. Existing pages and conversation history are preserved.','ai-webmaster-studio').'

'; } } AIWEST_Languages::init();