{"id":2255,"date":"2026-06-28T13:34:19","date_gmt":"2026-06-28T10:34:19","guid":{"rendered":"https:\/\/allinonewpsettings.com\/blog\/?p=2255"},"modified":"2026-10-18T05:20:22","modified_gmt":"2026-10-18T02:20:22","slug":"wordpress-plugin-translations-not-showing-causes-and-fixes","status":"publish","type":"post","link":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/","title":{"rendered":"WordPress Plugin Translations Not Showing: Causes and Fixes"},"content":{"rendered":"<p>You translated a plugin, your file is on the server, and your screen still shows English. Nothing is broken in the usual sense. WordPress looks for one file per plugin, chosen by your language, by the file name and by the folder. If one of the three is off by a single character, it says nothing and shows you English.<\/p>\n<p>So don&#8217;t edit your translation yet. First find out which file WordPress is really reading for you, or whether it reads any at all. Every check below was run on a test site, with a small plugin that tags each string with the file it came from, so you can see what each mistake looks like.<\/p>\n<div class=\"aiows-article-toc\" style=\"margin: 28px 0; padding: 20px 22px; border: 1px solid #dcdcde; border-radius: 12px; background: #fafafa;\"><strong style=\"display: block; margin-bottom: 10px; font-size: 18px;\">Table of contents<\/strong><\/p>\n<ol style=\"margin: 0 0 0 20px;\">\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#which-language\">Which language is WordPress asking for?<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#file-name\">Is the file named for exactly that language?<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#language-pack\">A file in wp-content\/languages wins<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#l10n-php\">The .l10n.php file beside it<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#javascript\">Strings from JavaScript need their own file<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#too-early\">Code that translates too early<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#verification\">Verification<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#aiows\">AIOWS Language Compiler<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#faq\">FAQ<\/a><\/li>\n<li><a style=\"color: inherit; text-decoration: underline; text-underline-offset: 2px;\" href=\"#official-sources\">Sources<\/a><\/li>\n<\/ol>\n<\/div>\n<h2 id=\"which-language\" style=\"scroll-margin-top: 96px;\">Which language is WordPress asking for?<\/h2>\n<p>WordPress keeps two language settings, and your admin screens follow the one you may not think of:<\/p>\n<div class=\"aiows-article-table\" style=\"margin: 16px 0; overflow-x: auto;\">\n<table style=\"width: 100%; border-collapse: collapse;\">\n<thead>\n<tr>\n<th style=\"text-align: left; padding: 8px 10px; border: 1px solid #dcdcde; background: #fafafa;\" scope=\"col\">Setting<\/th>\n<th style=\"text-align: left; padding: 8px 10px; border: 1px solid #dcdcde; background: #fafafa;\" scope=\"col\">Where you find it<\/th>\n<th style=\"text-align: left; padding: 8px 10px; border: 1px solid #dcdcde; background: #fafafa;\" scope=\"col\">What it controls<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Site language<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\"><strong>Settings<\/strong> > <strong>General<\/strong> > <strong>Site Language<\/strong><\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">your public pages<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Your profile language<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\"><strong>Users<\/strong> > <strong>Profile<\/strong> > <strong>Language<\/strong><\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">every admin screen you see<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Set your site to German and your own profile to English, and you get what the test site showed: the plugin&#8217;s admin page in English, with a correct German file in place.<\/p>\n<figure class=\"aiows-article-figure\" style=\"margin: 28px 0;\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-8749\" style=\"display: block; max-width: 100%; height: auto; border: 1px solid #dcdcde; border-radius: 12px;\" src=\"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s02-profile-english.webp\" alt=\"The test page with an English profile language: every string is English, although a German file is installed.\" width=\"2220\" height=\"656\" \/ fetchpriority=\"high\" loading=\"eager\" srcset=\"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s02-profile-english.webp 2220w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s02-profile-english-300x89.webp 300w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s02-profile-english-1024x303.webp 1024w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s02-profile-english-768x227.webp 768w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s02-profile-english-1536x454.webp 1536w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s02-profile-english-2048x605.webp 2048w\" sizes=\"(max-width: 2220px) 100vw, 2220px\" \/><figcaption style=\"margin: 8px 0 0; font-size: 14px; line-height: 1.5; color: #50575e;\">Your profile language English: your admin stays English, whatever the site language says.<\/figcaption><\/figure>\n<p>If your profile says <strong>Site Default<\/strong>, it follows the site language. If it names a language, that one wins on your admin screens, and only for you. Another administrator can see the same screen in a different language.<\/p>\n<h2 id=\"file-name\" style=\"scroll-margin-top: 96px;\">Is the file named for exactly that language?<\/h2>\n<p>A plugin&#8217;s translation file is named <code>text-domain-locale.mo<\/code>. The text domain is the plugin&#8217;s own identifier, normally its folder name. The locale is the full code WordPress uses, with no shortening:<\/p>\n<div class=\"aiows-article-table\" style=\"margin: 16px 0; overflow-x: auto;\">\n<table style=\"width: 100%; border-collapse: collapse;\">\n<thead>\n<tr>\n<th style=\"text-align: left; padding: 8px 10px; border: 1px solid #dcdcde; background: #fafafa;\" scope=\"col\">Your language setting<\/th>\n<th style=\"text-align: left; padding: 8px 10px; border: 1px solid #dcdcde; background: #fafafa;\" scope=\"col\">File WordPress looks for<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">English (United States)<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">none, English is built in<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Deutsch<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\"><code>my-plugin-de_DE.mo<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Deutsch (Sie)<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\"><code>my-plugin-de_DE_formal.mo<\/code><\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">T\u00fcrk\u00e7e<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\"><code>my-plugin-tr_TR.mo<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Two results from the test site show you how literal this is: &#8211; <strong>A file named <code>-tr.mo<\/code> is ignored.<\/strong> With your language set to Turkish and   only <code>i18n-lab-tr.mo<\/code> in place, your page stays English. Rename it to   <code>i18n-lab-tr_TR.mo<\/code>, and it turns Turkish. &#8211; <strong>There is no fallback between German variants.<\/strong> With <strong>Deutsch (Sie)<\/strong>   set and only a <code>de_DE<\/code> file, your page is English. A <code>de_DE_formal<\/code> file   fixes it.<\/p>\n<p>If your plugin ships only <code>de_DE<\/code> and your site runs <strong>Deutsch (Sie)<\/strong>, copy its <code>de_DE<\/code> files under the <code>de_DE_formal<\/code> name. Your readers get the informal form, but they get German.<\/p>\n<h2 id=\"language-pack\" style=\"scroll-margin-top: 96px;\">A file in wp-content\/languages wins<\/h2>\n<p>There are two places a plugin&#8217;s translation can come from: &#8211; <code>wp-content\/languages\/plugins\/<\/code>, where WordPress puts the language packs it   downloads from translate.wordpress.org; &#8211; the plugin&#8217;s own <code>languages<\/code> folder, which only counts if the plugin tells   WordPress about it with <code>load_plugin_textdomain()<\/code>.<\/p>\n<p><strong>WordPress checks <code>wp-content\/languages\/plugins\/<\/code> first.<\/strong> Put the same string in both places, tagged by origin, and your page shows the language pack&#8217;s version. Edit the plugin&#8217;s own file as often as you like: nothing changes.<\/p>\n<figure class=\"aiows-article-figure\" style=\"margin: 28px 0;\"><img loading=\"eager\" fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-8750\" style=\"display: block; max-width: 100%; height: auto; border: 1px solid #dcdcde; border-radius: 12px;\" src=\"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s03-global-wins.webp\" alt=\"The test page: the PHP string shows the language pack&#x27;s copy, the script&#x27;s string is English.\" width=\"2220\" height=\"656\" srcset=\"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s03-global-wins.webp 2220w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s03-global-wins-300x89.webp 300w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s03-global-wins-1024x303.webp 1024w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s03-global-wins-768x227.webp 768w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s03-global-wins-1536x454.webp 1536w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-s03-global-wins-2048x605.webp 2048w\" sizes=\"(max-width: 2220px) 100vw, 2220px\"  \/><figcaption style=\"margin: 8px 0 0; font-size: 14px; line-height: 1.5; color: #50575e;\">The language pack wins, and your plugin folder&#8217;s JavaScript file stops being read.<\/figcaption><\/figure>\n<p>The reverse also holds. If your plugin never calls <code>load_plugin_textdomain()<\/code>, it is translated only from <code>wp-content\/languages\/plugins\/<\/code>. Your file in its own folder stays English until you move it there.<\/p>\n<p>Language packs come from translate.wordpress.org. A plugin gets its first pack in a language only once 90 % of its stable strings are translated there. Below that, the partial translation you can see on translate.wordpress.org does not reach your site.<\/p>\n<p>How to compile a corrected file, and where to put it, is in <a href=\"https:\/\/allinonewpsettings.com\/blog\/how-to-compile-wordpress-po-files-into-mo-files\/\" target=\"_blank\" rel=\"noopener noreferrer\">how to compile WordPress PO files into MO files<\/a>.<\/p>\n<h2 id=\"l10n-php\" style=\"scroll-margin-top: 96px;\">The .l10n.php file beside it<\/h2>\n<p>Since WordPress 6.5, a <code>.l10n.php<\/code> file with the same name as your <code>.mo<\/code> file is loaded instead of it. On the test site, a <code>.l10n.php<\/code> beside the language pack&#8217;s <code>.mo<\/code> won. So did one with no <code>.mo<\/code> next to it.<\/p>\n<p>If you edit and recompile a <code>.mo<\/code> file and nothing changes, look for a <code>.l10n.php<\/code> of the same name. Regenerate it from your PO file with <code>wp i18n make-php<\/code>, or delete it so the <code>.mo<\/code> file is read.<\/p>\n<p>One difference catches people out. <code>msgfmt<\/code> leaves entries marked fuzzy out of the <code>.mo<\/code> file, so they stay English. <code>wp i18n make-php<\/code> in WP-CLI 2.12.0 kept the fuzzy entry, and the test page showed its unconfirmed translation. Clear the fuzzy flags you mean to keep before you build your PHP file, and leave the others untranslated.<\/p>\n<h2 id=\"javascript\" style=\"scroll-margin-top: 96px;\">Strings from JavaScript need their own file<\/h2>\n<p>Text that a script writes into your page never touches the <code>.mo<\/code> file. You need a JSON file named after the text domain, the locale and the MD5 hash of the script&#8217;s path inside the plugin, for example <code>my-plugin-de_DE-0a1b2c\u2026.json<\/code>. <code>wp i18n make-json<\/code> writes it from your PO file, and your plugin must call <code>wp_set_script_translations()<\/code>.<\/p>\n<p>Two results from the test site are worth knowing: &#8211; <strong>Without the JSON file<\/strong>, your PHP string is German and your script&#8217;s string   English, on the same screen. &#8211; <strong>With a language pack present<\/strong>, your JSON file in the plugin&#8217;s own folder   is ignored, and your script&#8217;s string falls back to English. Put the JSON   file next to the file that wins.<\/p>\n<p>If your screen is half translated and half English, start here.<\/p>\n<h2 id=\"too-early\" style=\"scroll-margin-top: 96px;\">Code that translates too early<\/h2>\n<p>Since WordPress 6.7, a plugin that asks for a translation before the <code>init<\/code> action triggers a notice in your debug log:<\/p>\n<pre><code>Translation loading for the my-plugin domain was triggered too early.\nThis is usually an indicator for some code in the plugin or theme running\ntoo early. Translations should be loaded at the init action or later.<\/code><\/pre>\n<p>Turn on <code>WP_DEBUG_LOG<\/code> and search your <code>wp-content\/debug.log<\/code> for the plugin&#8217;s text domain.<\/p>\n<p>On the test site, a string translated while the plugin&#8217;s file was loading stayed English, while the rest of your page was German. Your log has the notice.<\/p>\n<p>You cannot fix this one with a file. Send the notice to the plugin&#8217;s author: the fix is to move that code to <code>init<\/code> or later.<\/p>\n<h2 id=\"verification\" style=\"scroll-margin-top: 96px;\">Verification<\/h2>\n<p>You have found the cause when you can name the file that serves the string, and removing it changes the screen.<\/p>\n<div class=\"aiows-article-table\" style=\"margin: 16px 0; overflow-x: auto;\">\n<table style=\"width: 100%; border-collapse: collapse;\">\n<thead>\n<tr>\n<th style=\"text-align: left; padding: 8px 10px; border: 1px solid #dcdcde; background: #fafafa;\" scope=\"col\">Check<\/th>\n<th style=\"text-align: left; padding: 8px 10px; border: 1px solid #dcdcde; background: #fafafa;\" scope=\"col\">Expected<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Open the screen with your profile language set to the language that fails<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">The language you expect. If not, see <a href=\"#which-language\">the first section<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Rename the file you believe is serving, for example to <code>.mo.off<\/code>, and reload<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\"><strong>Must change.<\/strong> The text falls back to English, or to another file&#8217;s version.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Put the name back and reload<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">The translation returns.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Check one PHP string and one JavaScript string on the same screen<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Both translated. If only one is, see <a href=\"#javascript\">JavaScript<\/a>.<\/td>\n<\/tr>\n<tr>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">Search <code>debug.log<\/code> for the text domain<\/td>\n<td style=\"padding: 8px 10px; border: 1px solid #dcdcde; vertical-align: top;\">No &#8220;triggered too early&#8221; line.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>The rename is the check that settles it for you. On the test site, renaming the language pack&#8217;s <code>.mo<\/code> switched the text to the plugin folder&#8217;s version. The file you were editing had never been the one on your screen.<\/p>\n<p>If nothing changes when you rename your file, WordPress was not reading it. Look for a <code>.l10n.php<\/code> file, a second copy in another folder, or a page cache serving you an older copy.<\/p>\n<p>When you rename the only <code>.mo<\/code> file, your PHP string turns English while your script&#8217;s string stays German. Each kind of string has its own file, so you check each one.<\/p>\n<section class=\"aiows-blog-cta\" style=\"margin: 38px 0; padding: 28px; border: 1px solid #cddcff; border-radius: 16px; background: #f6f9ff;\" aria-labelledby=\"aiows\">\n<p style=\"margin: 0 0 8px; font-size: 13px; font-weight: 800; letter-spacing: .05em; color: #1746a2;\">How AIOWS helps:<\/p>\n<h2 id=\"aiows\" style=\"margin: 0 0 14px; scroll-margin-top: 96px;\">AIOWS Language Compiler<\/h2>\n<p>Language Compiler handles your AIOWS translations, and AIOWS loads them differently from the plugin in this article, so the traps above work out differently for you.<\/p>\n<p><strong>It reads its own folder first, on purpose.<\/strong> For the languages it ships, German and Turkish, AIOWS loads the file in its own <code>languages<\/code> folder and puts it in place of any language pack for its text domain in <code>wp-content\/languages\/plugins\/<\/code>. An older pack there cannot hide strings a new AIOWS version shipped. On the test site, a planted pack with a different label, <code>.mo<\/code> and <code>.l10n.php<\/code>, changed nothing on your AIOWS screens.<\/p>\n<p><strong>It does not leave you in English on Deutsch (Sie).<\/strong> For a German locale it has no file for, such as <code>de_DE_formal<\/code>, AIOWS gives you its <code>de_DE<\/code> translation.<\/p>\n<p><strong>It shows you what is missing.<\/strong> The Scan tab compares AIOWS&#8217;s code with each of your PO files. It reports translated, empty, duplicate and missing entries per locale. Read your Empty and Missing columns: they name what is missing, and the coverage figure never rounds a missing string up to 100 %.<\/p>\n<p><strong>It compiles safely without msgfmt.<\/strong> Compile turns your AIOWS PO files into MO files, with GNU <code>msgfmt<\/code> if your server allows it, otherwise with its own compiler. Both leave fuzzy and untranslated entries out, so an unfinished string shows you English, never a blank.<\/p>\n<figure class=\"aiows-article-figure\" style=\"margin: 28px 0;\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-8751 aiows-lazy\" style=\"display: block; max-width: 100%; height: auto; border: 1px solid #dcdcde; border-radius: 12px;aspect-ratio:2074\/618\" data-src=\"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-scan-en.webp\" src=\"data:image\/svg+xml,%3Csvg xmlns=%22http:\/\/www.w3.org\/2000\/svg%22 viewBox=%220 0 2074 618%22%3E%3C\/svg%3E\" alt=\"Language Compiler&#x27;s Scan tab: 5,286 of 5,287 strings translated, 1 empty, 1 missing, coverage 99.9 %.\" width=\"2074\" height=\"618\" data-srcset=\"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-scan-en.webp 2074w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-scan-en-300x89.webp 300w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-scan-en-1024x305.webp 1024w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-scan-en-768x229.webp 768w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-scan-en-1536x458.webp 1536w, https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/10\/p12-2255-scan-en-2048x610.webp 2048w\" data-sizes=\"auto\"  \/><figcaption style=\"margin: 8px 0 0; font-size: 14px; line-height: 1.5; color: #50575e;\">One string missing: your Missing column says 1, and coverage stops at 99.9 %.<\/figcaption><\/figure>\n<p>Its limits, stated plainly. It works on AIOWS&#8217;s own <code>languages<\/code> folder and nothing else. Your other plugins&#8217; and your theme&#8217;s translations are yours to compile with <code>msgfmt<\/code>, Poedit or WP-CLI, as shown above. It writes <code>.mo<\/code> files only, with no <code>.l10n.php<\/code> and no JSON for scripts. And it does not diagnose how other plugins load: a profile language, a too-early call or a second copy of a file are yours to check with the verification above.<\/p>\n<p style=\"margin-bottom: 0;\"><a style=\"display: inline-block; padding: 11px 17px; margin: 6px 8px 0 0; border-radius: 8px; background: #1557ff; color: #fff; text-decoration: none; font-weight: bold;\" href=\"https:\/\/allinonewpsettings.com\/features\/language-compiler\" target=\"_blank\" rel=\"noopener noreferrer\">Explore AIOWS Language Compiler<\/a><a style=\"display: inline-block; padding: 10px 16px; margin: 6px 8px 0 0; border: 1px solid #1557ff; border-radius: 8px; color: #1557ff; text-decoration: none; font-weight: bold; background: #fff;\" href=\"https:\/\/allinonewpsettings.com\/pricing\" target=\"_blank\" rel=\"noopener noreferrer\">Compare AIOWS plans<\/a><\/p>\n<\/section>\n<h2 id=\"faq\" style=\"scroll-margin-top: 96px;\">FAQ<\/h2>\n<p><strong>I uploaded the translation and cleared the cache. Why is it still English?<\/strong> Check your profile language first, then the file name, then whether a file in <code>wp-content\/languages\/plugins\/<\/code> wins over yours.<\/p>\n<p><strong>Can I keep my own translation when the plugin updates?<\/strong> A file in the plugin&#8217;s own folder goes when the plugin&#8217;s folder is replaced by an update. Keep your PO file somewhere else, and rebuild after updates.<\/p>\n<p><strong>Why is the plugin translated on the front end but not in my admin?<\/strong> Your profile language decides your admin, the site language your public pages.<\/p>\n<p><strong>Does WordPress fall back from <code>de_DE_formal<\/code> to <code>de_DE<\/code>?<\/strong> Not for plugins. AIOWS does this for itself; your other plugins need their own <code>de_DE_formal<\/code> file.<\/p>\n<p><strong>Where do I see which strings are still untranslated?<\/strong> In your PO file, or in your editor&#8217;s list of untranslated entries. For AIOWS, the Scan tab counts them for you per language. More on reading language files is in <a href=\"https:\/\/allinonewpsettings.com\/blog\/how-to-scan-and-manage-wordpress-language-files\/\" target=\"_blank\" rel=\"noopener noreferrer\">how to scan and manage WordPress language files<\/a>.<\/p>\n<h2 id=\"official-sources\" style=\"scroll-margin-top: 96px;\">Sources<\/h2>\n<ul>\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2024\/10\/21\/i18n-improvements-6-7\/\" target=\"_blank\" rel=\"noopener noreferrer\">Internationalization improvements in 6.7 \u2014 Make WordPress Core<\/a><\/li>\n<li><a href=\"https:\/\/make.wordpress.org\/core\/2024\/02\/27\/i18n-improvements-6-5-performant-translations\/\" target=\"_blank\" rel=\"noopener noreferrer\">I18N Improvements in 6.5 (Performant Translations) \u2014 Make WordPress Core<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/load_plugin_textdomain\/\" target=\"_blank\" rel=\"noopener noreferrer\">load_plugin_textdomain() \u2014 WordPress Developer Resources<\/a><\/li>\n<li><a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/wp_set_script_translations\/\" target=\"_blank\" rel=\"noopener noreferrer\">wp_set_script_translations() \u2014 WordPress Developer Resources<\/a><\/li>\n<li><a href=\"https:\/\/make.wordpress.org\/polyglots\/handbook\/plugin-theme-authors-guide\/\" target=\"_blank\" rel=\"noopener noreferrer\">Plugin\/Theme Authors Guide \u2014 WordPress Polyglots Handbook<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Trace a missing WordPress plugin translation through its source string, text domain, locale, catalog format, path, and load timing before rebuilding or relocating files.<\/p>\n","protected":false},"author":1,"featured_media":7926,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[116],"tags":[],"class_list":["post-2255","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-language-compiler"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.0 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>WordPress Plugin Translations Not Showing: Causes and Fixes<\/title>\n<meta name=\"description\" content=\"Fix WordPress plugin translations that do not appear. Check the relevant WordPress layer, avoid common mistakes, verify the result, and keep a tested rollback.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"WordPress Plugin Translations Not Showing: Causes and Fixes\" \/>\n<meta property=\"og:description\" content=\"Fix WordPress plugin translations that do not appear. Check the relevant WordPress layer, avoid common mistakes, verify the result, and keep a tested rollback.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/\" \/>\n<meta property=\"og:site_name\" content=\"All in One WP Settings\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-28T10:34:19+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-10-18T02:20:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1440\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"All in One WP Settings\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"All in One WP Settings\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/\"},\"author\":{\"name\":\"All in One WP Settings\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#\\\/schema\\\/person\\\/daa924a7f9a0d0fbe18ea77286693c57\"},\"headline\":\"WordPress Plugin Translations Not Showing: Causes and Fixes\",\"datePublished\":\"2026-06-28T10:34:19+00:00\",\"dateModified\":\"2026-10-18T02:20:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/\"},\"wordCount\":1720,\"publisher\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp\",\"articleSection\":[\"Language Compiler\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/\",\"url\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/\",\"name\":\"WordPress Plugin Translations Not Showing: Causes and Fixes\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp\",\"datePublished\":\"2026-06-28T10:34:19+00:00\",\"dateModified\":\"2026-10-18T02:20:22+00:00\",\"description\":\"Fix WordPress plugin translations that do not appear. Check the relevant WordPress layer, avoid common mistakes, verify the result, and keep a tested rollback.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/#primaryimage\",\"url\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp\",\"contentUrl\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp\",\"width\":1440,\"height\":720,\"caption\":\"WordPress Plugin Translations Not Showing: Causes and Fixes\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wordpress-plugin-translations-not-showing-causes-and-fixes\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"WordPress Plugin Translations Not Showing: Causes and Fixes\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/\",\"name\":\"All in One WP Settings\",\"description\":\"Fewer plugins. Faster WordPress.\",\"publisher\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#organization\",\"name\":\"All in One WP Settings\",\"url\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/aiows-logo.webp\",\"contentUrl\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/aiows-logo.webp\",\"width\":772,\"height\":250,\"caption\":\"All in One WP Settings\"},\"image\":{\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/#\\\/schema\\\/person\\\/daa924a7f9a0d0fbe18ea77286693c57\",\"name\":\"All in One WP Settings\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/aiows-avatar\\\/user-1.jpg\",\"url\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/aiows-avatar\\\/user-1.jpg\",\"contentUrl\":\"https:\\\/\\\/allinonewpsettings.com\\\/blog\\\/wp-content\\\/uploads\\\/aiows-avatar\\\/user-1.jpg\",\"caption\":\"All in One WP Settings\"},\"sameAs\":[\"https:\\\/\\\/allinonewpsettings.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"WordPress Plugin Translations Not Showing: Causes and Fixes","description":"Fix WordPress plugin translations that do not appear. Check the relevant WordPress layer, avoid common mistakes, verify the result, and keep a tested rollback.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/","og_locale":"en_US","og_type":"article","og_title":"WordPress Plugin Translations Not Showing: Causes and Fixes","og_description":"Fix WordPress plugin translations that do not appear. Check the relevant WordPress layer, avoid common mistakes, verify the result, and keep a tested rollback.","og_url":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/","og_site_name":"All in One WP Settings","article_published_time":"2026-06-28T10:34:19+00:00","article_modified_time":"2026-10-18T02:20:22+00:00","og_image":[{"width":1440,"height":720,"url":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp","type":"image\/webp"}],"author":"All in One WP Settings","twitter_card":"summary_large_image","twitter_misc":{"Written by":"All in One WP Settings","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/#article","isPartOf":{"@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/"},"author":{"name":"All in One WP Settings","@id":"https:\/\/allinonewpsettings.com\/blog\/#\/schema\/person\/daa924a7f9a0d0fbe18ea77286693c57"},"headline":"WordPress Plugin Translations Not Showing: Causes and Fixes","datePublished":"2026-06-28T10:34:19+00:00","dateModified":"2026-10-18T02:20:22+00:00","mainEntityOfPage":{"@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/"},"wordCount":1720,"publisher":{"@id":"https:\/\/allinonewpsettings.com\/blog\/#organization"},"image":{"@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/#primaryimage"},"thumbnailUrl":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp","articleSection":["Language Compiler"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/","url":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/","name":"WordPress Plugin Translations Not Showing: Causes and Fixes","isPartOf":{"@id":"https:\/\/allinonewpsettings.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/#primaryimage"},"image":{"@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/#primaryimage"},"thumbnailUrl":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp","datePublished":"2026-06-28T10:34:19+00:00","dateModified":"2026-10-18T02:20:22+00:00","description":"Fix WordPress plugin translations that do not appear. Check the relevant WordPress layer, avoid common mistakes, verify the result, and keep a tested rollback.","breadcrumb":{"@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/#primaryimage","url":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp","contentUrl":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/09\/wordpress-plugin-translations-not-showing-causes-and-fixes-en.webp","width":1440,"height":720,"caption":"WordPress Plugin Translations Not Showing: Causes and Fixes"},{"@type":"BreadcrumbList","@id":"https:\/\/allinonewpsettings.com\/blog\/wordpress-plugin-translations-not-showing-causes-and-fixes\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/allinonewpsettings.com\/blog\/"},{"@type":"ListItem","position":2,"name":"WordPress Plugin Translations Not Showing: Causes and Fixes"}]},{"@type":"WebSite","@id":"https:\/\/allinonewpsettings.com\/blog\/#website","url":"https:\/\/allinonewpsettings.com\/blog\/","name":"All in One WP Settings","description":"Fewer plugins. Faster WordPress.","publisher":{"@id":"https:\/\/allinonewpsettings.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/allinonewpsettings.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/allinonewpsettings.com\/blog\/#organization","name":"All in One WP Settings","url":"https:\/\/allinonewpsettings.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/allinonewpsettings.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/07\/aiows-logo.webp","contentUrl":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/2026\/07\/aiows-logo.webp","width":772,"height":250,"caption":"All in One WP Settings"},"image":{"@id":"https:\/\/allinonewpsettings.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/allinonewpsettings.com\/blog\/#\/schema\/person\/daa924a7f9a0d0fbe18ea77286693c57","name":"All in One WP Settings","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/aiows-avatar\/user-1.jpg","url":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/aiows-avatar\/user-1.jpg","contentUrl":"https:\/\/allinonewpsettings.com\/blog\/wp-content\/uploads\/aiows-avatar\/user-1.jpg","caption":"All in One WP Settings"},"sameAs":["https:\/\/allinonewpsettings.com\/blog"]}]}},"lang":"en","translations":{"en":2255,"de":2256,"tr":2257},"pll_sync_post":{},"_links":{"self":[{"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/posts\/2255","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/comments?post=2255"}],"version-history":[{"count":3,"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/posts\/2255\/revisions"}],"predecessor-version":[{"id":8783,"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/posts\/2255\/revisions\/8783"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/media\/7926"}],"wp:attachment":[{"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/media?parent=2255"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/categories?post=2255"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/allinonewpsettings.com\/blog\/wp-json\/wp\/v2\/tags?post=2255"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}