{"id":365567,"date":"2026-09-09T03:03:18","date_gmt":"2026-09-09T03:03:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/aumlang\/"},"modified":"2026-09-09T03:50:17","modified_gmt":"2026-09-09T03:50:17","slug":"aumlang","status":"publish","type":"plugin","link":"https:\/\/de-ch.wordpress.org\/plugins\/aumlang\/","author":23467794,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.10","stable_tag":"1.0.10","tested":"7.1","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"AumLang \u2013 AI Multilingual Translation & SEO","header_author":"AumCreate","header_description":"Builder-friendly, SEO-complete multilingual translation for WordPress. By AumCreate.","assets_banners_color":"371a0f","last_updated":"2026-09-09 03:50:17","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/aumcreate.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":46,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.10":{"tag":"1.0.10","author":"aumcreate","date":"2026-09-09 03:50:17","revision":3687544},"1.0.9":{"tag":"1.0.9","author":"aumcreate","date":"2026-09-09 03:02:41","revision":3687509}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3687509,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3687509,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3687509,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3687509,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3687509,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"aumlang\/language-switcher":{"name":"aumlang\/language-switcher","title":"Language Switcher"}},"tagged_versions":["1.0.10","1.0.9"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[2993,1386,99,2333,286],"plugin_category":[45,48],"plugin_contributors":[278530],"plugin_business_model":[],"class_list":["post-365567","plugin","type-plugin","status-publish","hentry","plugin_tags-hreflang","plugin_tags-multilanguage","plugin_tags-multilingual","plugin_tags-translation","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-language-tools","plugin_contributors-aumcreate","plugin_committers-aumcreate"],"banners":{"banner":"https:\/\/ps.w.org\/aumlang\/assets\/banner-772x250.png?rev=3687509","banner_2x":"https:\/\/ps.w.org\/aumlang\/assets\/banner-1544x500.png?rev=3687509","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/aumlang\/assets\/icon.svg?rev=3687509","icon":"https:\/\/ps.w.org\/aumlang\/assets\/icon.svg?rev=3687509","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>AumLang turns your WordPress site multilingual with one-click AI translation that keeps your page builder layouts intact. It uses the AI client that ships with WordPress 7.0, so on a site that already has a provider connected there is nothing to configure and no key to enter.<\/p>\n\n<p><strong>Highlights<\/strong><\/p>\n\n<ul>\n<li><strong>Builder-aware translation.<\/strong> Elementor and Gutenberg pages are translated automatically \u2014 text only, layout and styles untouched. Custom widgets and repeaters are detected from the builder's own type system, with zero per-widget configuration.<\/li>\n<li><strong>One-click, fully automatic.<\/strong> Translate a post, page or product and AumLang handles the title, content, excerpt, categories, tags and more.<\/li>\n<li><strong>SEO complete.<\/strong> Per-language URLs (\/zh\/\u2026), hreflang alternates, per-language canonical, and a multilingual XML sitemap.<\/li>\n<li><strong>Glossary.<\/strong> Pin how key terms are translated (e.g. keep a brand name, force \"post\" \u2192 a chosen term) so AI output stays consistent and on-brand.<\/li>\n<li><strong>Interface string translation.<\/strong> Capture the theme\/plugin interface strings your visitors actually see and translate them on demand \u2014 and pull official WordPress.org language packs automatically.<\/li>\n<li><strong>Taxonomy translation.<\/strong> Categories, tags and custom taxonomies get per-language versions, with translated archives and language-filtered term lists.<\/li>\n<li><strong>Language switcher.<\/strong> Shortcode, template tag, block and widget \u2014 drop it anywhere.<\/li>\n<li><strong>Navigation menus.<\/strong> One menu serves every language; items auto-switch to their translation.<\/li>\n<li><strong>WooCommerce.<\/strong> Products, product categories, tags, brands and attributes are translated, and the full product data (price, stock, gallery) is carried over so the translation stays a working product.<\/li>\n<\/ul>\n\n<p>Either way the AI account is yours, so translation cost is under your control \u2014 no per-translation fees, no quotas from us, and no account with us of any kind.<\/p>\n\n<h4>Translation engines<\/h4>\n\n<p>AumLang prefers the AI client that ships with WordPress 7.0, and new installs use it by default. The site owner connects a provider once under <strong>Settings &gt; Connectors<\/strong>; this plugin then sends only the text to be translated, holds no API key of its own, and shares that one connection with every other plugin on the site.<\/p>\n\n<p>A direct connection is also offered, because the connectors WordPress ships cover Anthropic, Google and OpenAI, and a site whose network cannot reach any of those still needs a way to translate. It is entirely opt-in and requires your own key.<\/p>\n\n<h4>External Services<\/h4>\n\n<p>Nothing leaves your site until you pick an engine and start a translation. The plugin has no account with us, sends no telemetry, and makes no request on its own.<\/p>\n\n<p><em>Using the WordPress AI Client:<\/em> the text being translated goes to whichever provider the site owner connected under Settings &gt; Connectors. WordPress owns that connection and its credentials; the terms that apply are those of the provider chosen there.<\/p>\n\n<p><em>Using the direct connection:<\/em> the plugin is a client for the OpenAI-compatible chat API, so it can talk to any service implementing it. It sends the strings being translated together with the source and target language, and nothing else. You supply the endpoint, the model and the key; presets are offered purely to fill the endpoint and model fields for services people commonly use:<\/p>\n\n<ul>\n<li>DeepSeek - https:\/\/api.deepseek.com - <a href=\"https:\/\/cdn.deepseek.com\/policies\/en-US\/deepseek-terms-of-use.html\">Terms<\/a> | <a href=\"https:\/\/cdn.deepseek.com\/policies\/en-US\/deepseek-privacy-policy.html\">Privacy<\/a><\/li>\n<li>OpenAI - https:\/\/api.openai.com - <a href=\"https:\/\/openai.com\/policies\/row-terms-of-use\">Terms<\/a> | <a href=\"https:\/\/openai.com\/policies\/privacy-policy\">Privacy<\/a><\/li>\n<li>OpenRouter - https:\/\/openrouter.ai - <a href=\"https:\/\/openrouter.ai\/terms\">Terms<\/a> | <a href=\"https:\/\/openrouter.ai\/privacy\">Privacy<\/a><\/li>\n<\/ul>\n\n<p>Choosing a preset changes two text fields; it does not contact anything. Any other compatible endpoint can be entered by hand, in which case its operator's terms are the ones that apply.<\/p>\n\n<p>Text that has already been translated is served from your own database and never leaves the site again.<\/p>\n\n<h3>External and bundled resources<\/h3>\n\n<p>This plugin bundles <strong>flag-icons<\/strong> 7.2.3 by Panayiotis Lipiridis, unmodified, as the flag images in\n    src\/assets\/flags\/. It is licensed MIT; the licence text ships alongside them in\n    src\/assets\/flags\/LICENSE.txt.<\/p>\n\n<ul>\n<li>Source: https:\/\/github.com\/lipis\/flag-icons<\/li>\n<\/ul>\n\n<p>The plugin makes <strong>no requests to any external service<\/strong> to render a switcher: the flags are served\nfrom this plugin's own directory.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>aumlang<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin ZIP via Plugins \u2192 Add New \u2192 Upload.<\/li>\n<li>Activate the plugin through the Plugins screen.<\/li>\n<li>Make sure pretty permalinks are enabled (Settings \u2192 Permalinks) \u2014 language URLs like <code>\/zh\/<\/code> require them.<\/li>\n<li>Go to the AumLang settings screen and add your languages. Leave the translation engine on \"WordPress AI Client\" if a provider is already connected under Settings &gt; Connectors; otherwise switch it to the direct connection and enter your own endpoint, model and key.<\/li>\n<li>Open any post, page or product and use the AumLang panel to translate it.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20an%20api%20key%3F\"><h3>Do I need an API key?<\/h3><\/dt>\n<dd><p>Not if WordPress already has one. AumLang's default engine is the AI client built into WordPress 7.0, which uses the provider connected under Settings &gt; Connectors \u2014 that connection belongs to WordPress, is shared with every other plugin, and this plugin never sees the key.<\/p>\n\n<p>You need your own key only for the second engine, the direct connection. It exists because the connectors WordPress ships cover Anthropic, Google and OpenAI, and a site whose network cannot reach any of those still needs a way to translate. It speaks the OpenAI-compatible chat API, so any service implementing it will do; you supply the endpoint, the model and the key, and the AI account is yours either way.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20elementor%20and%20gutenberg%3F\"><h3>Does it work with Elementor and Gutenberg?<\/h3><\/dt>\n<dd><p>Yes. AumLang reads each builder's own structure, translating only the text and leaving layout, styles and design untouched \u2014 including custom widgets.<\/p><\/dd>\n<dt id=\"will%20it%20translate%20woocommerce%20products%3F\"><h3>Will it translate WooCommerce products?<\/h3><\/dt>\n<dd><p>Yes \u2014 product title, description, short description, categories, tags, brands and attributes, while carrying over price, stock and gallery so the translation remains a complete product. Multi-currency is intentionally out of scope; pair AumLang with a dedicated currency plugin if you need it.<\/p><\/dd>\n<dt id=\"how%20do%20visitors%20switch%20language%3F\"><h3>How do visitors switch language?<\/h3><\/dt>\n<dd><p>Add the language switcher via the <code>[aumlang_language_switcher]<\/code> shortcode, the block, the widget, or the <code>aumlang_language_switcher()<\/code> template tag.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.10<\/h4>\n\n<ul>\n<li>Renamed for the plugin directory: the listing title now says what the plugin does. No functional change.<\/li>\n<\/ul>\n\n<h4>1.0.9<\/h4>\n\n<ul>\n<li>Renamed the ACF integration class and its file from <code>Acf<\/code> to <code>AcfFields<\/code>, so a file called <code>Acf.php<\/code> can no longer be read as a bundled copy of Advanced Custom Fields. No behaviour changes: the class has always been ours, and it still does nothing unless ACF is active.<\/li>\n<\/ul>\n\n<h4>1.0.8<\/h4>\n\n<ul>\n<li>Interface-string discovery no longer opens an output buffer of its own. It subscribes to the template enhancement buffer WordPress 6.9 added, which core opens and closes itself, so this plugin leaves nothing on the buffer stack and never touches a buffer belonging to something else. On WordPress older than 6.9 the discovery toggle is disabled and says so; importing from a .pot file and the automatic language packs are unaffected.<\/li>\n<li>Removed the Moonshot (Kimi) preset. Its published terms and privacy pages now redirect to an unrelated page, so there is no document left to link to. Moonshot remains usable through the custom endpoint like any other OpenAI-compatible service.<\/li>\n<\/ul>\n\n<h4>1.0.7<\/h4>\n\n<ul>\n<li>The readme described a plugin that needs your own API key, which stopped being true when the WordPress AI Client became the default engine. Rewritten so the description, the install steps and the FAQ all say the same thing: the client built into WordPress 7.0 is the default and needs no key, and the direct connection is the opt-in fallback for a site that cannot reach the providers WordPress ships connectors for.<\/li>\n<li>The output buffer used by interface-string discovery is now closed explicitly on <code>shutdown<\/code> instead of being left for PHP to flush at the end of the request. Nothing about discovery changes; the buffer stack the plugin hands back is now the one it was given.<\/li>\n<\/ul>\n\n<h4>1.0.6<\/h4>\n\n<ul>\n<li>The switcher can show flags. Two new display styles, \"Flag only\" and \"Flag + language name\", in every place the switcher appears: the floating overlay, the menu location, the widget, the block and the shortcode.<\/li>\n<li>The flag comes from the locale's country, not from the language code \u2014 <code>en<\/code> is neither the British nor the American flag, but <code>en_GB<\/code> and <code>en_US<\/code> are. A language registered without a country simply shows no flag rather than a guessed one.<\/li>\n<li>The flags are SVG files bundled with the plugin, not emoji. Windows ships no flag emoji font and renders them as two letters, and letting WordPress substitute its own emoji images means a request to s.w.org for every flag on every page view \u2014 and a broken image on a site with no route to the internet. Nothing is fetched from anywhere but this plugin.<\/li>\n<li>A flag is decorative: it is <code>aria-hidden<\/code> and the language name is still announced, because a flag is a country and not a language. New <code>aumlang_flag_html<\/code> filter for sites that want to supply their own images.<\/li>\n<li>New <code>aumlang_render_floating_switcher<\/code> filter so a theme that places the switcher itself can stand the floating one aside. Without it the two are fixed to the same corner and overlap.<\/li>\n<\/ul>\n\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Fixed: a translation could be saved with the source text in it, silently. Models sometimes echo their input back, and an echo passes every structural check \u2014 the right number of strings, in the right order, valid JSON \u2014 so untranslated text was written into the translation with no error anywhere. Echoed batches are now treated as a failure and retried, and the prompt says so explicitly.<\/li>\n<li>A custom field that failed to translate now says so in the log instead of being swallowed.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed: on a translated page the document title, <code>rel=canonical<\/code> and <code>body_class()<\/code> still described the source post \u2014 the body was in one language and the <code>&lt;title&gt;<\/code> in another, and the canonical told search engines the translation was a duplicate of the original. Anything reading the queried object, including every SEO plugin, was affected.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>The featured image is now copied to the translation. Nothing carried it before, so translated posts lost their image in every card, archive and share preview.<\/li>\n<li>Custom field values that are data rather than language \u2014 colours, ids, urls, dates, email addresses, serialized arrays \u2014 are copied but no longer sent to the translator. New <code>aumlang_translate_meta_value<\/code> filter to override per key.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fixed: with a language prefix in the URL, everything except single posts and pages 404'd. Post type archives, taxonomy, date and author archives and search were all given the front page's id and resolved as a page. <code>\/{lang}\/<\/code> and <code>\/{lang}\/{page}\/<\/code> worked, which is why this was easy to miss.<\/li>\n<li>Fixed: <code>\/{lang}\/<\/code> was answered with a 301 to the unprefixed home page, so the translated front page could not be reached. Core's canonical redirect now stands aside for language-prefixed URLs only.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Added the <code>aumlang_register_parsers<\/code> action so other plugins can add a content parser. A builder that stores its layout outside <code>post_content<\/code> is invisible to the built-in parsers and translates as an empty page; this is the supported way to teach AumLang about one.<\/li>\n<li>A parser that throws while deciding whether it supports a post is now skipped instead of taking the translation screen down with it.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release: builder-aware AI translation, SEO (URLs\/hreflang\/canonical\/sitemap), glossary, interface-string translation, taxonomy translation, language switcher, menu translation, and WooCommerce product translation.<\/li>\n<\/ul>","raw_excerpt":"Builder-friendly, SEO-complete AI multilingual translation. One-click page translation that preserves your Elementor and Gutenberg layouts.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/365567","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=365567"}],"author":[{"embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/aumcreate"}],"wp:attachment":[{"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=365567"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=365567"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=365567"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=365567"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=365567"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=365567"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}