Title: Tricot
Author: Tricot
Published: <strong>2025(&#101;)k&#111; abendua&#114;&#101;&#110; 9(&#97;)</strong>
Last modified: 2026(&#101;)k&#111; apirila&#114;&#101;&#110; 29(&#97;)

---

Bilatu pluginak

![](https://ps.w.org/tricot/assets/icon.svg?rev=3416519)

# Tricot

 [Tricot](https://profiles.wordpress.org/tricot/)-(r)en eskutik

[Deskargatu](https://downloads.wordpress.org/plugin/tricot.3.6.9.zip)

 * [Xehetasunak](https://eu.wordpress.org/plugins/tricot/#description)
 * [Berrikuspenak](https://eu.wordpress.org/plugins/tricot/#reviews)
 * [Garapena](https://eu.wordpress.org/plugins/tricot/#developers)

 [Laguntza](https://wordpress.org/support/plugin/tricot/)

## Deskripzioa

**Description**
 Do you manage a WordPress website? Whether you’re a beginner or
an expert, with or without technical knowledge, Tricot gives you full control over
your translations. By intelligently combining AI and human expertise, Tricot makes
multilingual management accessible to all WordPress website managers.

**The new way to translate your WordPress site**
 Tricot revolutionizes the way 
WordPress site owners manage their translations by combining the power of a cutting-
edge artificial intelligence engine with an intuitive interface. Our technical architecture
is based on a distributed system where a lightweight extension installed on your
WordPress site communicates securely with our central application via a dedicated
programming interface. This application processes your translation requests using
artificial intelligence technologies recognized worldwide for their accuracy and
reliability.

**Your translations, your property**
 One of the fundamental features of our approach
is that the translations generated are stored directly in your WordPress database.
This architecture ensures that your translations remain accessible and under your
control at all times. You benefit from the power of our translation infrastructure
while retaining complete autonomy over your multilingual content.

**A full range of features**
 Machine translation using artificial intelligence,
multilingual content management, a validation table for reviewing and adjusting 
translations, automatic detection of content requiring translation, and advanced
import and export tools. Everything is accessible via a centralized interface that
allows you to efficiently manage all aspects of your multilingual strategy.

### Why Tricot

**1. Installation in just a few clicks**
 Forget complex configurations. Activate
the Tricot extension, launch AI translation… and your WordPress site is translated!

**2. Always up to date, in all languages**
 Tricot detects new content and automatically
generates a machine translation. A multilingual site that is always up to date is
possible.

**3. The power of AI and human expertise**
 Tricot is designed to enhance human 
intervention. Easily validate and modify machine translations in your validation
table.

**4. Your translations, your property**
 The translated texts belong to you, even
without a subscription (but you won’t want to do without us!)

**For more information**
 visit [tricotwp.com](https://tricotwp.com/)

## Pantaila-argazkiak

 * [[
 * A user-friendly validation table
 * [[
 * Automatic translation by AI
 * [[
 * Translation of links and media

## MEG

### Can I edit AI-generated translations?

Absolutely! Our validation table allows you to validate and edit each AI-generated
translation. You can do this directly in your WordPress site interface, or export
to CSV, have it reviewed by a professional, and then re-import it (with a PREMIUM
subscription). Tricot always informs you of the percentage of your content validated
by a human!

### How long does it take to translate an entire site?

The initial translation usually takes between 2 and 15 minutes, depending on the
size of your WordPress site. Our extension automatically detects all your content
and translates it with AI. Then, you can validate the important texts at your own
pace.

### How do I calculate the number of credits needed to translate my WordPress site?

Credits are needed to activate automatic AI translation. With us, there are no complicated
calculations. **1 credit = 1 word translated into 1 language.**
 The average website
contains between 10,000 and 20,000 words. That’s exactly how many credits you’ll
need to translate with Tricot! Does your website have more like 50,000 words? Plan
on 50,000 credits! Then, count on about 20% new content per year.

### Is machine translation really reliable for a professional website?

Translations generated by artificial intelligence are high quality and can be suitable
for 90% of your content. That said, we recommend always having a human review, especially
for critical texts (legal, marketing). Fortunately, our interface is brilliantly
designed to simplify the review process!

### I’m not comfortable checking translations. Do you offer a professional review service?

Yes! We rely on the services of language experts to review your translations!
 Simply
submit a language review request directly in the Tricot interface and a professional
will validate your content. Changes will be made directly in your Tricot validation
table! No action is required on your part: we take care of everything. The service
is billed on demand, according to your plan and the volume.

### Is Tricot compatible with my theme and plugins?

The Tricot extension works with the vast majority of the most popular WordPress 
themes and plugins. We support popular builders, form plugins, and even dynamic 
content.

### Does Tricot work with WooCommerce?

We are working on creating a complete integration that handles not only basic translations(
products, descriptions, categories) but also e-commerce subtleties such as dynamic
pages, attributes, and automated emails.
 In the meantime, Tricot already translates
your store’s standard pages (home, product, about, policy). For a complete multilingual
e-commerce solution, we recommend waiting for our upcoming WooCommerce update.

### What happens if I cancel my subscription?

Your translations remain active on your site. You keep everything that has been 
translated. You simply lose access to paid features such as AI translation, automatic
content detection, import/export, etc. That’s the advantage of our local architecture.

## Berrikuspenak

![](https://secure.gravatar.com/avatar/de515bbee9de484d93678d7aed23cfc34bf43279e2541cac73d2e7a5e82ca7ef?
s=60&d=retro&r=g)

### 󠀁[Simple comme promis](https://wordpress.org/support/topic/simple-comme-promis/)󠁿

 [guillaume4571](https://profiles.wordpress.org/guillaume4571/) 2026(e)ko otsailaren
11(a)

Tricot tient sa promesse et traduit le site en quelques clics.

 [ Irakurri berrikuspen bakarra ](https://wordpress.org/support/plugin/tricot/reviews/)

## Laguntzaileak eta Garatzaileak

“Tricot” software librea da. Ondoko pertsonek egin dizkiote ekarpenak plugin honi.

Laguntzaileak

 *   [ Tricot ](https://profiles.wordpress.org/tricot/)
 *   [ Horizon Cumulus ](https://profiles.wordpress.org/horizoncumulus/)

Tricot 1 eskualde-ezarpenera itzuli da. Eskerrik asko [itzultzaileei](https://translate.wordpress.org/projects/wp-plugins/tricot/contributors)
beraien ekarpenengatik.

[Itzul zaitez Tricot zure hizkuntzara.](https://translate.wordpress.org/projects/wp-plugins/tricot)

### Garapena interesatzen zaizu?

[Araka kodea](https://plugins.trac.wordpress.org/browser/tricot/), begiratu [SVN biltegia](https://plugins.svn.wordpress.org/tricot/)
edo harpidetu [garapen erregistrora](https://plugins.trac.wordpress.org/log/tricot/)
[RSS](https://plugins.trac.wordpress.org/log/tricot/?limit=100&mode=stop_on_copy&format=rss)
bidez.

## Aldaketen loga

#### 3.6.9 – 2026-04-29

 * FIX – Prevent Tricot from deleting Elementor’s generated `post-*.css` files during
   the frontend translation buffer, avoiding temporary unstyled translated pages
   caused by 404s on Elementor page CSS.

#### 3.6.8 – 2026-04-24

 * FIX – Two stranded write paths in `ajax_update_translation()` now sync to the
   Tricot app. (1) Manually adding a media translation in the validation table (`
   type === 'medias'` branch, `tricot_ajax.php` ~ line 2293) inserted the row locally
   but never called `send_translations()` — the app’s domain DB stayed unaware of
   the manual value, and a subsequent re-translation request for the same hash would
   have hit DeepL again instead of reusing the admin’s input. (2) Manually adding
   a translation for a NEW target language (`tricot_ajax.php` ~ line 2325, the new-
   lang-variant insert from a source row) had the same gap. Both branches now sync:
   with `auto=false` if the admin provided a value (manual translation), with `auto
   =true` if the field was left blank (request a fresh DeepL pass for the new language)
 * ADD – `Tricot_Editor::frontend_editable_types()` and `Tricot_Editor::is_type_frontend_editable(
   $type)` — single source of truth for which translation types can be edited in-
   place via the front-end editor versus types that are only editable in the validation
   table. Lists `content`, `content-html`, `attr`, `link` (external), `image`, `
   video`, `iframe`, `media-attr`, `title`, `excerpt`. Excludes `meta:*` (in `<head
   >`, not clickable), `attachment` (URL-only), `gravityforms` / `wpforms` / `formidable`/`
   fluentforms` / `woocommerce` / `media:*` (rendered via plugin filters outside
   the DOM scanner’s reach — the form wrappers are explicitly excluded from DOM 
   parsing by design). Helper available for future UI work (3.7.0 will add a “scope”
   badge in the validation table)
 * ADD – Front-end editor markers now extended to `video` and `iframe` elements.
   Admin can click a translated video / iframe URL on the live site and edit it 
   in-place via the editor tooltip, same as external links. The `hash` is now propagated
   through `check_translations()` for these types so `apply_translations()` can 
   attach the `tricot` / `original` / `hash` attributes when the front-end translator
   session is active. Coverage previously stopped at text and image markers — gap
   closed for embed-style media
 * DEV – Audit complète des chemins détection  app : `tricot_ajax` (corrigé), `tricot_dom`(
   queue + flush ✓), `tricot_url::cron_indexation` (passe par DOM scanner du wp_remote_get
   ✓), `Tricot_Tierce/*` (queue via `string_translate` + flush shutdown ✓), `tricot_media_library::
   index_attachment_meta` (call direct ✓), `tricot_media_library::attachment_fields_to_save`(
   call direct ✓). Aucun autre orphelin identifié

#### 3.6.7 – 2026-04-24

 * MOD – “Clean stuck placeholders” button moved from the Glossary page to Advanced
   Settings (new “Maintenance” section). This is an emergency tool, not a day-to-
   day glossary operation — it now lives alongside the other maintenance toggles(
   debug level, cron interval, detection depth) and no longer clutters the Glossary
   admin UI. Also no longer gated on `can('glossary')` : an ex-Pro site that downgraded
   to Free must still be able to clean up contaminated rows (the Glossary page redirect
   is gated, the Advanced Settings page is only gated on `manage_options`, so this
   fix unlocks the maintenance for every site)
 * FIX – “Force replace existing translations” (Glossary page) is now actually forcing
   re-translation when a new glossary term needs to apply to existing rows. Before
   3.6.7, pass 3 (the re-translation via API path, used when local substitution 
   cannot align the existing translation with the new glossary) was silently broken:
   the plugin cleared `translated` and re-queued the IDs, but the app’s `receive_text()`
   short-circuited on its cached `translation_auto` column and returned the OLD 
   translation — the one that predates the glossary change — without ever calling
   DeepL again. `restore_masked_terms()` then ran on a string that never contained
   the mask tokens, producing a no-op. Result : admin clicks “Force apply”, sees“
   N translations updated”, and sees zero actual change on the front-end. The plugin
   now calls the new App 0.9.7 endpoint `POST /wp-json/tricot/v1/flush_auto_cache`
   with the exact list of hashes to invalidate BEFORE re-submitting — forcing the
   app to run DeepL fresh with the new masking, and glossary terms actually propagate
   to existing translations. Same pattern as the 3.6.5 stuck-placeholders fix, but
   scoped by hash list rather than LIKE scan of the domain. Answers the recurring
   report “le glossaire ne s’applique pas aux traductions existantes”

#### 3.6.6 – 2026-04-24

 * FIX – Priority rule on the `type` column when two capture paths land on the same
   hash. Before this release, a string captured by the generic DOM scanner (type`
   content`) and also captured by a dedicated integration (type `gravityforms`, `
   wpforms`, `formidable`, `fluentforms`, `woocommerce`, `meta:title`, `meta:description`)
   would oscillate between the two values depending on hook order from one request
   to the next — making the “Type” filter in the validation table unreliable. The
   integration type now always wins against a DOM type; `title` and `excerpt` keep
   their previous override behavior; any other transition leaves the first capture
   in place (avoids ping-pong). New helper `Tricot_Translate::known_types()` centralizes
   the type list — extension point for future integrations
 * ADD – Warning log when `send_translations()` sees an unknown type reaching the
   app. Detects typos (`woocomerce` vs `woocommerce`) and silent regressions when
   a new integration forgets to register its type in `Tricot_Translate::known_types()`.
   Does not block the send — the `type != 'link'` exclusion remains the only hard
   gate — just surfaces the new type in the debug log for audit
 * ADD – Anonymous visitor throttle on `send_translations()` (2-second global window,
   transient-backed). Since 3.6.4, detection is open to anonymous visitors — without
   throttling, a traffic spike (bot, malicious crawler, post going viral) could 
   fire 1000+ API calls in seconds and burn credits + saturate DeepL. Admin users,
   the Tricot crawler user-agent, and AJAX calls from the validation table all bypass
   the throttle. Strings skipped by the throttle stay in the DB with `translated
   = NULL` and are picked up by the next authenticated visit, a later shutdown flush,
   or the detection cron
 * ADD – Informational notice on the Validation table for Free-plan sites explaining
   that detection continues even without auto-translation — empty rows are expected
   and represent future translation work that will unlock once a paid plan is active.
   Previous users coming back from Pro/Premium keep seeing their existing translations
   rendered normally on the front-end (nothing is purged on downgrade except trial-
   flagged rows)
 * ADD – Chunking on “Force replace existing translations” (Glossary page). Before
   3.6.6, the button scanned every translation in one request and sent the full 
   batch to the API — a site with 10k+ rows would timeout on PHP execution limit
   or produce an oversized API payload. The button now processes 500 rows per click(
   configurable via the `tricot_glossary_force_apply_chunk` filter) and reports 
   a “More remain — click again” message when additional rows are pending. No UI
   change, no background job, just a safe cap that preserves idempotence
 * FIX – Companion to App 0.9.6 : the app now also detects HTML content heuristically
   via `string_looks_like_html()`, so integration-tagged strings (`gravityforms`,`
   wpforms`, `fluentforms`, `formidable`, `complianz`, `woocommerce`) containing
   real HTML markup (form descriptions with styling tags, confirmation messages,
   RGPD banner copy, transactional emails) are now passed to DeepL with `tag_handling:
   html` — tags preserved, attributes intact, entities not mangled. Previously, 
   only the literal type string `content-html` (emitted by the Unified HTML DOM 
   mode) triggered HTML mode; everything else went through as plain text

#### 3.6.5 – 2026-04-24

 * ADD – New “Clean stuck placeholders” button on the Glossary page. Scans the local
   translations table with `LIKE '%TRICOTGLOSSARYTOKEN%'` and `LIKE '%XZQTGM%QZX%'`—
   portable across MySQL versions/collations and broad enough to catch placeholders
   whose suffix was mutilated by DeepL (e.g. `TRICOTGLOSSARYTOKEN1KNITTING` where
   the “TRICOT” tail was translated). Clears `translated` and `suggested`, resets`
   validated` to 0, invalidates the in-process glossary mask cache, and re-queues
   those rows through the auto-translation pipeline so DeepL returns clean values.
   Answers the case where admins cannot remove stuck placeholders manually : `force_apply_to_existing_translations()`
   skips rows whose originating glossary entry has been deleted since, leaving the
   tokens visible in the validation table with no UI path to flush them
 * ADD – The button also calls the new Tricot App endpoint `POST /wp-json/tricot/
   v1/clean_stuck_placeholders` (App 0.9.5+) BEFORE re-submitting the affected IDs
   for auto-translation. Without this server-side flush, the retry was a no-op :
   the app’s `receive_text()` handler short-circuits to the cached `translation_auto`
   column when it is non-empty, so re-submitting a contaminated hash returned the
   same stuck placeholder from the app instead of calling DeepL again. The plugin
   now guarantees the app’s `translation_auto` / `translation_user` / `translation`
   columns for the affected hashes are NULLed first, so the next `send_translations()`
   triggers a fresh DeepL pass with the safe placeholder masking. The admin notice
   now reports both local and app-side cleanup counts

#### 3.6.4 – 2026-04-23

 * FIX – Glossary mask placeholders (`XZQTGM****QZX`) stayed stuck in translations
   for batches that crossed multiple target languages at once. Root cause : `Tricot_Glossary`
   kept the mask-to-target mapping keyed by source hash alone. Since the same source
   text has one hash but N language-specific target mappings, processing a batch
   for ES  EN  DE  KO in sequence caused each `mask_terms_for_api()` call to overwrite
   the previous language’s mapping — at restore time, only the last language had
   a valid mapping, and every other language ended up with raw placeholders surviving
   in the DB (and often with a completely wrong language in the output because DeepL
   got confused by what survived in the prompt). The cache is now keyed by `hash
   + target_lang`, so each language keeps its own mapping intact
 * FIX – Gravity Forms placeholders, labels and `customLabel` on sub-inputs were
   detected but not actually propagated to the rendered HTML when the field was 
   a `GF_Field` object rather than a plain array. `$field['placeholder'] = $translated`
   via ArrayAccess did not update the public `$field->placeholder` property that
   GF’s rendering code actually reads, and `$field['inputs']` sometimes returned
   a copy of the internal array — modifications via `foreach (&$input)` wrote to
   the copy, never the original. The integration now writes directly to public properties
   for objects and reassigns nested arrays in full after local modification, guaranteeing
   the translations land where GF actually looks for them
 * FIX – Gravity Forms submit / next / previous buttons now translated even when
   the rendered HTML bypasses `$form['button']['text']`. Some themes, add-ons or
   locale overrides rebuild the button HTML from their own strings, so modifying
   the form object via `gform_pre_render` wasn’t enough — the final rendered text
   remained in the source language. Added filters on `gform_submit_button`, `gform_next_button`
   and `gform_previous_button` that translate the `value=""` attribute of `<input
   type="submit">` and the inner text of `<button>...</button>` directly on the 
   rendered HTML, as a safety net over the upstream form-object filter
 * ADD – Validation table’s “Type” filter dropdown now builds dynamically from the
   types actually present in the translations table. Instead of showing every possible
   integration (Gravity Forms, WPForms, Fluent Forms, Formidable, WooCommerce) whether
   or not they’re used, only types with at least one row in `wp_tricot_translations`
   appear — a site that only uses Gravity Forms won’t see empty “WPForms” or “Formidable”
   options in the filter
 * FIX – Detection and auto-translation now run for anonymous visitors (not only
   admins and the Tricot crawler). Previously two gates in `tricot_dom.php` were
   scoped to `is_user_logged_in() || TricotCrawler` : the send-to-App step in `check_translations()`
   and the `table_sources.timestamp` refresh that marks a page as “recently seen”.
   That meant strings rendered only to public visitors — meta:title via Yoast / 
   SEOPress / RankMath, ACF-driven content, conditional blocks — stayed in the database
   with `translated = NULL` until an admin happened to visit the same page, and 
   the admin had no feedback that detection had actually occurred. Both gates are
   now open by default. Can be restored to the previous restricted behavior by defining`
   TRICOT_ADMIN_ONLY_AUTO_TRANSLATE` in `wp-config.php`
 * FIX – Gravity Forms specifically : the `.gform_wrapper` DOM subtree is explicitly
   excluded from Tricot’s DOM parser (by design, since GF uses its own `gform_pre_render`
   filter), so `check_translations()` never flushes GF strings. Added a dedicated
   flush at the end of `translate_form()` that sends pending GF translations to 
   the App right after the form has been processed — with full request context (
   source_id, urls, license, api all guaranteed initialised) rather than waiting
   for the shutdown hook where some of that context can be missing. Idempotent across
   multiple form renders per request
 * FIX – Third-party plugin strings (Gravity Forms, WPForms, Fluent Forms, Formidable,
   WooCommerce) were silently dropped from the translation batch sent to the App.
   The whitelist in `send_translations()` only kept `content`, `title`, `excerpt`,`
   meta:*` and `media:*` — every integration-specific type was filtered out before
   reaching DeepL, leaving rows stuck with `translated = NULL` in the validation
   table. Replaced the whitelist with a narrower exclusion that only skips `link`(
   which has its own URL pipeline), so every textual type now reaches the App regardless
   of its origin plugin
 * FIX – Auto-translation now triggers reliably for strings detected outside the
   DOM pipeline — WPForms, Fluent Forms, Formidable, Yoast / SEOPress / RankMath
   SEO (meta:title, meta:description), ACF, etc. Previously, strings picked up by
   these third-party filters landed in the database with `translated = NULL` and
   waited for an admin or the Tricot crawler to visit the page before being sent
   to the App. Now a centralized end-of-request flush (`shutdown` hook) sends any
   pending new translations regardless of the detection channel, so anonymous visitors
   to a public form or a SEO-driven page will get translated content on subsequent
   visits without waiting for an admin pass
 * FIX – Gravity Forms : placeholders and labels now reliably translated on field
   types that stored them outside the main `placeholder` key. Added coverage for`
   chooseFile` (fileupload button), `checkboxLabel` (consent fields), `nextButton`/`
   previousButton` on multi-step page fields, the form-level `lastPageButton`, and`
   customLabel` / `defaultValue` on sub-inputs of name, address, and email/password-
   with-confirmation fields. Also hardened the traversal against fields/choices/
   inputs returned as objects instead of plain arrays

#### 3.6.3 – 2026-04-21

 * ADD – New “Group formatted sentences” toggle in Advanced settings (Site indexing
   section) to disable the automatic grouping of sentences with inline styling. 
   Useful on themes that produce many structural widgets where grouping causes unwanted
   reordering

#### 3.6.2 – 2026-04-21

 * FIX – Price widgets and other structural blocks (e.g. “15 $ / mois” with inline-
   styled spans) are no longer mistakenly unified as one translation string. Tricot
   now requires at least one direct text node around inline elements before treating
   a parent as a prose paragraph — widgets made of pure span-only structure are 
   kept fragmented and translated token by token, preserving numbers and currency
   positioning

#### 3.6.1 – 2026-04-21

 * ADD – Free 7-day trial with 3,000 credits and most Premium features — new option
   in the installation wizard, with countdown banner, automatic conversion to Pro/
   Premium on payment, and post-expiration retention window
 * ADD – License expiration date now displayed next to the Active badge on the License
   activation page, plus new “Upgrade my license” button that redirects to the customer
   portal
 * ADD – Credit management page redesigned with dynamic display of the 3 credit 
   bundles available for the current plan
 * ADD – Range selection (Shift+Click) on the Validation table and Links/Media table
   bulk-select checkboxes — standard file-manager behaviour
 * ADD – Dedicated compatibility modules for Yoast SEO, Rank Math, All In One SEO,
   The SEO Framework, Slim SEO, SmartCrawl, Gravity Forms, WPForms, Formidable Forms,
   Fluent Forms, Elementor, Divi, The Events Calendar, Complianz (RGPD)
 * ADD – Automatic cache invalidation on translation changes for WP Rocket, W3 Total
   Cache, LiteSpeed, WP Super Cache, WP Fastest Cache, SG Optimizer, Hummingbird,
   Cache Enabler, Breeze
 * ADD – Configurable detection cron frequency and start hour in Advanced settings—
   from every 30 minutes to once a day, with a 2 AM default to scan during off-peak
   hours
 * ADD – Advanced ACF integration toggle (Advanced settings  ACF integration) for
   themes that read ACF values outside standard HTML rendering (REST API, JavaScript,
   Options Pages)
 * ADD – Glossary now available on the Pro plan (previously Premium-only) — no more
   lockout for clients who add terms during trial and convert to Pro
 * MOD – Wizard pricing updated — PRO: $240/year, PREMIUM: $480/year (was $260 and
   $486)
 * MOD – Menu label “Gestion du crédit” corrected to “Gestion des crédits” (plural)
 * MOD – Trial countdown hour/day rollover is now intuitive — a freshly-started 
   7-day trial displays “7 jours” instead of “6 jours”
 * FIX – Glossary terms are now reliably applied to new and existing translations—
   placeholder masking is more robust against DeepL quirks, and the “Re-apply to
   existing translations” button now re-translates through the API when a simple
   substitution is not enough
 * FIX – WordPress native spinners (inline edit save, media uploads, updates) no
   longer break due to a CSS class collision
 * FIX – Yoast SEO and Gravity Forms integrations are now effectively loaded (previously
   dormant due to an initialization oversight)
 * FIX – Conversion from trial to paid plan now correctly deducts credits consumed
   during the trial from the new plan’s pack
 * FIX – “License partially converted — repair required” banner no longer stays 
   displayed on already-converted licenses
 * SEC – All new REST endpoints protected by license + API key validation on the
   public side, and `manage_options` capability on the administration side

#### 3.5.12 – 2026-04-10

 * FIX – SEOPress meta titles and descriptions are now captured during manual detection
   as long as the “SEO content” option is enabled in Manage Languages. The legacy`
   tricot_crawler_seo` option (only set by the old crawler) is no longer the sole
   gatekeeper for meta:title/meta:description insertion — the global `automatic_options["
   seo"]` setting now takes precedence, which matches user expectation
 * FIX – Automatic placement toggle in the Language selector page now actually disables
   the feature when unchecked: the menu_locations list is cleared on save, so the
   language selector is no longer injected in any menu even if checkboxes remained
   ticked in the (now hidden) settings panel
 * ADD – New `auto_placement_enabled` boolean field in the `tricot_language_switcher_options`
   schema with backward-compatible default inferred from the presence of existing
   menu_locations

#### 3.5.11 – 2026-04-10

 * FIX – Detection progress polling no longer aborts on the first transient network
   error. A consecutive-failure counter with exponential backoff (up to 30 seconds
   between retries) lets the detection resume automatically when the server recovers.
   The polling only surrenders after 10 consecutive failures (about 2 minutes of
   sustained disconnection)
 * FIX – AJAX polling requests now have a 60-second timeout instead of the jQuery
   default, accommodating slow servers that occasionally need longer to respond 
   during heavy detection batches
 * MOD – Detection error counter is reset at the start of a new manual detection
   run and after every successful poll, so brief hiccups don’t accumulate across
   sessions

#### 3.5.10 – 2026-04-10

 * ADD – New `Tricot::ui_excluded_post_types()` helper and `tricot_ui_excluded_post_types`
   filter centralizing the list of custom post types hidden from selection menus(
   wizard, indexation, manage languages, crawler)
 * FIX – SEOPress meta title and meta description translation filters (`seopress_titles_title`,`
   seopress_titles_desc`) are now guaranteed to run regardless of the SEOPress 404/
   bot custom post type exclusions — the CPT filters only hide entries from user
   selection UIs and never block the filter-based integration
 * MOD – CPT exclusions (elementor_library, e-floating-buttons, seopress_404, seopress_bot)
   are now sourced from a single list in the core class instead of being hardcoded
   in 6 separate files, preventing drift and making the list extensible via filter

#### 3.5.9 – 2026-04-10

 * ADD – New “Migrated” option in the status filter of the validation table, export
   modal and validation request modal, letting administrators quickly isolate translations
   imported from the Tricot Migration plugin
 * ADD – New “migrated” localized string in tricotValidation JavaScript strings

#### 3.5.8 – 2026-04-10

 * ADD – New validation state “Migrated” (value 4) for translations imported from
   Tricot Migration plugin, displayed with distinct #97A5FF toggle color
 * ADD – CSV/XLIFF export now labels migrated translations as “Migrated” instead
   of “No”
 * ADD – Import recognizes “Migrated” as a validation state and preserves it on 
   round-trips
 * MOD – Validation filter “Validated” now includes state 4 (migrated) alongside
   states 1 and 3
 * MOD – Validation statistics count migrated translations as validated
 * FIX – User interaction with a migrated toggle (uncheck then recheck) correctly
   downgrades the state from 4 to 1 (user-validated)

#### 3.5.6 – 2026-04-09

 * ADD – XLIFF 1.2 export and import support for professional translation tool interoperability
 * ADD – Bulk media metadata translation button on the Links & Media page with progress
   indicator
 * ADD – Floating language selector options in the setup wizard (enable, position,
   display style)
 * ADD – Language detection hint in wizard step 2 with link to WordPress general
   settings
 * ADD – Automatic placement toggle and responsive visibility settings (hide on 
   mobile/desktop with independent breakpoint) for menu-based selector
 * ADD – All content types now checked by default on first wizard run for automatic
   translation
 * MOD – Language selector settings page reorganized into four clear sections: Floating
   selector with live preview, WordPress menu integration, Automatic placement, 
   and Manual integration (shortcodes & PHP)
 * MOD – Post editor Tricot meta box redesigned with URL slug prefix preview and
   clear action links
 * MOD – Import file upload now registers custom MIME types to prevent WordPress
   upload restrictions on CSV, TSV, JSON, XML, XLIFF files
 * MOD – XLIFF and structured format imports bypass column mapping step automatically
 * MOD – SEOPress 404/bot post types excluded from detection across all entry points(
   crawler, manual detection, wizard, indexation UI)
 * MOD – Default floating selector colors updated (text: #232323, accent: #424242)
 * FIX – Frontend editor save button no longer spins indefinitely
 * FIX – Frontend editor tooltip remains responsive after a network error
 * FIX – Content detection no longer stalls when WP-Cron is unavailable
 * FIX – Redundant link translation call on every page load
 * MOD – Improved page rendering performance with media URL caching and reduced 
   autoloaded options
 * SECURITY – Hardened frontend HTML sanitization and DOM error handling

#### 3.5.5 – 2026-04-08

 * ADD – Manual detection now runs as a dedicated resilient background job independent
   from cron, save_post and page-load detection flows
 * ADD – Manual detection batches process a few sources at a time with heartbeat,
   locking and automatic continuation in background
 * ADD – Automatic retry handling for failed manual detection items before marking
   them as final errors
 * ADD – Stalled manual detection jobs are now revived automatically instead of 
   leaving the progress indicator stuck indefinitely
 * MOD – Manage Languages manual detection now resumes and tracks the dedicated 
   background job instead of relying on the legacy global cron progress state
 * MOD – Wizard detection step now starts the dedicated manual detection job on 
   the progress screen instead of triggering the legacy cron launch during redirect
 * FIX – Manual detection no longer reports success when nothing new was actually
   started because an old scheduled cron task already existed
 * FIX – Manual detection progress polling now stops cleanly on completion or failure
   instead of waiting forever for an exact 100% state

#### 3.5.4 – 2026-04-07

 * ADD – Detection of media URLs used in inline background and background-image 
   CSS declarations so background images can be translated like standard media
 * ADD – Detection of media URLs in background-related HTML attributes such as data-
   bg, data-background, data-image, data-img and data-parallax when they reference
   WordPress attachments
 * ADD – New DOM media-attribute translation flow to rewrite translated media URLs
   directly inside style and supported data-* attributes
 * ADD – Frontend translator support for background-based media through new editable
   media markers on non-img elements
 * ADD – Frontend image/media tooltip can now target elements using translated background
   media, not only tags
 * ADD – Frontend media editor now previews original and translated background media
   and updates the corresponding attribute on save
 * ADD – Media background elements now expose frontend translation metadata such
   as original URL, translated URL, original attachment ID and translated attachment
   ID for editing support
 * Fix — Code mort dans tricot_rewrit_endpoint()
 * Fix — Correction sur l’initialisation des cookies qui entre en conflit avec le
   header
 * Fix — Early return pour les webhooks POST JSON
 * Fix — Null guard sur tricot_home_url

#### 3.5.3 – 2026-03-24

 * ADD – Unified HTML translation mode to keep formatted blocks (
   , inline tags,
   WYSIWYG output) as a single translation string
 * ADD – Helper tricot_wrap_unified_html() and dedicated advanced settings documentation
   for unified HTML translation
 * ADD – ACF integration for unified translation on text, textarea and WYSIWYG fields
 * ADD – Glossary and translation memory page with preferred terms management and
   force apply on existing translations
 * ADD – Glossary suggestions displayed directly in the validation table
 * ADD – Glossary terms injected in translation requests and exact glossary matches
   applied automatically when possible
 * ADD – Language switcher floating mode with flags, positioning, style controls,
   responsive visibility options and live preview
 * ADD – Improved language switcher rendering with flag assets and new display combinations
 * ADD – Validation by Tricot workflow from the validation table with request summary,
   checkout flow and dedicated import page
 * ADD – Distinct “validated by Tricot” status in the validation table
 * ADD – Export now supports CSV, TSV, JSON, XML and XLSX formats
 * ADD – Import now supports CSV, TSV, TXT, JSON, XML and XLSX formats with column
   mapping and validation mode selection
 * ADD – Unified HTML is now available as a dedicated type in the validation filters
   and preserves HTML during manual edits
 * ADD – Media metadata translation support for title, alt text, caption and description,
   including auto-translation support

#### 3.4.2 – 2026-03-02

 * FIX – URL auto translations
 * FIX – URL where slug begin with the language
 * REMOVE – Tricot banner with Free license

#### 3.4.1 – 2026-02-13

 * ADD – WooCommerce translate url redirection to language on add to cart
 * ADD – Domain switcher – auto-detection of new domain to swap license and authorize
   a second domain for development
 * MOD – Optimised date format
 * FIX – Translate if debug is active but non debug display

#### 3.4.0 – 2026-01-22

 * ADD – Support Woocommerce
 * ADD – Warning if PHP DOM is not active
 * ADD – Meta type in validation filter
 * ADD – Send context for better translation to DeepL
 * ADD – Translate Placeholder for textarea
 * FIX – Media order show from recent to oldest

#### 3.3.7 – 2026-01-20

 * FIX – Support url translation under subdirectory

#### 3.3.6 – 2026-01-13

 * ADD – Translation capture – Advance mode VS Legacy mode

#### 3.3.5 – 2025-12-16

 * FIX – error with image on save translation

#### 3.3.4 – 2025-12-12

 * FIX – Compatibility issue with Gravity Form Ajax (iframe src=about:)

#### 3.3.3 – 2025-12-10

 * Message change for Popup on new language for indexation
 * French Canada translation updated

#### 3.3.2 – 2025-12-03

 * ADD – Support WordPress 6.9
 * ADD – Popup on new language for indexation
 * ADD – Button at the end of wizard
 * ADD – Color base on low credits
 * MOD – Remove Custom CSS
 * MOD – Remplace ob_start by worpdress inner function pour html buffer
 * FIX – Translation of Portuguese (Brazilian)

#### 3.3.1 – 2025-11-27

 * FIX – Saving public language
 * ADD – Allow translation of placeholder
 * ADD – Allow translation of video and iframe
 * ADD – Frondend Translator(Beta)

#### 3.2.6 – 2025-10-29

 * FIX – Wizard wasn’t sending correctly language to server
 * FIX – Error on some languages configuration

#### 3.2.4 – 2025-10-28

 * ADD – Configuration wizard
 * ADD – Manually add a custom link for translation
 * MOD – Enhanced visual for restricted option on free plan
 * MOD – Review visual of the manage language page
 * MOD – Change logic for automatic detection for autotranslation
 * MOD – Automatic detection run by CRON
 * MOD – Separate the Language Selector page from the language management page.
 * FIX – API Call when deleting translation
 * FIX – Free plan if invalid license
 * FIX – Automatic translation of the permalink
 * SECURITY – Review SQL to remove implode Where

#### 3.1.2 – 2025-09-19

 * Version for publication.

#### 3.0.1 – 2025-05-27

 * Plugin created.

## Meta

 *  Version **3.6.9**
 *  Azken eguneraketa **duela aste 1**
 *  Instalazio aktiboak **10+**
 *  WordPress bertsioa ** 6.4 edo handiagoa **
 *  **6.9.4** (e)raino probatuta.
 *  PHP bertsioa ** 7.4 edo handiagoa **
 *  Hizkuntzak
 * [English (US)](https://wordpress.org/plugins/tricot/) eta .[French (Canada)](https://fr-ca.wordpress.org/plugins/tricot/).
 *  [Itzuli zure hizkuntzara](https://translate.wordpress.org/projects/wp-plugins/tricot)
 * Etiketa
 * [translation](https://eu.wordpress.org/plugins/tags/translation/)
 *  [Ikuspegi aurreratua](https://eu.wordpress.org/plugins/tricot/advanced/)

## Balorazioak

 5 out of 5 stars.

 *  [  1 5-star review     ](https://wordpress.org/support/plugin/tricot/reviews/?filter=5)
 *  [  0 4-star reviews     ](https://wordpress.org/support/plugin/tricot/reviews/?filter=4)
 *  [  0 3-star reviews     ](https://wordpress.org/support/plugin/tricot/reviews/?filter=3)
 *  [  0 2-star reviews     ](https://wordpress.org/support/plugin/tricot/reviews/?filter=2)
 *  [  0 1-star reviews     ](https://wordpress.org/support/plugin/tricot/reviews/?filter=1)

[Your review](https://wordpress.org/support/plugin/tricot/reviews/#new-post)

[See all reviews](https://wordpress.org/support/plugin/tricot/reviews/)

## Laguntzaileak

 *   [ Tricot ](https://profiles.wordpress.org/tricot/)
 *   [ Horizon Cumulus ](https://profiles.wordpress.org/horizoncumulus/)

## Laguntza

Zerbait duzu esateko? Laguntza behar?

 [Ikusi laguntza foroa](https://wordpress.org/support/plugin/tricot/)