| 开发者 | simplepotranslate |
|---|---|
| 更新时间 | 2026年6月17日 03:53 |
| PHP版本: | 8.0 及以上 |
| WordPress版本: | 7.0 |
| 版权: | GPLv2 or later |
| 版权网址: | 版权信息 |
.po/.mo files without touching a single line of your theme or plugin code.
Unlike generic AI translators, SimplePoTranslate is built for gettext: it is designed to keep placeholders (%s, %1$s), HTML tags, and plural forms intact, so your strings stay valid after translation.
Why developers and agencies choose it:
.po, .pot, and untranslated projects, with 3-layer name resolution that handles non-standard slugs (e.g. ACF Pro).%s, %1$s), HTML tags, and plural forms during translation..pot template..po; an automatic backup is taken before every import and the .mo is compiled for you.simplepo-translator folder to the /wp-content/plugins/ directory, or install the plugin through the WordPress plugins screen directly.No. Your original theme and plugin files are never touched. Translations are written to the plugin's own uploads directory (wp-content/uploads/simplepo-translator/), and a built-in loader makes WordPress use them while the plugin is active. If you want the translations to keep loading even after the plugin is removed, use Settings → Copy translations to WordPress system directory to copy them into wp-content/languages/ (see the next FAQ for details).
The plugin stores its working translations in its own uploads directory (wp-content/uploads/simplepo-translator/), and a built-in translation loader redirects WordPress lookups there while the plugin is active. If you deactivate or remove the plugin, that loader no longer runs, so translations in the uploads directory will stop loading.
To keep your translations working after the plugin is removed, open SimplePoTranslate → Settings and click Copy translations to WordPress system directory before deactivating. This copies every translation into wp-content/languages/plugins/ and wp-content/languages/themes/, where WordPress loads them natively — no plugin required.
No. You can use the manual translation mode for free — download PO files, translate them with any external tool, and upload them back. An API key is only needed for the automated translation feature.
The plugin works with standard PO (Portable Object) and MO (Machine Object) files, which are the standard translation format for WordPress.
Yes. When using the API translation mode, you can select multiple target languages and the plugin will process them all in a single operation.
Yes. Before importing any translation, the plugin automatically creates a .bak backup of the existing PO file.
The official translation project lives at translate.wordpress.org/projects/wp-plugins/simplepo-translator/. Once a locale is approved by the WordPress Polyglots community, WordPress automatically installs the language pack on your site — no extra step required. If your locale is not yet translated and you would like the plugin's UI in your language right now, you can use SimplePoTranslate on its own POT file:
simplepo-translator.pot row and click Auto Translate (with an API key) or download it for manual translation..po/.mo lands in your uploads directory and the plugin's UI switches to your language immediately..po/.mo outside the plugin's own uploads directory via a crafted X-Domain header in an uploaded/translated file..po/.mo files elsewhere in the site..po file could otherwise trigger when an admin opened it for editing..po files, which previously could be mis-parsed as a single block.\n escapes) instead of being flattened or producing a malformed entry.wp-content/ before being saved..po files (e.g. a bundled en_US.po shipped by some plugins) are no longer treated as "untranslated" work. English is the source language and is intentionally not a translation target, so such files now show a neutral Source badge instead of a misleading 0%, are excluded from the "Has untranslated" group label, the menu status dot, the dashboard "all translated" check, and no longer offer an Auto Translate (wrench) action that would just error out. You can still open them in the String Editor to override the original wording. Auto Translate to en_US was already rejected server-side; this cleans up the confusing UI around it.load_textdomain_mofile, pre_load_textdomain, override_load_textdomain) and PO/MO handling were verified against WordPress 7.0's internationalization pipeline; no changes were required. Verified clean on PHP 8.0 through 8.5.#, flag line listed fuzzy after another flag (e.g. #, php-format, fuzzy) did not actually clear the fuzzy flag, so the entry kept re-appearing as fuzzy. The flag is now removed regardless of its position. The same hardening was applied to the import/merge path, and in both places a msgid or translation that literally contains the word "fuzzy" is never altered.wp config shuffle-salts). Previously the key silently became unreadable and Auto Translate failed with a confusing "No API key" error; now you get a clear prompt to re-enter it.SIMPLEPO_DISABLE_IMPORT_LOG or add the simplepo_import_logging filter); it remains on by default so failures stay greppable in debug.log.Cannot modify header information PHP warning that could appear in debug.log on sites running with WP_DEBUG enabled. The plugin's admin pages now check headers_sent() before emitting the LiteSpeed cache-bypass header, so the header is sent when possible and quietly skipped when output has already begun (no functional impact either way)..po/.mo written into the plugin uploads directory — e.g. after a PHP timeout, memory-limit exhaustion during ZIP extraction, or the browser tab being closed mid-import. Previously the affected job became an invisible "zombie" (status marked completed but no file on disk, hidden from the Translations page). v1.0.5 keeps the download URL on the row until the write is confirmed, wraps the entire import pipeline in try/catch so any fatal surfaces as a Failed row with an error message, and uses a transient lock to prevent duplicate imports.wp-content/debug.log with a [SimplePoTranslate import] prefix, making failure diagnosis straightforward.Localization::$l10n cache and an {locale}.mo filename convention). The plugin does not write outside the uploads directory to support them; instead, after the third-party plugin has finished booting, we read our own uploads .mo and replace their in-memory translation cache via PHP reflection so our translations take effect on the frontend. The shim is scoped to one class, wrapped in try/catch, and a silent no-op on sites without Smart Slider 3 installed.WP_PLUGIN_DIR, WP_CONTENT_DIR, WP_LANG_DIR, and WPINC). All filesystem paths are now derived from plugin_dir_path( __FILE__ ) and the public wp_upload_dir() / get_theme_root() APIs, which work correctly under relocated wp-content layouts, symlinked plugins, and Bedrock-style installs..po files from any scanned location. When you edit a file stored in a plugin/theme bundle directory or in the v1.0.1 legacy system directory (wp-content/languages/), the plugin automatically copies it into the plugin uploads working area on first edit — your edits live there, the original file is never modified.[SimplePoTranslate import] log line to WordPress's error log, so the cause of any future import failure can be inspected with a single grep..pot, .po, and .mo files are now written exclusively to wp-content/uploads/simplepo-translator/ (per WordPress.org plugin team guidance). The plugin no longer writes to wp-content/languages/ or any plugin/theme bundle directory during normal operation.load_textdomain_mofile and pre_load_textdomain filters to the uploads location, so plugins with custom translation loaders (e.g. Smart Slider 3) continue to work.wp-content/languages/plugins/ and wp-content/languages/themes/. Click this before deactivating or removing the plugin if you want your translations to keep loading afterwards. This is the only code path that writes outside the uploads area, and it runs only when the administrator explicitly triggers it.wp-content/uploads/simplepo-translator/backups/ (rotated per-file, 5 most recent kept).SimplePOTranslator\Paths); direct WP_PLUGIN_DIR / WP_CONTENT_DIR references reduced to 3 security/enumeration call sites with inline justifications.wp-content/languages/plugins/ remain loadable but are read-only in the editor — re-import them to move into the new location.wp-content/languages/ files are preserved in case WordPress core / GlotPress language packs share the directory..pot files are now written to the WordPress system translations directory (wp-content/languages/plugins/ or wp-content/languages/themes/) so they survive plugin and theme updates..po/.mo files from the Auto Translate API are always routed to the WordPress system translations directory; removed a fallback that could write to a plugin's bundle folder when a locale could not be derived.wp-content/languages/ or files discovered by a prior scan.