diff --git a/changelog.txt b/changelog.txt index 4b4817e..3282064 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,26 @@ == Changelog == += 1.2.3 = + +_Release date: 2026-08-24_ + +**Changed** + +* Manager (by ROBOTSTXT) detection now checks the ecosystem presence constant `ROBOTSTXT_MANAGER_NOTICED` (defined by Manager 1.6.2+) instead of scanning the installed plugin list on every call. On sites running older Manager versions the detection falls back to the previous plugin-list scan. + +**Compatibility** + +* WordPress: 7.0 - 7.1 +* PHP: 5.6 - 8.5 +* WP-CLI: 2.12 or newer + +**Tests** + +* PHP Coding Standards: WordPress-Core, WordPress-Docs, WordPress-Extra +* PHPCompatibility: 5.6 - 8.5 +* PHPStan: level 9 (incl. wp-compat @ Requires at least 7.0) +* PHPUnit: all tests passing (single-site), including both Manager-detection paths (constant defined / not defined) + = 1.2.2 = _Release date: 2026-08-17_ diff --git a/includes/class-ai-translator-manager-notice.php b/includes/class-ai-translator-manager-notice.php index ec79f2f..63caa4b 100644 --- a/includes/class-ai-translator-manager-notice.php +++ b/includes/class-ai-translator-manager-notice.php @@ -66,11 +66,19 @@ if ( ! class_exists( 'AI_Translator_Manager_Notice' ) ) { /** * Returns whether Manager (by ROBOTSTXT) is installed and active. * + * Uses the ecosystem presence constant (Manager 1.6.2+) and falls back + * to a plugin-list scan for older Manager versions. + * * @since 1.2.2 + * @since 1.2.3 Added the ROBOTSTXT_MANAGER_NOTICED presence-constant check. * * @return bool True when Manager is present and activated. */ public function is_manager_active() { + if ( defined( 'ROBOTSTXT_MANAGER_NOTICED' ) && ROBOTSTXT_MANAGER_NOTICED ) { + return true; + } + if ( ! function_exists( 'get_plugins' ) ) { require_once ABSPATH . 'wp-admin/includes/plugin.php'; } diff --git a/languages/robotstxt-ai-translator-ca.l10n.php b/languages/robotstxt-ai-translator-ca.l10n.php index 337017c..1d2ef49 100644 --- a/languages/robotstxt-ai-translator-ca.l10n.php +++ b/languages/robotstxt-ai-translator-ca.l10n.php @@ -1,2 +1,2 @@ 'robotstxt-ai-translator','plural-forms'=>'nplurals=2; plural=(n != 1);','language'=>'ca','project-id-version'=>'AI Translator (by ROBOTSTXT) 1.2.2','pot-creation-date'=>'2026-08-17T16:27:30+00:00','po-revision-date'=>'2026-05-23 10:30+0000','x-generator'=>'hand-written','messages'=>['AI Translator (by ROBOTSTXT)'=>'AI Translator (by ROBOTSTXT)','Translate post titles and content from the editor using the native WordPress AI client (available in WP 7.0+). Multisite-ready with global or per-site configuration.'=>'Tradueix títols i contingut de les entrades des de l\'editor usant el client d\'IA natiu de WordPress (disponible al WP 7.0+). Preparat per a multilloc amb configuració global o per lloc.','ROBOTSTXT'=>'ROBOTSTXT','AI Translator'=>'AI Translator','Settings'=>'Ajustaments','You do not have permission to access this page.'=>'No tens permís per accedir a aquesta pàgina.','AI Translator Settings'=>'Ajustaments d\'AI Translator','Settings saved.'=>'Ajustaments desats.','Translation fields'=>'Camps a traduir','Translate title'=>'Tradueix el títol','Translate content'=>'Tradueix el contingut','Translate excerpt'=>'Traduir l\'extracte','Network defaults: title %1$s, content %2$s, excerpt %3$s.'=>'Valors predeterminats de la xarxa: títol %1$s, contingut %2$s, extracte %3$s.','enabled'=>'activat','disabled'=>'desactivat','Request timeout'=>'Temps màxim de resposta','seconds'=>'segons','Maximum time the server waits for an AI response. PHP max_execution_time is %d s — values above this have no effect.'=>'Temps màxim que el servidor espera una resposta de la IA. El max_execution_time de PHP és de %d s — els valors superiors no tenen efecte.','Maximum time the server waits for an AI response. PHP max_execution_time is unlimited.'=>'Temps màxim que el servidor espera una resposta de la IA. El max_execution_time de PHP és il·limitat.','MultilingualPress'=>'MultilingualPress','Auto-translate new connected posts'=>'Traduir automàticament les entrades connectades noves','When MultilingualPress creates a new connected post, automatically translate its enabled fields into the target site\'s language. The translation runs synchronously during save.'=>'Quan MultilingualPress crea una entrada connectada nova, tradueix automàticament els camps activats a l\'idioma del lloc de destinació. La traducció s\'executa de manera síncrona en desar.','AI Translator Network Settings'=>'Ajustaments de xarxa d\'AI Translator','Network settings saved.'=>'Ajustaments de xarxa desats.','Configuration mode'=>'Mode de configuració','Global configuration: a single setting applies to every site.'=>'Configuració global: un sol ajustament s\'aplica a tots els llocs.','Per-site configuration: each site can override these defaults.'=>'Configuració per lloc: cada lloc pot sobreescriure aquests valors predeterminats.','In global mode this is the configuration for the whole network. In per-site mode these values are used as defaults for sites that have not been configured individually.'=>'En mode global aquesta és la configuració per a tota la xarxa. En mode per lloc aquests valors s\'utilitzen com a predeterminats per als llocs que no s\'hagin configurat individualment.','You do not have permission to perform this action.'=>'No tens permís per dur a terme aquesta acció.','Recommended models'=>'Models recomanats','This plugin does not call AI providers directly. Configure your preferred provider in the WordPress AI plugin settings. The table below is a guide to help you pick a model based on your translation use case.'=>'Aquest connector no truca directament als proveïdors d\'IA. Configura el teu proveïdor preferit als ajustaments del connector WordPress AI. La taula següent és una guia per ajudar-te a triar un model segons el teu cas d\'ús de traducció.','Use case'=>'Cas d\'ús','Recommended model'=>'Model recomanat','Why'=>'Per què','These recommendations are based on public benchmarks and community feedback as of the plugin release date. They may change as providers update their models.'=>'Aquestes recomanacions es basen en benchmarks públics i comentaris de la comunitat en la data de publicació del connector. Poden canviar a mesura que els proveïdors actualitzin els seus models.','European languages (ES, CA, FR, DE, IT, PT)'=>'Llengües europees (ES, CA, FR, DE, IT, PT)','DeepL API Pro'=>'DeepL API Pro','Best fluency and naturalness (92/100 in benchmarks). Formality control and custom glossaries.'=>'La millor fluïdesa i naturalitat (92/100 en benchmarks). Control de formalitat i glossaris personalitzats.','Asian languages (ZH, JA, KO)'=>'Llengües asiàtiques (ZH, JA, KO)','GPT-4o / GPT-5 or Claude Sonnet 4'=>'GPT-4o / GPT-5 o Claude Sonnet 4','Better handling of implicit subjects, honorifics, and cultural references. DeepL falls behind here.'=>'Millor gestió dels subjectes implícits, els honorífics i les referències culturals. DeepL queda enrere aquí.','Marketing / brand tone'=>'Màrqueting / to de marca','Claude Sonnet 4 / Opus 4'=>'Claude Sonnet 4 / Opus 4','Better preservation of tone, brand voice, and nuance. Ideal for creative copy.'=>'Preserva millor el to, la veu de la marca i els matisos. Ideal per a copy creatiu.','Technical documentation / code'=>'Documentació tècnica / codi','GPT-4o / GPT-5'=>'GPT-4o / GPT-5','Higher accuracy with variables, structured formats, and technical terminology.'=>'Major precisió amb variables, formats estructurats i terminologia tècnica.','Long documents (100+ pages)'=>'Documents llargs (més de 100 pàgines)','Gemini 2.5 Pro'=>'Gemini 2.5 Pro','1M token context window. Maintains terminological consistency across long texts.'=>'Finestra de context d\'1 milió de tokens. Manté la consistència terminològica en textos llargs.','High volume / low cost'=>'Alt volum / baix cost','DeepSeek-V3'=>'DeepSeek-V3','Quality comparable to GPT-5 at ~$0.14/M tokens (20-50x cheaper than Claude/GPT).'=>'Qualitat comparable a GPT-5 a ~0,14 $/M tokens (entre 20 i 50 vegades més barat que Claude/GPT).','Rare / indigenous languages'=>'Llengües rares / indígenes','Claude Sonnet or Taskade Translate (multi-model routing)'=>'Claude Sonnet o Taskade Translate (encaminament multimodel)','Better coverage for uncommon language pairs.'=>'Millor cobertura en parells de llengües poc habituals.','Maximum coverage (133+ languages)'=>'Cobertura màxima (més de 133 llengües)','Google Cloud Translation'=>'Google Cloud Translation','The most complete option, though with slightly lower quality on European languages.'=>'L\'opció més completa, tot i que amb una qualitat lleugerament inferior en llengües europees.','The --locale flag is required.'=>'El paràmetre --locale és obligatori.','The --post-id and --post-type flags are mutually exclusive.'=>'Els paràmetres --post-id i --post-type són mútuament excloents.','The locale %s is not installed on this site.'=>'La llengua %s no està instal·lada en aquest lloc.','No user context. Pass --user= so post updates carry an author and capability checks apply.'=>'Sense context d\'usuari. Passa --user= perquè les actualitzacions d\'entrades tinguin autor i s\'apliquin les comprovacions de capacitats.','AI features are disabled for this WordPress installation.'=>'Les funcions d\'IA estan desactivades per a aquesta instal·lació de WordPress.','No AI provider is configured for text generation. Open Settings → AI to set one up.'=>'No hi ha cap proveïdor d\'IA configurat per a la generació de text. Obre Ajustos → IA per configurar-ne un.','No translation fields are enabled in the plugin settings.'=>'No hi ha cap camp de traducció activat als ajustaments del connector.','No posts matched the given criteria.'=>'Cap entrada coincideix amb els criteris donats.','%1$d translated, %2$d failed (locale: %3$s).'=>'%1$d traduïdes, %2$d amb errors (llengua: %3$s).','Post not found.'=>'Entrada no trobada.','The selected language is not installed on this site.'=>'La llengua seleccionada no està instal·lada en aquest lloc.','Sorry, you are not allowed to edit this post.'=>'Ho sentim, no tens permís per editar aquesta entrada.','No translatable fields were selected, or the requested fields are disabled in the settings.'=>'No s\'ha seleccionat cap camp traduïble, o els camps sol·licitats estan desactivats als ajustaments.','No translation fields are enabled in settings.'=>'No hi ha cap camp de traducció activat als ajustaments.','No languages are installed on this site.'=>'No hi ha cap llengua instal·lada en aquest lloc.','Target language'=>'Llengua de destinació','Translate'=>'Tradueix','Save the post before translating to ensure the latest content is used. The translation replaces the current title and/or content.'=>'Desa l\'entrada abans de traduir perquè s\'utilitzi la versió més recent. La traducció substitueix el títol i/o el contingut actuals.','Translating…'=>'Traduint…','Translating… ({done}/{total})'=>'Traduint… ({done}/{total})','Translation applied. Review and save the post.'=>'Traducció aplicada. Revisa i desa l\'entrada.','Translation failed.'=>'La traducció ha fallat.','You have unsaved changes. Save the post before translating to ensure the latest content is used.'=>'Tens canvis sense desar. Desa l\'entrada abans de traduir perquè s\'utilitzi la versió més recent.','To get updates for the ROBOTSTXT plugins, the plugin below must be installed and active:'=>'Per rebre actualitzacions dels plugins de ROBOTSTXT, el plugin següent ha d\'estar instal·lat i actiu:','Manager (by ROBOTSTXT)'=>'Manager (by ROBOTSTXT)','Dismiss this notice'=>'Descartar aquest avís','The target language is not installed on this site.'=>'La llengua de destinació no està instal·lada en aquest lloc.','You are a professional translator. Translate the user message into %s. Preserve any HTML, shortcodes, line breaks, and Markdown exactly as they appear. Return only the translated text, without explanations, prefaces, or quotation marks.'=>'Ets un traductor professional. Tradueix el missatge de l\'usuari al %s. Preserva l\'HTML, els shortcodes, els salts de línia i el Markdown exactament com apareixen. Retorna només el text traduït, sense explicacions, prefacis ni cometes.','The AI service returned an unexpected response.'=>'El servei d\'IA ha retornat una resposta inesperada.','AI Translator (by ROBOTSTXT) requires a configured AI provider for text generation. Open %s to set one up.'=>'AI Translator (by ROBOTSTXT) requereix un proveïdor d\'IA configurat per a la generació de text. Obre %s per configurar-ne un.','Settings → AI'=>'Ajustos → IA']]; \ No newline at end of file +return ['domain'=>'robotstxt-ai-translator','plural-forms'=>'nplurals=2; plural=(n != 1);','language'=>'ca','project-id-version'=>'AI Translator (by ROBOTSTXT) 1.2.3','pot-creation-date'=>'2026-08-24T11:03:38+00:00','po-revision-date'=>'2026-08-24 11:17+0000','x-generator'=>'hand-written','messages'=>['AI Translator (by ROBOTSTXT)'=>'AI Translator (by ROBOTSTXT)','Translate post titles and content from the editor using the native WordPress AI client (available in WP 7.0+). Multisite-ready with global or per-site configuration.'=>'Tradueix títols i contingut de les entrades des de l\'editor usant el client d\'IA natiu de WordPress (disponible al WP 7.0+). Preparat per a multilloc amb configuració global o per lloc.','ROBOTSTXT'=>'ROBOTSTXT','AI Translator'=>'AI Translator','Settings'=>'Ajustaments','You do not have permission to access this page.'=>'No tens permís per accedir a aquesta pàgina.','AI Translator Settings'=>'Ajustaments d\'AI Translator','Settings saved.'=>'Ajustaments desats.','Translation fields'=>'Camps a traduir','Translate title'=>'Tradueix el títol','Translate content'=>'Tradueix el contingut','Translate excerpt'=>'Traduir l\'extracte','Network defaults: title %1$s, content %2$s, excerpt %3$s.'=>'Valors predeterminats de la xarxa: títol %1$s, contingut %2$s, extracte %3$s.','enabled'=>'activat','disabled'=>'desactivat','Request timeout'=>'Temps màxim de resposta','seconds'=>'segons','Maximum time the server waits for an AI response. PHP max_execution_time is %d s — values above this have no effect.'=>'Temps màxim que el servidor espera una resposta de la IA. El max_execution_time de PHP és de %d s — els valors superiors no tenen efecte.','Maximum time the server waits for an AI response. PHP max_execution_time is unlimited.'=>'Temps màxim que el servidor espera una resposta de la IA. El max_execution_time de PHP és il·limitat.','MultilingualPress'=>'MultilingualPress','Auto-translate new connected posts'=>'Traduir automàticament les entrades connectades noves','When MultilingualPress creates a new connected post, automatically translate its enabled fields into the target site\'s language. The translation runs synchronously during save.'=>'Quan MultilingualPress crea una entrada connectada nova, tradueix automàticament els camps activats a l\'idioma del lloc de destinació. La traducció s\'executa de manera síncrona en desar.','AI Translator Network Settings'=>'Ajustaments de xarxa d\'AI Translator','Network settings saved.'=>'Ajustaments de xarxa desats.','Configuration mode'=>'Mode de configuració','Global configuration: a single setting applies to every site.'=>'Configuració global: un sol ajustament s\'aplica a tots els llocs.','Per-site configuration: each site can override these defaults.'=>'Configuració per lloc: cada lloc pot sobreescriure aquests valors predeterminats.','In global mode this is the configuration for the whole network. In per-site mode these values are used as defaults for sites that have not been configured individually.'=>'En mode global aquesta és la configuració per a tota la xarxa. En mode per lloc aquests valors s\'utilitzen com a predeterminats per als llocs que no s\'hagin configurat individualment.','You do not have permission to perform this action.'=>'No tens permís per dur a terme aquesta acció.','Recommended models'=>'Models recomanats','This plugin does not call AI providers directly. Configure your preferred provider in the WordPress AI plugin settings. The table below is a guide to help you pick a model based on your translation use case.'=>'Aquest connector no truca directament als proveïdors d\'IA. Configura el teu proveïdor preferit als ajustaments del connector WordPress AI. La taula següent és una guia per ajudar-te a triar un model segons el teu cas d\'ús de traducció.','Use case'=>'Cas d\'ús','Recommended model'=>'Model recomanat','Why'=>'Per què','These recommendations are based on public benchmarks and community feedback as of the plugin release date. They may change as providers update their models.'=>'Aquestes recomanacions es basen en benchmarks públics i comentaris de la comunitat en la data de publicació del connector. Poden canviar a mesura que els proveïdors actualitzin els seus models.','European languages (ES, CA, FR, DE, IT, PT)'=>'Llengües europees (ES, CA, FR, DE, IT, PT)','DeepL API Pro'=>'DeepL API Pro','Best fluency and naturalness (92/100 in benchmarks). Formality control and custom glossaries.'=>'La millor fluïdesa i naturalitat (92/100 en benchmarks). Control de formalitat i glossaris personalitzats.','Asian languages (ZH, JA, KO)'=>'Llengües asiàtiques (ZH, JA, KO)','GPT-4o / GPT-5 or Claude Sonnet 4'=>'GPT-4o / GPT-5 o Claude Sonnet 4','Better handling of implicit subjects, honorifics, and cultural references. DeepL falls behind here.'=>'Millor gestió dels subjectes implícits, els honorífics i les referències culturals. DeepL queda enrere aquí.','Marketing / brand tone'=>'Màrqueting / to de marca','Claude Sonnet 4 / Opus 4'=>'Claude Sonnet 4 / Opus 4','Better preservation of tone, brand voice, and nuance. Ideal for creative copy.'=>'Preserva millor el to, la veu de la marca i els matisos. Ideal per a copy creatiu.','Technical documentation / code'=>'Documentació tècnica / codi','GPT-4o / GPT-5'=>'GPT-4o / GPT-5','Higher accuracy with variables, structured formats, and technical terminology.'=>'Major precisió amb variables, formats estructurats i terminologia tècnica.','Long documents (100+ pages)'=>'Documents llargs (més de 100 pàgines)','Gemini 2.5 Pro'=>'Gemini 2.5 Pro','1M token context window. Maintains terminological consistency across long texts.'=>'Finestra de context d\'1 milió de tokens. Manté la consistència terminològica en textos llargs.','High volume / low cost'=>'Alt volum / baix cost','DeepSeek-V3'=>'DeepSeek-V3','Quality comparable to GPT-5 at ~$0.14/M tokens (20-50x cheaper than Claude/GPT).'=>'Qualitat comparable a GPT-5 a ~0,14 $/M tokens (entre 20 i 50 vegades més barat que Claude/GPT).','Rare / indigenous languages'=>'Llengües rares / indígenes','Claude Sonnet or Taskade Translate (multi-model routing)'=>'Claude Sonnet o Taskade Translate (encaminament multimodel)','Better coverage for uncommon language pairs.'=>'Millor cobertura en parells de llengües poc habituals.','Maximum coverage (133+ languages)'=>'Cobertura màxima (més de 133 llengües)','Google Cloud Translation'=>'Google Cloud Translation','The most complete option, though with slightly lower quality on European languages.'=>'L\'opció més completa, tot i que amb una qualitat lleugerament inferior en llengües europees.','The --locale flag is required.'=>'El paràmetre --locale és obligatori.','The --post-id and --post-type flags are mutually exclusive.'=>'Els paràmetres --post-id i --post-type són mútuament excloents.','The locale %s is not installed on this site.'=>'La llengua %s no està instal·lada en aquest lloc.','No user context. Pass --user= so post updates carry an author and capability checks apply.'=>'Sense context d\'usuari. Passa --user= perquè les actualitzacions d\'entrades tinguin autor i s\'apliquin les comprovacions de capacitats.','AI features are disabled for this WordPress installation.'=>'Les funcions d\'IA estan desactivades per a aquesta instal·lació de WordPress.','No AI provider is configured for text generation. Open Settings → AI to set one up.'=>'No hi ha cap proveïdor d\'IA configurat per a la generació de text. Obre Ajustos → IA per configurar-ne un.','No translation fields are enabled in the plugin settings.'=>'No hi ha cap camp de traducció activat als ajustaments del connector.','No posts matched the given criteria.'=>'Cap entrada coincideix amb els criteris donats.','%1$d translated, %2$d failed (locale: %3$s).'=>'%1$d traduïdes, %2$d amb errors (llengua: %3$s).','Post not found.'=>'Entrada no trobada.','The selected language is not installed on this site.'=>'La llengua seleccionada no està instal·lada en aquest lloc.','Sorry, you are not allowed to edit this post.'=>'Ho sentim, no tens permís per editar aquesta entrada.','No translatable fields were selected, or the requested fields are disabled in the settings.'=>'No s\'ha seleccionat cap camp traduïble, o els camps sol·licitats estan desactivats als ajustaments.','No translation fields are enabled in settings.'=>'No hi ha cap camp de traducció activat als ajustaments.','No languages are installed on this site.'=>'No hi ha cap llengua instal·lada en aquest lloc.','Target language'=>'Llengua de destinació','Translate'=>'Tradueix','Save the post before translating to ensure the latest content is used. The translation replaces the current title and/or content.'=>'Desa l\'entrada abans de traduir perquè s\'utilitzi la versió més recent. La traducció substitueix el títol i/o el contingut actuals.','Translating…'=>'Traduint…','Translating… ({done}/{total})'=>'Traduint… ({done}/{total})','Translation applied. Review and save the post.'=>'Traducció aplicada. Revisa i desa l\'entrada.','Translation failed.'=>'La traducció ha fallat.','You have unsaved changes. Save the post before translating to ensure the latest content is used.'=>'Tens canvis sense desar. Desa l\'entrada abans de traduir perquè s\'utilitzi la versió més recent.','To get updates for the ROBOTSTXT plugins, the plugin below must be installed and active:'=>'Per rebre actualitzacions dels plugins de ROBOTSTXT, el plugin següent ha d\'estar instal·lat i actiu:','Manager (by ROBOTSTXT)'=>'Manager (by ROBOTSTXT)','Dismiss this notice'=>'Descartar aquest avís','The target language is not installed on this site.'=>'La llengua de destinació no està instal·lada en aquest lloc.','You are a professional translator. Translate the user message into %s. Preserve any HTML, shortcodes, line breaks, and Markdown exactly as they appear. Return only the translated text, without explanations, prefaces, or quotation marks.'=>'Ets un traductor professional. Tradueix el missatge de l\'usuari al %s. Preserva l\'HTML, els shortcodes, els salts de línia i el Markdown exactament com apareixen. Retorna només el text traduït, sense explicacions, prefacis ni cometes.','The AI service returned an unexpected response.'=>'El servei d\'IA ha retornat una resposta inesperada.','AI Translator (by ROBOTSTXT) requires a configured AI provider for text generation. Open %s to set one up.'=>'AI Translator (by ROBOTSTXT) requereix un proveïdor d\'IA configurat per a la generació de text. Obre %s per configurar-ne un.','Settings → AI'=>'Ajustos → IA']]; \ No newline at end of file diff --git a/languages/robotstxt-ai-translator-ca.mo b/languages/robotstxt-ai-translator-ca.mo index 150d938..283d4a4 100644 Binary files a/languages/robotstxt-ai-translator-ca.mo and b/languages/robotstxt-ai-translator-ca.mo differ diff --git a/languages/robotstxt-ai-translator-ca.po b/languages/robotstxt-ai-translator-ca.po index 4b7c8d4..d64c080 100644 --- a/languages/robotstxt-ai-translator-ca.po +++ b/languages/robotstxt-ai-translator-ca.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: AI Translator (by ROBOTSTXT) 1.2.2\n" -"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-ai-" -"translator\n" -"POT-Creation-Date: 2026-08-17T16:27:30+00:00\n" -"PO-Revision-Date: 2026-05-23 10:30+0000\n" +"Project-Id-Version: AI Translator (by ROBOTSTXT) 1.2.3\n" +"Report-Msgid-Bugs-To: https://www.robotstxt.software/plugins/robotstxt-ai-" +"translator/\n" +"POT-Creation-Date: 2026-08-24T11:03:38+00:00\n" +"PO-Revision-Date: 2026-08-24 11:17+0000\n" "Last-Translator: ROBOTSTXT \n" "Language-Team: Catalan\n" "Language: ca\n" @@ -496,8 +496,8 @@ msgstr "" "Tens canvis sense desar. Desa l'entrada abans de traduir perquè s'utilitzi " "la versió més recent." -#: includes/class-ai-translator-manager-notice.php:154 -#: includes/class-ai-translator-manager-notice.php:177 +#: includes/class-ai-translator-manager-notice.php:162 +#: includes/class-ai-translator-manager-notice.php:185 msgid "" "To get updates for the ROBOTSTXT plugins, the plugin below must be installed " "and active:" @@ -505,12 +505,12 @@ msgstr "" "Per rebre actualitzacions dels plugins de ROBOTSTXT, el plugin següent ha " "d'estar instal·lat i actiu:" -#: includes/class-ai-translator-manager-notice.php:156 -#: includes/class-ai-translator-manager-notice.php:179 +#: includes/class-ai-translator-manager-notice.php:164 +#: includes/class-ai-translator-manager-notice.php:187 msgid "Manager (by ROBOTSTXT)" msgstr "Manager (by ROBOTSTXT)" -#: includes/class-ai-translator-manager-notice.php:158 +#: includes/class-ai-translator-manager-notice.php:166 msgid "Dismiss this notice" msgstr "Descartar aquest avís" diff --git a/languages/robotstxt-ai-translator-es_ES.l10n.php b/languages/robotstxt-ai-translator-es_ES.l10n.php index ecc2be1..41c0321 100644 --- a/languages/robotstxt-ai-translator-es_ES.l10n.php +++ b/languages/robotstxt-ai-translator-es_ES.l10n.php @@ -1,2 +1,2 @@ 'robotstxt-ai-translator','plural-forms'=>'nplurals=2; plural=(n != 1);','language'=>'es_ES','project-id-version'=>'AI Translator (by ROBOTSTXT) 1.2.2','pot-creation-date'=>'2026-08-17T16:27:30+00:00','po-revision-date'=>'2026-05-23 10:30+0000','x-generator'=>'hand-written','messages'=>['AI Translator (by ROBOTSTXT)'=>'AI Translator (by ROBOTSTXT)','Translate post titles and content from the editor using the native WordPress AI client (available in WP 7.0+). Multisite-ready with global or per-site configuration.'=>'Traduce títulos y contenido de las entradas desde el editor usando el cliente de IA nativo de WordPress (disponible en WP 7.0+). Preparado para multisitio con configuración global o por sitio.','ROBOTSTXT'=>'ROBOTSTXT','AI Translator'=>'AI Translator','Settings'=>'Ajustes','You do not have permission to access this page.'=>'No tienes permiso para acceder a esta página.','AI Translator Settings'=>'Ajustes de AI Translator','Settings saved.'=>'Ajustes guardados.','Translation fields'=>'Campos a traducir','Translate title'=>'Traducir título','Translate content'=>'Traducir contenido','Translate excerpt'=>'Traducir extracto','Network defaults: title %1$s, content %2$s, excerpt %3$s.'=>'Valores predeterminados de la red: título %1$s, contenido %2$s, extracto %3$s.','enabled'=>'activado','disabled'=>'desactivado','Request timeout'=>'Tiempo máximo de respuesta','seconds'=>'segundos','Maximum time the server waits for an AI response. PHP max_execution_time is %d s — values above this have no effect.'=>'Tiempo máximo que el servidor espera una respuesta de la IA. El max_execution_time de PHP es de %d s — los valores superiores no tienen efecto.','Maximum time the server waits for an AI response. PHP max_execution_time is unlimited.'=>'Tiempo máximo que el servidor espera una respuesta de la IA. El max_execution_time de PHP es ilimitado.','MultilingualPress'=>'MultilingualPress','Auto-translate new connected posts'=>'Traducir automáticamente las entradas conectadas nuevas','When MultilingualPress creates a new connected post, automatically translate its enabled fields into the target site\'s language. The translation runs synchronously during save.'=>'Cuando MultilingualPress crea una entrada conectada nueva, traduce automáticamente los campos activados al idioma del sitio de destino. La traducción se ejecuta de forma síncrona al guardar.','AI Translator Network Settings'=>'Ajustes de red de AI Translator','Network settings saved.'=>'Ajustes de red guardados.','Configuration mode'=>'Modo de configuración','Global configuration: a single setting applies to every site.'=>'Configuración global: un único ajuste se aplica a todos los sitios.','Per-site configuration: each site can override these defaults.'=>'Configuración por sitio: cada sitio puede sobrescribir estos valores por defecto.','In global mode this is the configuration for the whole network. In per-site mode these values are used as defaults for sites that have not been configured individually.'=>'En modo global esta es la configuración para toda la red. En modo por sitio estos valores se usan como predeterminados para los sitios que no se hayan configurado individualmente.','You do not have permission to perform this action.'=>'No tienes permiso para realizar esta acción.','Recommended models'=>'Modelos recomendados','This plugin does not call AI providers directly. Configure your preferred provider in the WordPress AI plugin settings. The table below is a guide to help you pick a model based on your translation use case.'=>'Este plugin no llama directamente a los proveedores de IA. Configura tu proveedor preferido en los ajustes del plugin WordPress AI. La tabla siguiente es una guía para ayudarte a elegir un modelo según tu caso de uso de traducción.','Use case'=>'Caso de uso','Recommended model'=>'Modelo recomendado','Why'=>'Por qué','These recommendations are based on public benchmarks and community feedback as of the plugin release date. They may change as providers update their models.'=>'Estas recomendaciones se basan en benchmarks públicos y comentarios de la comunidad en la fecha de publicación del plugin. Pueden cambiar a medida que los proveedores actualicen sus modelos.','European languages (ES, CA, FR, DE, IT, PT)'=>'Idiomas europeos (ES, CA, FR, DE, IT, PT)','DeepL API Pro'=>'DeepL API Pro','Best fluency and naturalness (92/100 in benchmarks). Formality control and custom glossaries.'=>'La mejor fluidez y naturalidad (92/100 en benchmarks). Control de formalidad y glosarios personalizados.','Asian languages (ZH, JA, KO)'=>'Idiomas asiáticos (ZH, JA, KO)','GPT-4o / GPT-5 or Claude Sonnet 4'=>'GPT-4o / GPT-5 o Claude Sonnet 4','Better handling of implicit subjects, honorifics, and cultural references. DeepL falls behind here.'=>'Mejor manejo de sujetos implícitos, honoríficos y referencias culturales. DeepL queda por detrás aquí.','Marketing / brand tone'=>'Marketing / tono de marca','Claude Sonnet 4 / Opus 4'=>'Claude Sonnet 4 / Opus 4','Better preservation of tone, brand voice, and nuance. Ideal for creative copy.'=>'Preserva mejor el tono, la voz de marca y los matices. Ideal para copy creativo.','Technical documentation / code'=>'Documentación técnica / código','GPT-4o / GPT-5'=>'GPT-4o / GPT-5','Higher accuracy with variables, structured formats, and technical terminology.'=>'Mayor precisión con variables, formatos estructurados y terminología técnica.','Long documents (100+ pages)'=>'Documentos largos (más de 100 páginas)','Gemini 2.5 Pro'=>'Gemini 2.5 Pro','1M token context window. Maintains terminological consistency across long texts.'=>'Ventana de contexto de 1 millón de tokens. Mantiene la consistencia terminológica en textos extensos.','High volume / low cost'=>'Alto volumen / bajo coste','DeepSeek-V3'=>'DeepSeek-V3','Quality comparable to GPT-5 at ~$0.14/M tokens (20-50x cheaper than Claude/GPT).'=>'Calidad comparable a GPT-5 a ~0,14 $/M tokens (entre 20 y 50 veces más barato que Claude/GPT).','Rare / indigenous languages'=>'Idiomas raros / indígenas','Claude Sonnet or Taskade Translate (multi-model routing)'=>'Claude Sonnet o Taskade Translate (enrutado multimodelo)','Better coverage for uncommon language pairs.'=>'Mejor cobertura en pares de idiomas poco comunes.','Maximum coverage (133+ languages)'=>'Cobertura máxima (más de 133 idiomas)','Google Cloud Translation'=>'Google Cloud Translation','The most complete option, though with slightly lower quality on European languages.'=>'La opción más completa, aunque con calidad ligeramente inferior en idiomas europeos.','The --locale flag is required.'=>'El parámetro --locale es obligatorio.','The --post-id and --post-type flags are mutually exclusive.'=>'Los parámetros --post-id y --post-type son mutuamente excluyentes.','The locale %s is not installed on this site.'=>'El idioma %s no está instalado en este sitio.','No user context. Pass --user= so post updates carry an author and capability checks apply.'=>'Sin contexto de usuario. Pasa --user= para que las actualizaciones de entradas tengan autor y se apliquen los controles de capacidades.','AI features are disabled for this WordPress installation.'=>'Las funciones de IA están desactivadas para esta instalación de WordPress.','No AI provider is configured for text generation. Open Settings → AI to set one up.'=>'No hay ningún proveedor de IA configurado para la generación de texto. Abre Ajustes → IA para configurar uno.','No translation fields are enabled in the plugin settings.'=>'No hay ningún campo de traducción activado en los ajustes del plugin.','No posts matched the given criteria.'=>'Ninguna entrada coincide con los criterios indicados.','%1$d translated, %2$d failed (locale: %3$s).'=>'%1$d traducidas, %2$d con fallos (idioma: %3$s).','Post not found.'=>'Entrada no encontrada.','The selected language is not installed on this site.'=>'El idioma seleccionado no está instalado en este sitio.','Sorry, you are not allowed to edit this post.'=>'Lo sentimos, no tienes permiso para editar esta entrada.','No translatable fields were selected, or the requested fields are disabled in the settings.'=>'No se ha seleccionado ningún campo traducible, o los campos solicitados están desactivados en los ajustes.','No translation fields are enabled in settings.'=>'No hay ningún campo de traducción activado en los ajustes.','No languages are installed on this site.'=>'No hay ningún idioma instalado en este sitio.','Target language'=>'Idioma de destino','Translate'=>'Traducir','Save the post before translating to ensure the latest content is used. The translation replaces the current title and/or content.'=>'Guarda la entrada antes de traducir para que se use la versión más reciente. La traducción reemplaza el título y/o el contenido actuales.','Translating…'=>'Traduciendo…','Translating… ({done}/{total})'=>'Traduciendo… ({done}/{total})','Translation applied. Review and save the post.'=>'Traducción aplicada. Revisa y guarda la entrada.','Translation failed.'=>'La traducción ha fallado.','You have unsaved changes. Save the post before translating to ensure the latest content is used.'=>'Tienes cambios sin guardar. Guarda la entrada antes de traducir para que se use la versión más reciente.','To get updates for the ROBOTSTXT plugins, the plugin below must be installed and active:'=>'Para recibir actualizaciones de los plugins de ROBOTSTXT, el plugin siguiente debe estar instalado y activo:','Manager (by ROBOTSTXT)'=>'Manager (by ROBOTSTXT)','Dismiss this notice'=>'Descartar este aviso','The target language is not installed on this site.'=>'El idioma de destino no está instalado en este sitio.','You are a professional translator. Translate the user message into %s. Preserve any HTML, shortcodes, line breaks, and Markdown exactly as they appear. Return only the translated text, without explanations, prefaces, or quotation marks.'=>'Eres un traductor profesional. Traduce el mensaje del usuario al %s. Preserva el HTML, los shortcodes, los saltos de línea y el Markdown exactamente como aparecen. Devuelve solo el texto traducido, sin explicaciones, prefacios ni comillas.','The AI service returned an unexpected response.'=>'El servicio de IA ha devuelto una respuesta inesperada.','AI Translator (by ROBOTSTXT) requires a configured AI provider for text generation. Open %s to set one up.'=>'AI Translator (by ROBOTSTXT) requiere un proveedor de IA configurado para la generación de texto. Abre %s para configurar uno.','Settings → AI'=>'Ajustes → IA']]; \ No newline at end of file +return ['domain'=>'robotstxt-ai-translator','plural-forms'=>'nplurals=2; plural=(n != 1);','language'=>'es_ES','project-id-version'=>'AI Translator (by ROBOTSTXT) 1.2.3','pot-creation-date'=>'2026-08-24T11:03:38+00:00','po-revision-date'=>'2026-08-24 11:17+0000','x-generator'=>'hand-written','messages'=>['AI Translator (by ROBOTSTXT)'=>'AI Translator (by ROBOTSTXT)','Translate post titles and content from the editor using the native WordPress AI client (available in WP 7.0+). Multisite-ready with global or per-site configuration.'=>'Traduce títulos y contenido de las entradas desde el editor usando el cliente de IA nativo de WordPress (disponible en WP 7.0+). Preparado para multisitio con configuración global o por sitio.','ROBOTSTXT'=>'ROBOTSTXT','AI Translator'=>'AI Translator','Settings'=>'Ajustes','You do not have permission to access this page.'=>'No tienes permiso para acceder a esta página.','AI Translator Settings'=>'Ajustes de AI Translator','Settings saved.'=>'Ajustes guardados.','Translation fields'=>'Campos a traducir','Translate title'=>'Traducir título','Translate content'=>'Traducir contenido','Translate excerpt'=>'Traducir extracto','Network defaults: title %1$s, content %2$s, excerpt %3$s.'=>'Valores predeterminados de la red: título %1$s, contenido %2$s, extracto %3$s.','enabled'=>'activado','disabled'=>'desactivado','Request timeout'=>'Tiempo máximo de respuesta','seconds'=>'segundos','Maximum time the server waits for an AI response. PHP max_execution_time is %d s — values above this have no effect.'=>'Tiempo máximo que el servidor espera una respuesta de la IA. El max_execution_time de PHP es de %d s — los valores superiores no tienen efecto.','Maximum time the server waits for an AI response. PHP max_execution_time is unlimited.'=>'Tiempo máximo que el servidor espera una respuesta de la IA. El max_execution_time de PHP es ilimitado.','MultilingualPress'=>'MultilingualPress','Auto-translate new connected posts'=>'Traducir automáticamente las entradas conectadas nuevas','When MultilingualPress creates a new connected post, automatically translate its enabled fields into the target site\'s language. The translation runs synchronously during save.'=>'Cuando MultilingualPress crea una entrada conectada nueva, traduce automáticamente los campos activados al idioma del sitio de destino. La traducción se ejecuta de forma síncrona al guardar.','AI Translator Network Settings'=>'Ajustes de red de AI Translator','Network settings saved.'=>'Ajustes de red guardados.','Configuration mode'=>'Modo de configuración','Global configuration: a single setting applies to every site.'=>'Configuración global: un único ajuste se aplica a todos los sitios.','Per-site configuration: each site can override these defaults.'=>'Configuración por sitio: cada sitio puede sobrescribir estos valores por defecto.','In global mode this is the configuration for the whole network. In per-site mode these values are used as defaults for sites that have not been configured individually.'=>'En modo global esta es la configuración para toda la red. En modo por sitio estos valores se usan como predeterminados para los sitios que no se hayan configurado individualmente.','You do not have permission to perform this action.'=>'No tienes permiso para realizar esta acción.','Recommended models'=>'Modelos recomendados','This plugin does not call AI providers directly. Configure your preferred provider in the WordPress AI plugin settings. The table below is a guide to help you pick a model based on your translation use case.'=>'Este plugin no llama directamente a los proveedores de IA. Configura tu proveedor preferido en los ajustes del plugin WordPress AI. La tabla siguiente es una guía para ayudarte a elegir un modelo según tu caso de uso de traducción.','Use case'=>'Caso de uso','Recommended model'=>'Modelo recomendado','Why'=>'Por qué','These recommendations are based on public benchmarks and community feedback as of the plugin release date. They may change as providers update their models.'=>'Estas recomendaciones se basan en benchmarks públicos y comentarios de la comunidad en la fecha de publicación del plugin. Pueden cambiar a medida que los proveedores actualicen sus modelos.','European languages (ES, CA, FR, DE, IT, PT)'=>'Idiomas europeos (ES, CA, FR, DE, IT, PT)','DeepL API Pro'=>'DeepL API Pro','Best fluency and naturalness (92/100 in benchmarks). Formality control and custom glossaries.'=>'La mejor fluidez y naturalidad (92/100 en benchmarks). Control de formalidad y glosarios personalizados.','Asian languages (ZH, JA, KO)'=>'Idiomas asiáticos (ZH, JA, KO)','GPT-4o / GPT-5 or Claude Sonnet 4'=>'GPT-4o / GPT-5 o Claude Sonnet 4','Better handling of implicit subjects, honorifics, and cultural references. DeepL falls behind here.'=>'Mejor manejo de sujetos implícitos, honoríficos y referencias culturales. DeepL queda por detrás aquí.','Marketing / brand tone'=>'Marketing / tono de marca','Claude Sonnet 4 / Opus 4'=>'Claude Sonnet 4 / Opus 4','Better preservation of tone, brand voice, and nuance. Ideal for creative copy.'=>'Preserva mejor el tono, la voz de marca y los matices. Ideal para copy creativo.','Technical documentation / code'=>'Documentación técnica / código','GPT-4o / GPT-5'=>'GPT-4o / GPT-5','Higher accuracy with variables, structured formats, and technical terminology.'=>'Mayor precisión con variables, formatos estructurados y terminología técnica.','Long documents (100+ pages)'=>'Documentos largos (más de 100 páginas)','Gemini 2.5 Pro'=>'Gemini 2.5 Pro','1M token context window. Maintains terminological consistency across long texts.'=>'Ventana de contexto de 1 millón de tokens. Mantiene la consistencia terminológica en textos extensos.','High volume / low cost'=>'Alto volumen / bajo coste','DeepSeek-V3'=>'DeepSeek-V3','Quality comparable to GPT-5 at ~$0.14/M tokens (20-50x cheaper than Claude/GPT).'=>'Calidad comparable a GPT-5 a ~0,14 $/M tokens (entre 20 y 50 veces más barato que Claude/GPT).','Rare / indigenous languages'=>'Idiomas raros / indígenas','Claude Sonnet or Taskade Translate (multi-model routing)'=>'Claude Sonnet o Taskade Translate (enrutado multimodelo)','Better coverage for uncommon language pairs.'=>'Mejor cobertura en pares de idiomas poco comunes.','Maximum coverage (133+ languages)'=>'Cobertura máxima (más de 133 idiomas)','Google Cloud Translation'=>'Google Cloud Translation','The most complete option, though with slightly lower quality on European languages.'=>'La opción más completa, aunque con calidad ligeramente inferior en idiomas europeos.','The --locale flag is required.'=>'El parámetro --locale es obligatorio.','The --post-id and --post-type flags are mutually exclusive.'=>'Los parámetros --post-id y --post-type son mutuamente excluyentes.','The locale %s is not installed on this site.'=>'El idioma %s no está instalado en este sitio.','No user context. Pass --user= so post updates carry an author and capability checks apply.'=>'Sin contexto de usuario. Pasa --user= para que las actualizaciones de entradas tengan autor y se apliquen los controles de capacidades.','AI features are disabled for this WordPress installation.'=>'Las funciones de IA están desactivadas para esta instalación de WordPress.','No AI provider is configured for text generation. Open Settings → AI to set one up.'=>'No hay ningún proveedor de IA configurado para la generación de texto. Abre Ajustes → IA para configurar uno.','No translation fields are enabled in the plugin settings.'=>'No hay ningún campo de traducción activado en los ajustes del plugin.','No posts matched the given criteria.'=>'Ninguna entrada coincide con los criterios indicados.','%1$d translated, %2$d failed (locale: %3$s).'=>'%1$d traducidas, %2$d con fallos (idioma: %3$s).','Post not found.'=>'Entrada no encontrada.','The selected language is not installed on this site.'=>'El idioma seleccionado no está instalado en este sitio.','Sorry, you are not allowed to edit this post.'=>'Lo sentimos, no tienes permiso para editar esta entrada.','No translatable fields were selected, or the requested fields are disabled in the settings.'=>'No se ha seleccionado ningún campo traducible, o los campos solicitados están desactivados en los ajustes.','No translation fields are enabled in settings.'=>'No hay ningún campo de traducción activado en los ajustes.','No languages are installed on this site.'=>'No hay ningún idioma instalado en este sitio.','Target language'=>'Idioma de destino','Translate'=>'Traducir','Save the post before translating to ensure the latest content is used. The translation replaces the current title and/or content.'=>'Guarda la entrada antes de traducir para que se use la versión más reciente. La traducción reemplaza el título y/o el contenido actuales.','Translating…'=>'Traduciendo…','Translating… ({done}/{total})'=>'Traduciendo… ({done}/{total})','Translation applied. Review and save the post.'=>'Traducción aplicada. Revisa y guarda la entrada.','Translation failed.'=>'La traducción ha fallado.','You have unsaved changes. Save the post before translating to ensure the latest content is used.'=>'Tienes cambios sin guardar. Guarda la entrada antes de traducir para que se use la versión más reciente.','To get updates for the ROBOTSTXT plugins, the plugin below must be installed and active:'=>'Para recibir actualizaciones de los plugins de ROBOTSTXT, el plugin siguiente debe estar instalado y activo:','Manager (by ROBOTSTXT)'=>'Manager (by ROBOTSTXT)','Dismiss this notice'=>'Descartar este aviso','The target language is not installed on this site.'=>'El idioma de destino no está instalado en este sitio.','You are a professional translator. Translate the user message into %s. Preserve any HTML, shortcodes, line breaks, and Markdown exactly as they appear. Return only the translated text, without explanations, prefaces, or quotation marks.'=>'Eres un traductor profesional. Traduce el mensaje del usuario al %s. Preserva el HTML, los shortcodes, los saltos de línea y el Markdown exactamente como aparecen. Devuelve solo el texto traducido, sin explicaciones, prefacios ni comillas.','The AI service returned an unexpected response.'=>'El servicio de IA ha devuelto una respuesta inesperada.','AI Translator (by ROBOTSTXT) requires a configured AI provider for text generation. Open %s to set one up.'=>'AI Translator (by ROBOTSTXT) requiere un proveedor de IA configurado para la generación de texto. Abre %s para configurar uno.','Settings → AI'=>'Ajustes → IA']]; \ No newline at end of file diff --git a/languages/robotstxt-ai-translator-es_ES.mo b/languages/robotstxt-ai-translator-es_ES.mo index d200727..27de93f 100644 Binary files a/languages/robotstxt-ai-translator-es_ES.mo and b/languages/robotstxt-ai-translator-es_ES.mo differ diff --git a/languages/robotstxt-ai-translator-es_ES.po b/languages/robotstxt-ai-translator-es_ES.po index ab86de5..314e7eb 100644 --- a/languages/robotstxt-ai-translator-es_ES.po +++ b/languages/robotstxt-ai-translator-es_ES.po @@ -1,10 +1,10 @@ msgid "" msgstr "" -"Project-Id-Version: AI Translator (by ROBOTSTXT) 1.2.2\n" -"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-ai-" -"translator\n" -"POT-Creation-Date: 2026-08-17T16:27:30+00:00\n" -"PO-Revision-Date: 2026-05-23 10:30+0000\n" +"Project-Id-Version: AI Translator (by ROBOTSTXT) 1.2.3\n" +"Report-Msgid-Bugs-To: https://www.robotstxt.software/plugins/robotstxt-ai-" +"translator/\n" +"POT-Creation-Date: 2026-08-24T11:03:38+00:00\n" +"PO-Revision-Date: 2026-08-24 11:17+0000\n" "Last-Translator: ROBOTSTXT \n" "Language-Team: Spanish (Spain)\n" "Language: es_ES\n" @@ -498,8 +498,8 @@ msgstr "" "Tienes cambios sin guardar. Guarda la entrada antes de traducir para que se " "use la versión más reciente." -#: includes/class-ai-translator-manager-notice.php:154 -#: includes/class-ai-translator-manager-notice.php:177 +#: includes/class-ai-translator-manager-notice.php:162 +#: includes/class-ai-translator-manager-notice.php:185 msgid "" "To get updates for the ROBOTSTXT plugins, the plugin below must be installed " "and active:" @@ -507,12 +507,12 @@ msgstr "" "Para recibir actualizaciones de los plugins de ROBOTSTXT, el plugin " "siguiente debe estar instalado y activo:" -#: includes/class-ai-translator-manager-notice.php:156 -#: includes/class-ai-translator-manager-notice.php:179 +#: includes/class-ai-translator-manager-notice.php:164 +#: includes/class-ai-translator-manager-notice.php:187 msgid "Manager (by ROBOTSTXT)" msgstr "Manager (by ROBOTSTXT)" -#: includes/class-ai-translator-manager-notice.php:158 +#: includes/class-ai-translator-manager-notice.php:166 msgid "Dismiss this notice" msgstr "Descartar este aviso" diff --git a/languages/robotstxt-ai-translator.pot b/languages/robotstxt-ai-translator.pot index 998353a..16157e5 100644 --- a/languages/robotstxt-ai-translator.pot +++ b/languages/robotstxt-ai-translator.pot @@ -2,14 +2,14 @@ # This file is distributed under the GPL-3.0-or-later. msgid "" msgstr "" -"Project-Id-Version: AI Translator (by ROBOTSTXT) 1.2.2\n" -"Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/robotstxt-ai-translator\n" +"Project-Id-Version: AI Translator (by ROBOTSTXT) 1.2.3\n" +"Report-Msgid-Bugs-To: https://www.robotstxt.software/plugins/robotstxt-ai-translator/\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"POT-Creation-Date: 2026-08-17T16:27:30+00:00\n" +"POT-Creation-Date: 2026-08-24T11:03:38+00:00\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "X-Generator: WP-CLI 2.12.0\n" "X-Domain: robotstxt-ai-translator\n" @@ -405,17 +405,17 @@ msgstr "" msgid "You have unsaved changes. Save the post before translating to ensure the latest content is used." msgstr "" -#: includes/class-ai-translator-manager-notice.php:154 -#: includes/class-ai-translator-manager-notice.php:177 +#: includes/class-ai-translator-manager-notice.php:162 +#: includes/class-ai-translator-manager-notice.php:185 msgid "To get updates for the ROBOTSTXT plugins, the plugin below must be installed and active:" msgstr "" -#: includes/class-ai-translator-manager-notice.php:156 -#: includes/class-ai-translator-manager-notice.php:179 +#: includes/class-ai-translator-manager-notice.php:164 +#: includes/class-ai-translator-manager-notice.php:187 msgid "Manager (by ROBOTSTXT)" msgstr "" -#: includes/class-ai-translator-manager-notice.php:158 +#: includes/class-ai-translator-manager-notice.php:166 msgid "Dismiss this notice" msgstr "" diff --git a/readme.txt b/readme.txt index 63ccd4c..2191887 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Tags: ai, translation, multilingual, multisite, editor Requires at least: 7.0 Tested up to: 7.1 Requires PHP: 5.6 -Stable tag: 1.2.2 +Stable tag: 1.2.3 License: GPL-3.0-or-later License URI: https://www.gnu.org/licenses/gpl-3.0.txt @@ -142,10 +142,14 @@ The plugin reads the post title and content from the database, not from the edit Only the 3 last versions. The full changelog will be at changelog.txt += 1.2.3 = + +* Manager (by ROBOTSTXT) detection now uses the ecosystem presence constant `ROBOTSTXT_MANAGER_NOTICED` (Manager 1.6.2+) instead of scanning the plugin list, falling back to the plugin-list scan for older Manager versions. + = 1.2.2 = * Added a dismissible admin notice on the Plugins list screens recommending Manager (by ROBOTSTXT) when it is not installed and active, plus a persistent warning on the plugin settings pages. Updates for the ROBOTSTXT plugins are delivered through Manager. -* Removed the bundled JSON updater (`class-robotstxt-updater.php` and `update.json`). Plugin updates are now handled by Manager (by ROBOTSTXT). +* Removed the bundled JSON updater (`class-robotstxt-updater.php` and `update.json`). Plugin updates are now handled by Manager. * Changed the Plugin URI and Update URI to `https://www.robotstxt.software/plugins/robotstxt-ai-translator/`. * Lowered the minimum PHP version from 7.4 to 5.6 (verified with PHPCompatibility 5.6-8.5). WordPress 7.0+ remains the minimum WordPress version because the plugin uses the native WordPress AI client. @@ -153,17 +157,9 @@ Only the 3 last versions. The full changelog will be at changelog.txt * Confirmed compatibility with WordPress 7.1. No functional changes. -= 1.2.0 = - -* Added configurable "Request timeout" setting (default 60 s, minimum 30 s, maximum 300 s) in site and network admin pages. -* Added parallel chunked content translation: long posts are split at Gutenberg block or paragraph boundaries and all chunks are sent to the AI concurrently, eliminating timeout errors on lengthy content. -* Added real-time progress indicator on the Translate button: "Translating… (2/5)" as each chunk resolves. -* Added new REST endpoint `POST /wp-json/ai-translator/v1/translate-text` for raw-text translation; used internally by the chunked content path. -* Changed: content translation now reads from the current editor state (unsaved changes included); title and excerpt continue to read from the saved post. - = Previous versions = -If you want to see the full changelog, visit the [changelog.txt](https://www.robotstxt.software/plugins/robotstxt-ai-translator/changelog.txt) file. +If you want to see the full changelog, visit the [changelog](https://www.robotstxt.software/plugins/robotstxt-ai-translator/) page. == Compliance == diff --git a/robotstxt-ai-translator.php b/robotstxt-ai-translator.php index a3e1c0b..33ebeb5 100644 --- a/robotstxt-ai-translator.php +++ b/robotstxt-ai-translator.php @@ -4,7 +4,7 @@ * Plugin URI: https://www.robotstxt.software/plugins/robotstxt-ai-translator/ * Update URI: https://www.robotstxt.software/plugins/robotstxt-ai-translator/ * Description: Translate post titles and content from the editor using the native WordPress AI client (available in WP 7.0+). Multisite-ready with global or per-site configuration. - * Version: 1.2.2 + * Version: 1.2.3 * Author: ROBOTSTXT * Author URI: https://www.robotstxt.software/ * License: GPL-3.0-or-later @@ -25,7 +25,7 @@ if ( ! defined( 'ABSPATH' ) ) { /** * Plugin version. */ -define( 'AI_TRANSLATOR_VERSION', '1.2.2' ); +define( 'AI_TRANSLATOR_VERSION', '1.2.3' ); /** * Main plugin file path. diff --git a/update.json b/update.json deleted file mode 100644 index ffa642f..0000000 --- a/update.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "name": "AI Translator (by ROBOTSTXT)", - "slug": "robotstxt-ai-translator", - "version": "1.2.2", - "download_url": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-ai-translator/releases/download/1.2.2/robotstxt-ai-translator-1.2.2.zip", - "requires": "7.0", - "requires_php": "7.4", - "tested": "7.1", - "last_updated": "2026-08-07", - "author": "ROBOTSTXT", - "author_profile": "https://www.robotstxt.es/", - "homepage": "https://git.robotstxt.es/ROBOTSTXT/robotstxt-ai-translator", - "description": "Translate post titles and content from the WordPress editor using the native WordPress AI client (available in WP 7.0+). Multisite-ready with global or per-site configuration.", - "changelog": "", - "sections": { - "description": "Translate post titles and content from the WordPress editor using the native WordPress AI client (available in WP 7.0+). Multisite-ready with global or per-site configuration.", - "changelog": "" - }, - "banners": { - "low": "", - "high": "" - }, - "icons": { - "1x": "", - "2x": "" - } -}