Title: Deepglot
Author: Andreas Ostheimer
Published: <strong>2026 年 8 月 20 日</strong>
Last modified: 2026 年 9 月 24 日

---

搜尋外掛

![](https://ps.w.org/deepglot/assets/banner-772x250.png?rev=3657438)

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

# Deepglot

 由 [Andreas Ostheimer](https://profiles.wordpress.org/helpstring/) 開發

[下載](https://downloads.wordpress.org/plugin/deepglot.0.12.10.zip)

 * [詳細資料](https://tw.wordpress.org/plugins/deepglot/#description)
 * [使用者評論](https://tw.wordpress.org/plugins/deepglot/#reviews)
 *  [安裝方式](https://tw.wordpress.org/plugins/deepglot/#installation)
 * [開發資訊](https://tw.wordpress.org/plugins/deepglot/#developers)

 [技術支援](https://wordpress.org/support/plugin/deepglot/)

## 外掛說明

Deepglot translates rendered WordPress pages through the Deepglot translation API
and serves each visitor a localized site without duplicating posts.

 * Translates text, metadata, accessibility attributes, and JSON-LD structured data.
 * Rewrites internal links and SaaS-managed translated URL slugs for path-prefix
   or subdomain routing.
 * Replaces explicitly mapped same-site images, document links, self-hosted video
   files, and supported video embeds for active target languages.
 * Adds canonical and `hreflang` tags plus a multilingual sitemap.
 * Provides shortcode, block, widget, nav-menu, and automatic language switchers.
 * Caches translations locally and serves cached translations to crawlers without
   spending quota.
 * Lets administrators synchronize a bounded sitemap URL snapshot through the existing
   background translation queue.
 * Optionally translates dynamically loaded content through a same-origin WordPress
   REST endpoint.

Development source and release build instructions are available at https://github.
com/ostheimer/deepglot.

### External services

By default, this plugin connects to the Deepglot service at `https://deepglot.ai/
api/`. A compatible self-hosted API base URL can be selected in the settings.

For translation requests, the plugin sends the configured API key, text fragments
from rendered pages, source and target language codes, the requested page URL, and
a bot-classification code. It sends these requests when uncached content needs translation,
when an administrator starts URL synchronization, or when an administrator tests
the connection. URL synchronization first requests safe internal target pages on
the same WordPress site; those pages feed missing segments into the normal translation
queue. Dynamic translation requests first pass through the site’s same-origin WordPress
REST endpoint, so the API key is not exposed to browsers.

Settings synchronization sends the configured API key, site URL, WordPress-owned
routing mode and domain mappings, and the feature flags for email translation, search
translation, AMP translation, and dynamic translation. It also sends bootstrap mirrors
for source language, target languages, and automatic redirect; the authenticated
SaaS project remains authoritative for those three project-wide values.

Runtime refresh sends the configured API key and receives one atomic project snapshot
containing its version, source and target languages, automatic redirect, AI disclosure,
and automatic-translation policy, plus URL and selector exclusions, regular-expression
exclusions, translated URL-slug mappings, and active-language media URL replacements
scoped to that API key’s project. The plugin can also request the public supported-
languages list without an API key.

Starting the Visual Editor verifies its token through the project-scoped `editor-
sessions/verify` endpoint. Saving a manual translation sends the token, original
and translated text, source and target language codes, and the request URL to the
project-scoped `manual-translations` endpoint.

Deepglot returns translated text, language and quota status, and the synchronized
project configuration described above. Review the service policies before enabling
the hosted service:

 * Terms of service: https://deepglot.ai/terms
 * Privacy policy: https://deepglot.ai/privacy

## 螢幕擷圖

[[

[[

[[

[[

## 適用於區塊編輯器

這個外掛提供 1 個可供區塊編輯器使用的區塊。

 *   Deepglot Sprachschalter

## 安裝方式

 1. Upload the release ZIP under `Plugins -> Add New -> Upload Plugin`.
 2. Activate Deepglot.
 3. Create the project and its source and target languages in the Deepglot dashboard.
 4. Open `Settings -> Deepglot`, enter the API base URL and API key, then configure
    WordPress-owned routing, switcher, and exclusion settings.

## 常見問題集

### Do I need a Deepglot account?

Yes. Use an account at https://deepglot.ai or configure a compatible self-hosted
Deepglot service.

### Where do I change the source language, target languages, and automatic redirect?

Change these project-wide values in the Deepglot dashboard. After the plugin receives
an authenticated, versioned runtime snapshot, WordPress displays them as read-only
mirrors. Entering a different API key or backend temporarily unlocks the mirror 
values for a valid bootstrap request; the new project’s runtime snapshot then replaces
them.

### Does the plugin duplicate posts?

No. Translation happens on rendered output. Source content remains in the original
WordPress posts and pages.

### Can translated pages use different images?

Yes. A project manager can explicitly map an original same-site image to a localized
same-site image for each active target language through the authenticated Deepglot
project management API. The plugin updates `src`, `srcset`, `data-src`, and `data-
srcset` on translated image elements, including responsive `picture` sources. Source-
language pages and excluded content are unchanged.

Each project supports at most 500 mappings in total. Same-site image formats are
PNG, JPG, JPEG, WebP, AVIF, and GIF. Document links support PDF, DOCX, XLSX, and
PPTX; self-hosted video supports MP4 and WebM. File URLs must be root-relative or
HTTPS on the project host. Video embeds support only exact HTTPS `www.youtube.com/
embed/ID`, `www.youtube-nocookie.com/embed/ID`, and `player.vimeo.com/video/ID` 
endpoints, with an unchanged provider host and no query or fragment. Documents and
self-hosted videos must retain their file extension. External CDN images, SVG, other
iframe providers, uploads, AI-generated assets, subtitles, and dynamically inserted
AJAX media are unsupported. Project managers are responsible for all file and video
usage, publication, and redistribution rights; Deepglot does not verify licenses,
file existence, or content type. There is currently no dashboard editing interface.

The plugin refreshes runtime mappings at most every 300 seconds when a request reaches
WordPress and stores them in a dedicated non-autoloaded option. On a changed snapshot
it purges known WP Rocket, W3 Total Cache, LiteSpeed Cache, and WP Super Cache page
caches. An upstream CDN or page cache that prevents WordPress from receiving a refresh
request needs an operator purge and public readback. Missing or deleted mappings
leave the original URL in place.

### What happens when the quota is exhausted?

Cached translations remain available. Uncached content falls back to the source 
language, and administrators see a quota notice.

### What happens when Deepglot returns HTTP 429?

The plugin respects Retry-After as delta seconds or a strict RFC HTTP date, using
a bounded delay of one second to one hour and a 60-second fallback for missing, 
relative, or invalid values. The first 429 stops the remaining sequential batches;
parallel batches already in flight keep their own responses and the browser keeps
the longest delay. An active 429 marker locally stops synchronous visual-editor 
and WooCommerce email calls and already-due warmer runs until `retry_at`. Only translation
429 responses set the active marker; configuration and synchronization 429 responses
do not. The marker and warmer backoff are bound to the API key and backend. Configuration
changes, late responses from the previous configuration, and legacy or unbound markers
do not block new translations. Background warming waits for the bounded delay, and
dynamic visitor requests are not immediately retried. Cached translations remain
available while uncached content stays in the source language.

A permanent `422 velocity_request_too_large` means one request cannot fit the hourly
policy even in an empty window. The WordPress warmer automatically splits a multi-
text 422 batch under its existing six-batch run budget. Every 422 batch shape is
tracked for up to one hour by a configuration-bound HMAC fingerprint to drive bounded
splitting; only a text that still returns 422 alone is blocked from automatic resend.
The marker stores no raw translation text, API key, or URL. Normal following batches
continue, and an API key or backend change heals the marker immediately. The plugin
keeps source language content available and does not schedule an automatic timer
retry for that singleton response. API requests and PDFs must still be split into
smaller inputs by clients.

### Why can the first translated page view still show the source language?

Since version 0.12.0, ordinary page requests do not wait for a slow translation 
provider. The first view queues uncached text for an immediately due WP-Cron job
and, once both are stored, makes one non-blocking WP-Cron nudge in the same request.
The nudge is skipped for DISABLE_WP_CRON and while cron is already running. After
the job succeeds, Deepglot stores the translations locally and purges completed 
URLs in WP Rocket, W3 Total Cache, and LiteSpeed Cache. Because WP Super Cache exposes
only a global purge, Deepglot waits until the tracked queue is empty so pending 
pages stay cached. If later views remain in the source language, verify that WP-
Cron or the host’s system cron is running and purge any other page-cache plugin 
manually.

Since version 0.12.3, the text and URL queues use a versioned, checksummed ASCII-
safe storage envelope. This preserves valid Unicode, including emoji, even on legacy
WordPress option tables that cannot store four-byte UTF-8 directly. Existing queue
arrays migrate automatically; damaged queue data is rejected without being overwritten
or deleted during disabled cleanup. A separate short atomic lock couples text and
URL queue reconciliation with cache purging, and lease fencing stops stale owners
from committing only one side. Translation-provider requests remain outside that
lock. If a cold render cannot durably enqueue both sides, its source-language response
is marked non-cacheable so a later request can retry.

Since version 0.12.4, translated cache values also use a separate versioned, checksummed
ASCII-safe key space. Existing non-empty plain-string cache entries remain readable.
A cache write counts as complete only after an exact readback; failed writes stay
queued, their page cache is not purged, and inline responses remain non-cacheable
until the translation is durable. Version 0.12.8 rejects empty and whitespace-only
translations on both cache writes and reads, including legacy cache values.

Since version 0.12.5, configured cookie-consent widgets that already exist before
the footer observer starts are translated through the same bounded dynamic endpoint
without rescanning the server-rendered page. Their internal page links are localized
with the server-side routing rules and are never sent to the translation provider.
Version 0.12.6 follows WordPress core viewability for public post types, so built-
in pages remain in the multilingual sitemap while non-viewable builder content types
stay excluded. Public taxonomies must still be publicly queryable. Version 0.12.7
reads project-wide language, redirect, disclosure, and automatic-translation settings
from one authenticated, versioned SaaS snapshot. WordPress keeps valid cached translations
available when automatic generation is off, prunes obsolete warm-up work after a
language change, and prevents source-language cache-only fallbacks from entering
full-page caches under a target URL. Version 0.12.8 translates generic ARIA labels
in the page body, image title tooltips, and human-readable RSS or Atom feed titles
while excluding ordinary link metadata from provider requests, and rejects blank
translation-cache values. Version 0.12.9 adds locale-specific, same-site image replacements
for server-rendered responsive and lazy-loaded images while preserving excluded 
and unsafe content. Version 0.12.10 adds document links and supported video URLs
and embeds.

When every attempted SaaS provider returns only a count mismatch for the same multi-
text root chunk, Deepglot starts direct singleton isolation. It skips redundant 
binary intermediate shapes and retries each original text through the configured
provider chain in input order. The provider-call ceiling is chain length × (chunk
size + 1) for a multi-text root, while an original singleton gets one chain; a default
eight-text chunk with two providers therefore allows at most 18 provider calls. 
All root chunks and isolated singletons share the request-wide provider-call concurrency
cap (default 12) and a 100-second provider-work deadline. A failing parallel chunk
stops new sibling provider calls, while the WordPress warmer keeps any terminal 
remainder queued. Singleton, call-budget, and deadline mismatches remain terminal;
timeouts, authentication failures, rate limits, U+0000 output, and other malformed
responses never enter this extra isolation path.

Deepglot finishes all bounded root-chunk attempts before starting singleton work.
It collects only roots whose complete provider chains produced count mismatches;
any other terminal error still aborts siblings immediately. Before calibration, 
Deepglot compares the remaining deadline with a conservative one-wave reserve: the
fastest elapsed duration among the completed full count-mismatch root chains. If
that reserve cannot fit, no singleton provider call starts. This root-derived reserve
is used only for calibration admission and is never extrapolated across later work.
It then runs one global calibration wave containing the first `min(request-wide 
concurrency, total mismatched texts)` real singletons through their full provider
fallback chains and retains its results. If the shared deadline expires during any
admitted singleton wave despite the admission checks, Deepglot returns the same 
typed deadline error instead of a generic timeout. The remaining work is split into
request-wide bounded waves. Before each later wave, Deepglot compares `waves still
pending × duration of the immediately preceding observed singleton wave` with the
remaining shared deadline and remeasures after every completed wave. That deadline
is the earlier of the local provider-work ceiling and the caller’s monotonic absolute
deadline; the PDF route passes its route-entry 40-second deadline so authentication,
upload handling, and preparation consume the same budget. If the pending work cannot
fit, Deepglot stops after the last retained wave and before any further singleton
call. `/api/translate` and PDF return the stable 503 code `translation_count_mismatch_deadline`;
once provider work has started, the API conservatively keeps the velocity reservation
and retains an idempotent same-key 503 for at most 60 seconds. Otherwise, the remaining
affected texts continue through the same globally bounded singleton queue, preserving
result order and each text’s full provider fallback chain.

### How do I translate existing pages without opening every URL?

Under `Settings -> Deepglot`, create a URL preview with a small limit and the required
target languages, review the sample URLs, and explicitly confirm the immutable snapshot.
When WordPress recognizes a safe HTTPS request on the same host as an internal target
still stored with HTTP, the preview changes only that target’s scheme to HTTPS; 
semantic query parameters and fragments are preserved. It never copies a foreign
request host. One absolute, query-free redirect on the exact same origin and in 
the requested target language is verified through separate public and origin probes
while automatic redirect following stays disabled. Other redirects remain bounded
failures; unsafe targets do too. One batch contains at most 250 safe internal entries
from the multilingual sitemap and opens at most two target pages per cron run. The
job reports aggregate progress and can be paused, resumed, cancelled, or retried
for failed URLs. It pauses when the quota is exhausted or the API key is invalid
and automatically backs off on API rate limits. Continue large sites with the next
bounded batch. This is an explicit administrator action, not a permanent crawler.

## 使用者評論

這個外掛目前沒有任何使用者評論。

## 參與者及開發者

以下人員參與了開源軟體〈Deepglot〉的開發相關工作。

參與者

 *   [ Andreas Ostheimer ](https://profiles.wordpress.org/helpstring/)

〈Deepglot〉外掛目前已有 1 個本地化語言版本。 感謝[全部譯者](https://translate.wordpress.org/projects/wp-plugins/deepglot/contributors)
為這個外掛做出的貢獻。

[將〈Deepglot〉外掛本地化為台灣繁體中文版](https://translate.wordpress.org/projects/wp-plugins/deepglot)

### 對開發相關資訊感興趣？

任何人均可[瀏覽程式碼](https://plugins.trac.wordpress.org/browser/deepglot/)、查看
[SVN 存放庫](https://plugins.svn.wordpress.org/deepglot/)，或透過 [RSS](https://plugins.trac.wordpress.org/log/deepglot/?limit=100&mode=stop_on_copy&format=rss)
訂閱[開發記錄](https://plugins.trac.wordpress.org/log/deepglot/)。

## 變更記錄

#### 0.12.10

 * Added locale-specific PDF, DOCX, XLSX, PPTX, MP4, WebM, YouTube, YouTube-nocookie,
   and Vimeo URL replacement for server-rendered links and video embeds.
 * Preserved file URLs through language routing and purged known page caches when
   a media mapping snapshot changes.

#### 0.12.9

 * Added project- and target-language-specific same-site image replacements for 
   server-rendered media.
 * Safely rewrote regular, responsive, and lazy-loaded image URLs while preserving
   malformed or unsafe values and keeping picture-source MIME hints consistent.
 * Honored no-translate subtrees and configured class or ID exclusions for media
   replacements.

#### 0.12.8

 * Fixed source URL checks with URL synchronization configured and preserved canonical
   source exclusions when validating signed localized sync requests.
 * Preserved raw ampersands, quotes, and literal entity text in translated metadata
   and accessibility attributes on fresh and cached renders, including the visual
   editor.
 * Canonicalized equivalent internal graph identities, propagated page reachability
   with a work queue, and preserved IRI-coerced language values.
 * Collected relationship-established page IDs, recognized the official Schema.org
   context URL locally, and expanded internal compact page IRIs before routing.
 * Resolved supported Schema.org property aliases, matched scalar page references,
   and translated simple language-tagged value objects through the shared local 
   context.
 * Supported local JSON-LD type/id keyword aliases and restricted relationship and
   graph-ID inference to untyped or exclusively generic Thing references.
 * Resolved ordinary JSON-LD class aliases and localized Article subtypes and generic
   typed breadcrumb targets while preserving shared/media entities.
 * Preserved JSON-LD context definitions while resolving local Schema.org aliases,
   enriched page references, and URL/reference arrays with consistent context-aware
   traversal.
 * Supported plain-text Recipe instructions, cross-script page references, padded
   page URLs, and compact schema type IRIs in JSON-LD localization.
 * Translated Recipe ingredients and instruction text in JSON-LD, and localized 
   internal page and breadcrumb identities plus their exact graph references without
   changing shared entity, media, or external identifiers.
 * Translated generic ARIA labels in page content and image title tooltips on both
   the server and the bounded dynamic-content pass.
 * Translated human-readable RSS and Atom feed titles without sending ordinary link
   metadata to the translation provider.
 * Rejected empty and whitespace-only translations on cache writes and reads, including
   legacy plain-string values.

#### 0.12.7

 * Made the authenticated Deepglot project authoritative for source language, target
   languages, automatic redirect, AI disclosure, and automatic-translation policy
   through one versioned runtime snapshot.
 * Displayed SaaS-owned project settings as explicit read-only mirrors in wp-admin
   and rejected WordPress REST writes to source language, target languages, and 
   automatic redirect.
 * Preserved key-switch bootstrap values until the new project snapshot arrives,
   reconciled obsolete language warm-up state, kept cache hits available when fresh
   generation is disabled, and prevented target-URL caching of source-language fallbacks.

#### 0.12.6

 * Restored built-in public pages to the multilingual sitemap and URL synchronization
   inventory by following WordPress core post-type viewability.
 * Kept non-viewable builder content types, attachments, and non-queryable taxonomies
   out of multilingual discovery.

#### 0.12.5

 * Translated configured cookie-consent widgets that render before the dynamic footer
   observer starts without rescanning the normal server-rendered page.
 * Localized internal links inside dynamic widgets with the server-side routing 
   rules while keeping URLs out of translation-provider requests.
 * Excluded public but non-queryable builder content types and taxonomies from the
   multilingual sitemap and URL synchronization inventory.

#### 0.12.4

 * Preserved translated cache values containing emoji or other four-byte Unicode
   on legacy three-byte WordPress option tables.
 * Kept existing plain-string cache entries readable through a separate versioned
   key space with canonical Base64URL and key-bound integrity checks.
 * Retained failed cache writes in the background text and URL queues and prevented
   incomplete inline results from entering full-page caches.

#### 0.12.3

 * Preserved background text and URL queues containing emoji or other four-byte 
   Unicode on legacy WordPress option tables through an ASCII-safe, checksummed 
   storage envelope.
 * Kept existing queue arrays backward compatible and rejected damaged queue persistence
   without silently replacing it.
 * Coupled text and purge-target mutations with a short atomic lock while keeping
   translation-provider work outside the lock.

#### 0.12.2

 * Verified one safe same-origin canonical redirect in the requested target language
   during URL synchronization without enabling automatic redirect following.

#### 0.12.1

 * Assigned a new public asset version to the Retry-After-aware dynamic translator
   so WordPress and intermediary caches do not keep serving the older browser behavior.
 * Preserved bounded Retry-After signals on HTTP 429, stopped later sequential batches,
   and delayed warm and dynamic follow-up requests instead of immediately retrying.
 * Corrected stale same-host HTTP targets to HTTPS during URL-sync preview when 
   WordPress recognizes the current request as HTTPS, while preserving semantic 
   query parameters and fragments and never copying a foreign request host.

#### 0.12.0

 * Ordinary page rendering no longer waits for fresh translations. Uncached segments
   are translated by a background job, so the first cold view is fast and later 
   views converge after WP-Cron succeeds.
 * Added bounded, atomically locked background cache warming. Failed and partial
   results remain queued, and supported full-page caches are purged after warming
   completes.
 * Added administrator-triggered URL synchronization from a bounded internal sitemap
   snapshot, with progress, pause, resume, cancel, backpressure, retry, quota, and
   invalid-key controls.
 * Kept visual-editor previews and WooCommerce HTML emails synchronous because those
   one-off outputs cannot converge on a later page request.
 * Added the `deepglot_max_sync_batches` filter to translate inline again on fast
   providers, and `deepglot_api_timeout` to tune the request budget.

#### 0.11.7

 * Added a fail-safe final translated-HTML filter for trusted site-specific localization
   such as language-specific media embeds.

#### 0.11.6

 * Split content-heavy cold pages into ordered parallel requests bounded by 2,000
   UTF-8 source bytes and 200 strings.

#### 0.11.5

 * Extended the bounded translation request window to 60 seconds so valid cold large-
   page batches do not fall back to untranslated content.

#### 0.11.4

 * Preserved numeric-looking source-slug mappings after persistence so existing 
   translated routes remain resolvable.

#### 0.11.3

 * Hardened reciprocal canonical, hreflang, and multilingual sitemap output across
   source and translated routes.
 * Redirected stale translated slugs to current localized URLs, preserved semantic
   query routing, and suppressed source-only Avada AJAX suggestions on target-language
   pages.
 * Allowed 30 seconds for translation batches and rejected malformed provider responses
   instead of accepting partial results.

#### 0.11.2

 * Detected a revoked or invalid API key (HTTP 401) and stopped retrying it on every
   page view.
 * Added a wp-admin error notice and an “API-Key ungültig” settings status instead
   of a misleading active state.
 * Cleared the invalid-key state immediately when a new API key or backend URL is
   saved.

#### 0.11.1

 * Preserved whitespace-prefixed `mailto:` and `tel:` action links during URL rewriting.
 * Restored full-language descriptions when the switcher displays ISO-code labels.
 * Cleared WordPress.org Plugin Check errors for URL parsing, direct access, escaping,
   and translator comments.

#### 0.11.0

 * Added SaaS-managed translated URL slugs for forward and reverse request routing.
 * Added bounded runtime-config refresh and dedicated persisted slug mappings.
 * Excluded WordPress infrastructure paths from translation routing.
 * Added the refreshed Deepglot admin branding, packaged logo, and orange visual-
   editor accents.
 * Updated dashboard links and localized setup copy from deepglot.app to deepglot.
   ai.

#### 0.10.4

 * Prevented intermediary caches from preserving stale virtual `robots.txt` responses.

#### 0.10.3

 * Kept multilingual sitemap discovery when late renderers such as Yoast SEO replace`
   robots.txt` output.

#### 0.10.2

 * Preserved raw UTF-8 through DOM serialization, including emoji and umlauts in
   scripts and styles.

#### 0.10.1

 * Excluded switcher CSS from WP Rocket used-CSS and minification pipelines.

#### 0.10.0

 * Added independent switcher instances, templates, visual placement, AMP handling,
   and a multilingual sitemap.

## 中繼資料

 *  版本 **0.12.10**
 *  最後更新 **8 小時前**
 *  啟用安裝數 **少於 10 次**
 *  WordPress 版本需求 ** 6.0 或更新版本 **
 *  已測試相容的 WordPress 版本 **7.1.2**
 *  PHP 版本需求 ** 8.0 或更新版本 **
 *  語言
 * [Czech](https://cs.wordpress.org/plugins/deepglot/) 及 [English (US)](https://wordpress.org/plugins/deepglot/).
 *  [將這個外掛本地化為你的母語版本](https://translate.wordpress.org/projects/wp-plugins/deepglot)
 * 標籤:
 * [language switcher](https://tw.wordpress.org/plugins/tags/language-switcher/)
   [localization](https://tw.wordpress.org/plugins/tags/localization/)[machine translation](https://tw.wordpress.org/plugins/tags/machine-translation/)
   [multilingual](https://tw.wordpress.org/plugins/tags/multilingual/)[translation](https://tw.wordpress.org/plugins/tags/translation/)
 *  [進階檢視](https://tw.wordpress.org/plugins/deepglot/advanced/)

## 評分

這個項目尚無任何評論記錄。

[撰寫評分](https://wordpress.org/support/plugin/deepglot/reviews/#new-post)

[查看全部使用者評論](https://wordpress.org/support/plugin/deepglot/reviews/)

## 參與者

 *   [ Andreas Ostheimer ](https://profiles.wordpress.org/helpstring/)

## 技術支援

使用者可在技術支援論壇提出意見反應或使用問題。

 [檢視技術支援論壇](https://wordpress.org/support/plugin/deepglot/)