| 开发者 |
transleti
grupobouso |
|---|---|
| 更新时间 | 2026年6月8日 06:33 |
| PHP版本: | 8.0 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
<url> entries per language (the format Google explicitly documents) with self-referential hreflang and x-default. Compatible with Yoast SEO, RankMath, SEOPress, AIOSEO and the WordPress core sitemap./es/contacto/) for clean per-language SEO.©, [shortcode], and similar in translated output.transleti-translator folder to /wp-content/plugins/, or install through the WordPress plugin installer.No. The plugin is free GPL software and works fully in manual mode without any external connection or paid subscription. Automatic translation is an optional add-on that uses the Transleti API.
Yes. Without an API key the plugin runs in manual mode: language switcher, per-language slugs, hreflang sitemap and the manual / visual translation editors all work normally. You simply type translations by hand instead of having the plugin generate them.
Yes. New accounts get 7 days of full access when you sign up at https://transleti.com. No card or payment method is required to start the trial. After 7 days the API stops working unless you choose to subscribe — and even then, the plugin itself keeps working in manual mode for free, so you never lose access to your translated content.
Yes. Translation requests for every target language are fanned out in parallel, so adding more languages does not multiply the wait time. A 10-language site translates in roughly the same time window as a 2-language site.
Yes. Product titles, descriptions, short descriptions, attributes and variations are all translated automatically.
Yes. Elementor pages translate the underlying _elementor_data JSON; Gutenberg parses blocks and translates innerHTML and block attributes; classic posts translate post_content directly.
Yes. The plugin emits a separate <url> element per language in the sitemap (the format Google explicitly documents), with bidirectional hreflang and x-default. It also outputs <link rel="alternate" hreflang="..."> tags in the HTML head.
Yes. There are two ways: (1) the visual editor, which lets you click on any string in the rendered page and edit its translation in a side panel — useful for menus, buttons, widgets and theme strings that don't live in the post editor; and (2) each translated post is a standard WordPress post you can edit from the admin like any other content. Manual edits are detected and preserved during re-translation.
The plugin detects content changes via MD5 hashing and queues a re-translation. Manual edits to translations are detected and preserved (unless the source change is structural).
woocommerce_hydration_request_after_callbacks so hydrated responses are translated alongside live Store API calls.Word count type. Do not translate! hint (e.g. pt_BR returning "palavras"). Both the server-side _x() value and the client-side wp.i18n translation file entry are now sanitised back to a valid value./wc/store/v1/* without a language URL prefix from the localized React bundle. The plugin now falls back to HTTP_REFERER to detect the visitor's current language so Store API responses match the page they were requested from.window capture + pointerdown so theme menu togglers that call stopPropagation() can no longer swallow the selection click.pubDate/lastBuildDate strings in the "stuck translations" notice.language_has_translations() and find_original_slug() direct $wpdb probes with wp_cache_get / wp_cache_set (5-minute TTL, transleti cache group).phpcs:ignore comments explaining why the existing core API can't replace them.render_switcher, render_language_list) via esc_html().ob_start() callback buffer is now explicitly closed via a paired ob_end_flush() registered through register_shutdown_function() in the same function scope (frontend page buffer, AJAX response buffer, sitemap xhtml-namespace buffer).fopen/fread/fclose with WP_Filesystem::get_contents() for the diagnostic log reader.$wpdb->prepare( 'SHOW TABLES LIKE %s', ... ) (no more single-quote interpolation).$_POST reads on HTML-bearing fields to wp_kses_post( wp_unslash( ... ) ); integer reads now use absint( wp_unslash( ... ) ).check_admin_referer/wp_nonce_url) to the string-export download link.load_plugin_textdomain() call (WP 4.6+ auto-loads translations from the WP.org directory).phpcs:disable/enable blocks.<script> blocks to enqueued JS files (language switcher, editor preview).$_GET / $_POST / $_SERVER / $_COOKIE reads now go through wp_unslash() plus a context-appropriate sanitiser (sanitize_text_field, esc_url_raw).ajax_empty_language() now unslashes and sanitises the nonce before passing it to wp_verify_nonce().load_plugin_textdomain() call — translations are now auto-loaded by WordPress 4.6+ for plugins hosted in the directory.wp_redirect() to wp_safe_redirect() for additional protection against open-redirect attempts..pot template in languages/ so the Domain Path folder is present in the distributed package.<url> entry per language in the sitemap, matching Google's documented hreflang format.aioseo_sitemap_post/_term/_archive_entry/_addl_pages filters).xmlns:xhtml namespace now declared in <urlset> so <xhtml:link> alternates are valid XML./sitemap.xml no longer redirects to /en/sitemap.xml when add_subdirectory_to_default=yes.<loc> URLs now use the canonical default-language URL instead of the redirecting unprefixed permalink.%1$s placeholders and [cookie_*] shortcodes leaking to public pages.