=== GoLocal! Website Translation & Localization ===
Contributors: xodera
Tags: translation, multilingual, localization, ai-translation, language-switcher
Requires at least: 6.3
Tested up to: 7.1.3
Requires PHP: 7.4
Stable tag: 1.2.2
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

AI website translation and localization with cached translations and protected form values. Connect your GoLocal SaaS project.

== Description ==
The installable plugin is free. Translation is provided by the GoLocal SaaS subscription linked to your project. No paid WordPress plugin license is required.

The runtime is bundled locally. When enabled with explicit service consent, it requests public project configuration and sends non-excluded public page text to https://worker.goinglocal.online for translation. It also sends a visitor-counting beacon to that service. Do not enable on private dashboards without explicit privacy review and appropriate exclusions.

Service: https://goinglocal.online
Terms: https://goinglocal.online/terms
Privacy: https://goinglocal.online/privacy

Form values, textarea contents, Quill editors and contenteditable regions are not translated. Displayed customer content still requires exclusions: translate="no", class="notranslate", data-tr-skip or CSS selectors in Settings > GoLocal. Selectors protect children too.

WooCommerce cart, checkout and account pages are excluded, including localized slugs. The WordPress administrator toolbar, private posts and password-protected posts are protected. This plugin does not translate transactional emails or create server-rendered localized URLs/hreflang for multilingual SEO.

Native mini-cart drawers, saved cart-item/personalization details, embedded cart/checkout/account sections and native classic/block review content and author names are also excluded on public pages. Their text stays original rather than being sent to the translation service. Public product names, descriptions and catalog controls outside these protected containers remain eligible. Custom extensions and other displayed customer data still need explicit exclusions.

On native search-result pages, known core-theme query headings and WooCommerce query breadcrumbs stay original too: they contain the visitor's typed search query. Search still uses the original WordPress query; this plugin does not rewrite it, create a translated search index or automatically reverse-normalize translated product names. Custom themes that echo queries elsewhere need explicit exclusions.

== Installation ==
1. Upload the GoLocal ZIP via Plugins > Add New > Upload Plugin, then activate.
2. Open Settings > GoLocal! and follow the built-in six-step connection guide.
3. Sign in at https://goinglocal.online/auth/signin. Open Projects > Add project, choose Website and use your exact published domain. A different staging hostname needs its own allowed project configuration.
4. Open the project installation settings and copy its PUBLIC project API key. Paste it into WordPress. Never paste a provider key, database password or admin credential.
5. Protect displayed customer names and private sections using CSS exclusions. Read the service disclosure; enable consent and public-page translation, then Save Changes.
6. Click Test project key, then open the published site, select French and test navigation, dynamic content, forms, mobile buttons, reload and return to Original. An accepted key alone is not a full site acceptance test.
7. Manage visible widget languages, source language and manual translations in the GoLocal dashboard. Eligible manual corrections propagate to visible pages in approximately 30 seconds.

Installing or enabling the plugin does not buy a subscription. The separate service subscription, current limits and trial eligibility are shown at https://goinglocal.online/dashboard/billing.
Support and setup help: https://goinglocal.online/dashboard/help.

== Frequently Asked Questions ==
= Will it change saved data? =
Translation does not rewrite posts, comments, orders or form values. The plugin stores its own configuration and temporary connection-test notices in WordPress. Native comments, product reviews, author-name blocks and the administrator toolbar are excluded; protect other displayed user content with inherited exclusions so it is not sent for translation.
= What if the service is unavailable? =
The original page stays visible and interactive. There is no global body-hiding CSS.
= What if an exclusion selector is invalid? =
Translation stops and leaves the original page visible. Correct the selector before enabling translation again; a malformed privacy exclusion is never silently ignored.
= Can I use it together with native localization? =
Exclude natively localized sections or disable browser auto-detection in GoLocal to avoid two systems translating the same content.
= Are manual translations live? =
Visible pages check the translation bundle every 30 seconds. Changes apply to all matching non-excluded text instances without reload.
= What is the difference between disabling and deleting the plugin? =
Disabling public-page translation or deactivating the plugin keeps its local settings. Deleting it removes the installed plugin files and the GoLocal configuration saved in WordPress. Your WordPress content, products, orders and service-side translations are not deleted. Reinstalling requires entering the public project key and enabling consent again. Reload already-open pages and purge any page/CDN cache to remove previously loaded scripts. Deleting the plugin does not cancel your separate GoLocal service subscription.

== Changelog ==
= 1.2.2 =
* Give name-bearing product image/button captions bounded context from their own product card, never from a related card or private field.
* For new automatic captions, the service can reuse the exact product-name translation already in that project's bundle without an extra AI request.
* Existing whole-caption translations, especially manual corrections, remain authoritative. No global regeneration or retroactive rewriting of saved captions.
* Preserve source product data, Input/Quill protection, live manual updates, existing caches and widget behavior. Bubble runtime is unchanged.

= 1.2.1 =
* Provide bounded public product category and description context for WooCommerce titles, separately from the text being translated.
* Identify catalogue names as product titles rather than generic headings or action buttons.
* Preserve inherited exclusions, original input/editor values, manual corrections and the existing translation-cache namespace.
* Existing automatic translations are not globally erased or silently regenerated.

= 1.2.0 =
* Prioritize visible public text and request one 25-text critical batch before the rest, with a bounded two-lane queue and progressive results.
* Send bounded public heading/label references for consistent terminology; never include protected user content or form values.
* Cancel stale language requests, settle partial failures safely, and protect fresh manual edits from older in-flight responses.
* The server context update improves domain wording and validates placeholders, markup and SKU tokens; existing manual translations and caches are retained.
* First-translation latency depends on providers and content; no universal speed or perfect-translation claim. Native original-value search/select limitations remain unchanged.

= 1.1.9 =
* Exclude known native search-query headings and WooCommerce search breadcrumbs before text collection and AI context selection.
* Preserve original search values and native result links; no automatic input rewriting or translated-index claim.
* Retain the 1.1.8 native cart/review protections and unchanged bundled Web runtime 1.1.7.

= 1.1.8 =
* Protect native classic/block mini carts and cart-item personalization displayed on public pages, not just dedicated cart routes.
* Protect WooCommerce block review bodies/authors and WordPress recent-comment content.
* Keep catalog text eligible and preserve inherited privacy exclusions for dynamically inserted drawers.
* WordPress adapter update only: bundled Web runtime remains 1.1.7, preserving its accepted behavior and existing cache namespace. No Bubble or Quill changes.

= 1.1.7 =
* Compact idle language widget with a decorative flag and language code.
* Page scrolling closes the language list; scrolling inside the list keeps it open.
* Prefer sideways collision avoidance before raising the widget; reserve CAPTCHA badges and native bottom controls.
* Preserve privacy, live manual edits and the existing translation-cache namespace across this update.
* Do not shrink host fonts or alter stored WordPress and WooCommerce values.

= 1.1.3 =
* Collision-aware floating widget respects mobile bottom controls, compact mode and visual viewport bounds.
* Remove the decorative blue accent below the widget.
* Preserve existing public-page translation, manual refresh, cache and privacy boundaries.

= 1.1.2 =
* Branded GoLocal! widget with decorative flags, native language names and keyboard navigation.
* Use public heading context and semantic button/heading/label/placeholder hints on cache misses.
* Coalesce overlapping bundle checks; warm-cache reloads do not resend known text to AI.
* Built-in six-step setup, service billing explanation, privacy checklist and troubleshooting.

= 1.1.1 =
* Report partial AI failures honestly, preserve original text, and retry with bounded backoff.
* Do not persist failed translation identity mappings. Existing translations keep working.

= 1.1.0 =
Initial WordPress integration with explicit service consent, inherited exclusions and fail-open public-page translation.
