{"id":397050,"date":"2026-11-02T09:17:32","date_gmt":"2026-11-02T09:17:32","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/modelgain-multilingual-abilities\/"},"modified":"2026-11-02T09:17:03","modified_gmt":"2026-11-02T09:17:03","slug":"modelgain-multilingual-abilities","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/modelgain-multilingual-abilities\/","author":23559745,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.1.4","requires":"6.9","requires_php":"7.4","requires_plugins":null,"header_name":"ModelGain Multilingual Abilities","header_author":"ModelGain","header_description":"Read-only language coverage and translation-link integrity abilities for Polylang-powered WordPress sites.","assets_banners_color":"","last_updated":"2026-11-02 09:17:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":114,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"upaccn","date":"2026-11-02 09:17:03","revision":3779385}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2353,569,99,10601,2333],"plugin_category":[48],"plugin_contributors":[284600],"plugin_business_model":[],"class_list":["post-397050","plugin","type-plugin","status-publish","hentry","plugin_tags-ai","plugin_tags-automation","plugin_tags-multilingual","plugin_tags-polylang","plugin_tags-translation","plugin_category-language-tools","plugin_contributors-upaccn","plugin_committers-upaccn"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/modelgain-multilingual-abilities.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>ModelGain Multilingual Abilities makes multilingual content audits available as four read-only WordPress abilities. It works with an existing Polylang installation and does not translate text, publish content, modify language assignments or change translation relationships.<\/p>\n\n<ul>\n<li><code>modelgain-multilingual\/list-languages<\/code>: list configured language slugs and the default language.<\/li>\n<li><code>modelgain-multilingual\/find-missing-translations<\/code>: find articles in a selected source language without a linked target-language translation.<\/li>\n<li><code>modelgain-multilingual\/audit-language-coverage<\/code>: report linked, unpublished, absent, inaccessible and invalid translation counts for a bounded page of source articles.<\/li>\n<li><code>modelgain-multilingual\/check-translation-links<\/code>: check public Polylang translation maps for verifiable structural inconsistencies.<\/li>\n<\/ul>\n\n<p>All content operations specify the source language and Polylang-enabled post type. The maximum source page size is 100. Results contain IDs, status and URLs, never article bodies or the contents of translations.<\/p>\n\n<p><strong>Pagination and scope:<\/strong> <code>limit<\/code> and <code>offset<\/code> refer to <strong>source-language posts scanned<\/strong>, not the number of missing translations returned. A page of source posts may contain zero missing translations while <code>has_more<\/code> is true. Iterate using <code>next_offset<\/code> until <code>has_more<\/code> is false. Coverage counters are <strong>page-level<\/strong>, not unqualified site-wide totals. Results may change when editors modify content between pages.<\/p>\n\n<p>The initial version is read-only and does not implement any AI model integration, machine translation service, chatbot, background scan or standalone MCP server. The official WordPress MCP Adapter can optionally transport abilities after a site owner enables external exposure.<\/p>\n\n<h3>Access and permissions<\/h3>\n\n<p>External REST\/MCP visibility is disabled on a clean installation. Local WordPress abilities are available when Polylang and the WordPress Abilities API are active.<\/p>\n\n<p>Only authenticated administrators with <code>manage_options<\/code> may execute the operations. Posts are inspected only when the current user can edit the post. Enabling the external REST interface does not grant those permissions to anonymous visitors.<\/p>\n\n<p>To enable REST discovery, navigate to <strong>Tools &gt; Multilingual Abilities<\/strong>, enable <strong>External REST exposure<\/strong>, and save settings. External clients must use WordPress-supported authentication and an authorized identity. Leave external exposure disabled if no integration needs it.<\/p>\n\n<p>Polylang remains responsible for all language and translation data. This plugin does not contact third-party services or collect telemetry. The plugin stores only its optional REST exposure preference; uninstalling it removes that preference without deleting translations.<\/p>\n\n<h3>Requirements<\/h3>\n\n<ul>\n<li>WordPress 6.9 or later and PHP 7.4 or later.<\/li>\n<li>An active Polylang installation with configured languages.<\/li>\n<li>A supported Polylang-translated post type (for example, posts or pages if enabled).<\/li>\n<\/ul>\n\n<p>The plugin does not require Polylang Pro or an external AI subscription. It is an independent integration and is not affiliated with Polylang.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate Polylang and configure the site's languages.<\/li>\n<li>Install and activate ModelGain Multilingual Abilities.<\/li>\n<li>Visit <strong>Tools &gt; Multilingual Abilities<\/strong> to verify the provider, supported post types and four registered abilities.<\/li>\n<li>Keep external REST exposure disabled unless a trusted authenticated client needs it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20it%20translate%20or%20overwrite%20content%3F\"><h3>Does it translate or overwrite content?<\/h3><\/dt>\n<dd><p>No. This version only inspects multilingual content and translation relationships.<\/p><\/dd>\n<dt id=\"are%20the%20coverage%20numbers%20for%20the%20whole%20website%3F\"><h3>Are the coverage numbers for the whole website?<\/h3><\/dt>\n<dd><p>No. They refer only to the current bounded source-post page. Follow <code>next_offset<\/code> to scan the remaining source posts.<\/p><\/dd>\n<dt id=\"why%20can%20a%20missing-translation%20page%20contain%20no%20results%20but%20still%20have%20more%20pages%3F\"><h3>Why can a missing-translation page contain no results but still have more pages?<\/h3><\/dt>\n<dd><p>Pagination follows the source posts inspected. All posts on a given page may already have target translations.<\/p><\/dd>\n<dt id=\"does%20enabling%20rest%20exposure%20make%20my%20private%20drafts%20public%3F\"><h3>Does enabling REST exposure make my private drafts public?<\/h3><\/dt>\n<dd><p>No. WordPress authorization is required for execution, and individual posts are protected by editing permissions. Do not grant administrator privileges to untrusted integrations.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Add four native, read-only Polylang abilities for language, coverage, missing-translation and relationship audits.<\/li>\n<li>Include bounded source-post pagination, per-execution permissions and explicit external REST opt-in.<\/li>\n<li>Add an administration diagnostic screen, provider-absence handling and uninstall cleanup.<\/li>\n<\/ul>","raw_excerpt":"Audit translation coverage and translation relationships on Polylang sites using the native WordPress Abilities API.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/397050","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=397050"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/upaccn"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=397050"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=397050"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=397050"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=397050"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=397050"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=397050"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}